As classes de fábrica geralmente são implementadas porque permitem que o projeto siga os princípios SOLID mais de perto. Em particular, os princípios de segregação de interface e inversão de dependência.
Fábricas e interfaces permitem flexibilidade a longo prazo. Permite um design mais dissociado - e, portanto, mais testável. Aqui está uma lista não exaustiva de por que você pode seguir esse caminho:
- Ele permite que você insira um contêiner Inversion of Control (IoC) facilmente
- Torna seu código mais testável, já que você pode simular interfaces
- Ele oferece muito mais flexibilidade na hora de alterar o aplicativo (por exemplo, você pode criar novas implementações sem alterar o código dependente)
Considere esta situação.
Montagem A (- > significa depende de):
Class A -> Class B
Class A -> Class C
Class B -> Class D
Eu quero mover a Classe B para a Montagem B, que é dependente da Montagem A. Com essas dependências concretas, preciso mover toda a hierarquia de classes inteira. Se eu usar interfaces, posso evitar muita dor.
Montagem A:
Class A -> Interface IB
Class A -> Interface IC
Class B -> Interface IB
Class C -> Interface IC
Class B -> Interface ID
Class D -> Interface ID
Agora posso mover a classe B para a montagem B sem dor alguma. Ainda depende das interfaces no assembly A.
Usar um contêiner IoC para resolver suas dependências permite ainda mais flexibilidade. Não há necessidade de atualizar cada chamada para o construtor sempre que você alterar as dependências da classe.
Seguindo o princípio de segregação de interface e o princípio de inversão de dependência, podemos construir aplicativos altamente flexíveis e desacoplados. Depois de trabalhar em um desses tipos de aplicativos, você nunca mais desejará voltar a usar a palavra-chave new
.