[vc_row][vc_column][vc_column_text]No artigo de hoje, vamos saber como aplicar o Design Pattern Strategy com Typescript em sua aplicação.
[adrotate banner=”4″]
Com o crescimento do número de aplicações desenvolvidas, alguns desafios foram detectados de forma recorrente e as suas soluções eram semelhantes. Dessa forma, foram criados os Design Patterns, padrões e modelos de código que são capazes de resolver os problemas que aparecem de forma rotineira no desenvolvimento de sistemas. Um desses modelos de projeto é o Strategy.
O Strategy é um Design Pattern listado pela GoF (Gang of Four) do tipo comportamental. Ou seja, ele descreve como classes e objetos dividem as responsabilidades entre si. Além disso, ele consegue mudar o comportamento de um objeto de forma indireta através de outros objetos.
Com essas responsabilidades separadas, o Strategy consegue lidar de formas diferentes os dados que são recebidos por ele. Portanto, nesse padrão de projeto, é possível solucionar casos que é necessário a criação de uma família de algoritmos, dividir esses algoritmos em classes separadas e trocar os objetos dessas classes em tempo de execução, quando for necessário.
Exemplos de situações que uma empresa pode usar o Strategy para facilitar a implementação de uma tarefa:
O padrão do Strategy é ter 3 componentes principais:
Exemplo de um diagrama implementado o Strategy:
A interface Strategy define o que as classes que a implementarem devem possuir um método chamado algorithm. As classes do ConcretStrategy implementam a interface e possuem suas próprias regras de negócio para o método algorithm.
Por fim, na classe de Context, existe o método operation, que é responsável por chamar o método algorithm do objeto Strategy.
O Typescript é uma linguagem baseada no Javascript que possui um superconjunto de funcionalidades adicionais. Com esses novos recursos, é possível utilizar variáveis com uma tipagem estática opcional, os conceitos da orientação a objetos e outras coisas.
Abaixo temos um exemplo genérico aplicando os conceitos do strategy.
Criamos um exemplo mais concreto que pode ser utilizado no mundo real. Utilizando os conceitos vistos anteriormente, fizemos um projeto simples para enviar e-mails que é capaz de usar diferentes implementações.
Para a interface Strategy, temos a interface IMailSender, responsável por definir o método que as classes concretas devem implementar e o IMessageProps para definir o que a mensagem deve possuir:
Classes concretas que implementam o IMailSender, neste exemplo, temos o MailTrapMailSenderImplementaion, que é responsável por criar a regra de negócio necessária para ser capaz de enviar e-mails para mailtrap. Ademais, para termos outra implementação, criamos a classe FakeMailSenderImplementaion, que também implementa o IMailSender, mas apenas mostra a mensagem no console:
Por último, temos a classe de contexto chamada MailSender. Nela temos uma referência do tipo IMailSender mailProvider, um método que chama a função sendEmail do mailProvider e outro método que é capaz de trocar a referência do mailProvider, se necessário.
Para executar esse exemplo, temos também um index.ts.
Dessa forma, conseguimos fazer um sistema, utilizando o Typescript, que não dependa exclusivamente de uma implementação para o envio de e-mails. Se quisermos adicionar um outro serviço de e-mails, apenas seria necessário criar uma nova classe, criar a implementação com o IMailSender e construir a regra de negócio no método sendEmail.
Seguindo os conceitos utilizado no Strategy, é possível notar que os princípios do SOLID são respeitados:
Design Pattern Strategy com Typescript vai facilitar suas aplicações!
Com isso, vimos o que é o Design Pattern Strategy, como ele pode ajudar a resolver alguns desafios na construção de um sistema, em que casos ele pode ser útil, seus principais componentes e como aplicar o Design Pattern Strategy com Typescript. Além disso, vimos uma implementação usando o Typescript para o caso de envio de e-mails e como o Strategy consegue seguir todos os princípios do SOLID.
Link do repositório com os exemplos: https://github.com/albertojcvs/Strategy-Example[/vc_column_text][/vc_column][/vc_row]
Veja também:
Construção de Formik Field Array com React js
[adrotate banner=”5″]
Autor