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?

questionAnswers(2)

yourAnswerToTheQuestion