Domínio vs DTO vs ViewModel - Como e quando usá-los?

Em um projeto multicamadas com Camada de Domínio (DL) / Camada de Negócios (Serviço) (BL) / Camada de Apresentação (PL), qual é a melhor abordagem para entregar Entidades à Camada de Apresentação?

DO => Domain Object;
DTO = Domain Transfer Object;
VM => View Model;
V => View;

Opção 1:

DL => DO => BL => DTO => PL => VM => V

Esta opção parece ser a Melhor Prática, mas também parece pesada para manter.

Opção 2:

DL => DO => BL => DTO => PL => V

Esta opção não parece muito boa prática, mas como DTO são quase idênticos para a VM, podemos passá-lo diretamente para o View e é menos doloroso para implementar e manter.

Essa opção também é confiável para vários layouts, por exemplo, para dispositivos móveis? Talvez eu precise de menos informações do BL, então precisarei de uma VM diferente para esse layout específico?

questionAnswers(4)

yourAnswerToTheQuestion