Colocação de DTO / POCO em um projeto de três níveis
Eu estive no processo de reescrever o back-end de um site e movi-lo para uma arquitetura de três camadas.
Minha intenção é estruturá-lo assim:
Web site <--> WCF Service (1) <--> Business Layer (2) <--> Data Layer (3)
Meu problema é com o posicionamento dos DTOs dentro dessa estrutura. Eu precisarei usar DTO's para mover dados entre a camada de negócios e o serviço WCF e do serviço WCF para o site consumindo.
Durante a minha pesquisa aqui eu li algumas discussões excelentes embora eu tenha ficado coçando a cabeça um pouco:
Davide Piras faz alguns grandes pontos emesta postagem e se eu seguisse esse design, eu declararia interfaces para os POCOs em um projeto separado. Estes seriam então implementados pelos níveis (1) e (2). Embora eu goste do uso de interfaces, parece que eu estaria fazendo mais trabalho para mim declarando POCOs em (1) e (2) e depois copiando seus dados para frente e para trás usando algo como o AutoMapper.
Esta postagem usa um sistema no qual é criado um projeto de objetos de negócios que seria referenciado por todas as camadas. Isso parece ser mais simples do que a outra solução e parece levar-me a uma solução que seria
Web site <--> WCF Service (1) <--> Business Layer (2) <--> Data Layer (3)
<pre><code>^ ^ ^
| | |
[ -- Business Objects Referenced here --]
</code></pre>
Minha pergunta é a seguinte: há um cheiro de código por compartilhar os objetos de negócios em três camadas da solução ou os dois métodos listados acima são apenas duas maneiras diferentes de decifrar a mesma porca?