Meu projeto é dividido da seguinte forma:
DAL (Entity)
-> BLL (DTO)
-> ApplicationComponent (ViewModel)
.
Haverá vários componentes de aplicativo ( ApplicationComponent
) que BLL
. Os componentes incluem serviços do Windows, serviços da Web, API da Web e controlador MVC.
Estou transformando objects NHibernate
Entity
objects DTO
e os transmito de DAL
para BLL
. Ao passar esse estado para ApplicationComponent
, a BLL
novamente o converte para ViewModel
.
Isso me ajuda a separar as preocupações e como os dados são tratados em cada camada. Eu não sou a favor de retornar o object NHibernate
Entity
para ver pelas seguintes razões:
UI
do UI
que eu quero ocultar (ou apenas expor, se necessário), como senhas, tipo de usuário, permissão etc. NHibernate
executa consultas adicionais quando a propriedade é acessada, o que anula o uso de carregamento lento. Entity
) criam confusão e lacuna para erros. BLL
/ UI
. Entity
não é projetada para UI
do UI
. Não é possível veicular a UI
do UI
em todos os casos. DTO
para validação de input do usuário que parece estranho com Entity
. Estou enfrentando problemas com essa abordagem:
AutoMapper
ou algo semelhante; mas isso não resolve totalmente o problema. Link1 sugere transferir o object Entity
para ver o que, no meu entender, não é uma boa ideia.
Link2 sugere mapear Entity
com DTO
que eu já estou de acordo.
Link3 não ajuda.
Link4 sugere usar algo como ferramentas de mapeamento automático, o que é ok. Mas ainda não resolve completamente o problema.
Link5 é ótimo post. Explica por que esses devem ser separados, o que estou de acordo. Ele não comenta como minimizar a sobrecarga causada por ele.
Link6 não é útil novamente.
Acabei de ler esta excelente resposta que sugere usar Entity
como é na UI
se possível . Ainda não se aplica à maior parte do meu projeto.
Outro excelente post sugere mapear de duas maneiras como eu estou fazendo agora. Ainda não sugere uma maneira de minimizar a sobrecarga.