Em um projeto de várias camadas, onde as interfaces devem ser definidas?

9

Eu tenho um projeto de várias camadas composto por três subprojetos, ou seja, projeto de acesso a dados, projeto de lógica de negócios e projeto de apresentação, onde as interfaces devem ser definidas? Estou supondo que devam existir interfaces definidas no DAL e no BLL. No contexto de testar a camada lógica de negócios usando dados de "teste" baseados na interface, parece que talvez deva haver um projeto separado com apenas o interfaces?

Alguma prática recomendada ou idéia de como isso deve ser organizado?

John S
fonte

Respostas:

9

Uma boa abordagem para isso é usar o padrão de escada:

insira a descrição da imagem aqui

Assim, o DAL vive em um projeto, suas interfaces em outro, o BLL em um terceiro, suas interfaces em um quarto e assim por diante.

A idéia é que, ao testar, por exemplo, a camada de negócios, você apenas faça referência ao projeto de interfaces DAL, em vez de arrastar todo o DAL real e, por exemplo, NHibernate para o escopo, apenas para acessar essas interfaces.

Até onde eu sei, esse padrão é a criação de Gary McLean Hall em seu livro " Código adaptativo via C #: codificação ágil com padrões de design e princípios SOLID "

David Arno
fonte