Um exemplo prático de implementação do padrão factory que tira vantagem do sistema de tipagem do TypeScript
O padrão Factory é um dos padrões de criação mais comuns. Liga a aplicação de forma flexível, ocultando os detalhes de implementação do código cliente através da interface. Deixa a criação de instâncias de objectos para a implementação da fábrica.
Este artigo tem como objetivo mostrar como melhorar o “criador” da fábrica com um mapa de tipos TypeScript.
Implementação da Fábrica de Utilizadores
Vamos utilizar um exemplo típico de uma fábrica que cria diferentes tipos de utilizadores: Gerente e Desenvolvedor, por uma questão de simplicidade. Pode imaginar que haverá muitos mais tipos num projeto real.
Em primeiro lugar, vamos definir nossas classes Gerente e Desenvolvedor.
No código acima, definimos uma IStaff
para que ambas as classes Manager e Developer a implementem. Isso é essencial para que o padrão Factory funcione, de modo que o código cliente não precisa conhecer uma classe específica, apenas a interface.
Outra coisa notável é o uso do “NullStaff
” (Padrão de Objeto Nulo). Simplifica o código do cliente e evita erros de execução quando é introduzido um tipo de utilizador inválido.
Finalmente, temos a UserFactory implementada abaixo e a UserService
como o cliente que consome a fábrica. O UserService
não conhece a classe Manager ou Developer. Ele apenas passa um userType
e recebe de volta uma instância concreta da classe do utilizador.
Coisas a melhorar
Há algumas coisas que não me satisfazem inteiramente.
Em primeiro lugar, o caso Switch é utilizado na função de criação da fábrica estática. É um problema de código, uma vez que vai continuar a crescer com a adição de mais tipos de utilizadores.