Utilizamos cookies para ajudá-lo a navegar com eficiência e executar determinadas funções. Você encontrará informações detalhadas sobre todos os cookies em cada categoria de consentimento abaixo.
Os cookies categorizados como “Necessários” são armazenados no seu navegador, pois são essenciais para ativar as funcionalidades básicas do site.
Também utilizamos cookies de terceiros que nos ajudam a analisar como você usa este site, armazenam suas preferências e fornecem conteúdo e anúncios que são relevantes para você. Estes cookies só serão armazenados no seu navegador com o seu consentimento prévio.
Você pode optar por ativar ou desativar alguns ou todos esses cookies, mas a desativação de alguns deles pode afetar sua experiência de navegação.
Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.
Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.
Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.
Performance cookies are used to understand and analyse the key performance indexes of the website which helps in delivering a better user experience for the visitors.
Advertisement cookies are used to provide visitors with customised advertisements based on the pages you visited previously and to analyse the effectiveness of the ad campaigns.
[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