Como essa pergunta parece ser bastante subjetiva, estou postando aqui.
Vamos dizer que você está escrevendo sua própria versão de Stackoverflow utilizando ASP.NET MVC, por isso há classes como Question
, Answer
, User
, etc. Uma vez que você é preguiçoso, você decidiu usar estrutura de entidade. Portanto, todas as classes mencionadas acima têm propriedades de navegação: Question
sabe o que é Answer
s, Answer
sabe User
quem o postou etc.
Você leu muitos livros de Martin Fowler, portanto, com certeza, terá uma camada de serviço para implementar toda a lógica de negócios lá. Você usará o ASP.NET MVC apenas para a funcionalidade relacionada à lógica da interface do usuário e do aplicativo.
Existem 2 perguntas:
- Você irá expor diretamente objetos de
Question
,Answer
e outros para os controladores? - Você fará o mesmo para visualizações?
Basicamente, não fornecerei uma API REST para o meu aplicativo, nem sou muito conservador para ter algum medo como "ei, o MY VIEW está ciente do que Question
é, não sei se é ruim ou não, Eu simplesmente não gosto! ".
Estou especialmente curioso sobre o caso em que a Question
classe tem um campo como TimePosted
e você vincula sua PostNewQuestion
visão a essa classe. Sei que, caso não esteja vinculando esse campo a nenhum controle da página, ele não será publicado, portanto, o campo será definido null
quando tiver o objeto no lado do controlador. É considerado bom ou é uma má ideia? Estou pensando em duas abordagens opostas: "usando DTOs / ViewModels em todos os lugares" e "wtf, menos classes são sempre melhores!"
O que você acha que é uma abordagem correta ? (Eu sei que não há resposta direta, então a questão é: "o que se deve considerar para decidir se os DTOs / ViewModels / O que mais é bom para a arquitetura do aplicativo?")
Observe também que estamos considerando um clone muito simplificado do Stackoverflow, portanto:
- É um projeto somente para web (não vamos expor a API REST ou qualquer outra coisa)
- Existem usuários, perguntas, respostas, tags e funcionalidade de pesquisa (sem lógica comercial excepcional)
- Existem cerca de 100 usuários ativos por dia (sem requisitos especiais de desempenho)
- O código deve ser legível e não deve haver surpresas ou locais de interesse especial no caso de um novo membro ingressar na equipe de desenvolvimento.
Você também pode expressar sua opinião, caso algum dos três primeiros pontos seja alterado - "o cliente agora quer que nosso serviço permita 10000 usuários simultâneos" ou "agora precisamos apenas permitir que cada usuário publique uma vez a cada 15 minutos", etc.
Obrigado!
fonte