Pergunta

Gosto da ideia de ter Interfaces e Implementação separadas.Mas quão separados?As definições de interface estão em um assembly .Net separado?Você tem um único projeto que define todas as interfaces de uma solução?Caso contrário, existem problemas com dependências circulares de interfaces?

Foi útil?

Solução

Coloque seus objetos e interfaces de domínio em um assembly de "domínio" separado.
Este assembly nunca deve fazer referência a nada além dos assemblies principais do .net.

Dessa forma, você obtém uma separação clara entre seu modelo de domínio/serviço e sua implementação.

Editar:
http://jeffreypalermo.com/blog/the-onion-architecture-part-1/

Outras dicas

Eu não colocaria as interfaces em uma montagem separada apenas por fazer.No entanto, se as interfaces fizerem parte de qualquer forma de IPC ou arquitetura de extensibilidade, muitas vezes faz sentido fornecer a elas sua própria montagem.

Se você tiver projetos que precisam fazer referência entre si, então sim, você precisará de um assembly separado para as interfaces, mas também deverá com cuidado examine a arquitetura para ver se existe outra maneira de resolver a dependência circular.

Prefiro manter as implementações mais comuns ou simples da interface em uma subpasta (e namespace) após o nome da interface.

\project\
\project\IAppender.cs
\project\Appender\
\project\Appender\FileAppender.cs
\project\Appender\ConsoleAppender.cs

Se eu estender esta classe para fora do projeto.Em um projeto especial, repita as pastas/namespace de forma semelhante.

\specialproject\
\specialproject\Appender\
\specialproject\Appender\MemoryAppender.cs

No projeto em que estou trabalhando agora, as interfaces e as classes base relacionadas vão para assemblies que são divididos logicamente entre funções.As implementações desses provedores e classes vão dentro de um assembly principal.A ideia é que as pessoas que usam nossa API possam referenciar mais ou uma das DLLs da API de maneira clara e lógica.

Aplicações menores não precisam desse tipo de separação.Mas, não importa onde eu guarde as interfaces, eu as manteria no mesmo namespace que qualquer classe base.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top