Pergunta

Estou configurando uma aplicação n-tier com MVC, Ninject e NHibernate (meu primeiro usando essas tecnologias). Por uma questão de clareza, as camadas são uma tier "Data", uma camada "Serviços", e uma camada "Web" (todos são projetos separados).

Com MVC, você tem seus modelos que estão na pasta "Modelos". Parece necessário colocar meus modelos aqui para criar Visualizações fortemente tipados e geralmente manter com a filosofia do MVC.

No entanto, com NHibernate, eu também preciso meus modelos na camada de "dados" para que o mapeamento pode acontecer e que NHibernate pode instanciar objetos reais para retornar à camada de serviços.

A duplicação de classes entre os projetos não é muito seco e abstraindo-los em sua própria biblioteca não parece jogar bem com MVC (nem na prática nem filosofia).

Todos os pensamentos? Como você estrutura o seu O / RM objetos vs modelos MVC?

Foi útil?

Solução

Eu mantenho modelos Entity Framework / classes na camada de dados e usar os modelos pasta do projeto MVC para modelos de apresentação e ligantes modelo.

Outras dicas

O Modelo de Dados é a sua própria coisa. O modelo em MVC é algo diferente. É o modelo do que você está indo para mostrar, que pode ou não pode ser o seu modelo de dados. Você está modelo de dados pode transcender camadas, ou não.
Tomemos por exemplo o formulário de inscrição padrão. O Modelo de Dados pode incluir o nome de usuário, senha e uma série de aulas de história login, um sinalizador que indica ele está ativo e muito outras coisas. O modelo no MVC, só pode realmente se preocupam com nome de usuário e senha, e que o usuário digite a senha duas vezes. Será que o seu modelo de dados realmente precisa de dois campos de senha? Não. No entanto, o modelo no MVC faz. Assim, duas criaturas diferentes.

Eu mantenho todas as minhas modelos na camada de dados por causa do NHibernate. Dê uma olhada na S # arp Architecture para uma ótima maneira de manter sua apresentação limpa . Modelos não tem que estar fisicamente localizados em seu projeto web para seus pontos de vista a ser fortemente tipado.

Você está certo sobre o princípio de DRY aqui. Eu mantenho a minha LINQ to SQL objetos separados dos meus objetos de negócios e eu tenho alguma duplicação e não me fazer sentir bem, mas parece que não é uma simples solucionar esse ..

Eu tive um tempo difícil tomar essa decisão, mas eu assisti blog de Rob Conery, enquanto a construção do MVC Storefront e no final eu decidi ir por este caminho (objetos ORM e objetos de negócios)

Com MVC, você tem seus modelos que estão na pasta "Modelos". Parece necessário colocar meus modelos aqui para criar Visualizações fortemente tipados e para geralmente manter com a filosofia de MVC.

Nenhum modelo pode ser o que quiser. Eu ainda iria usar um modelo de apresentação, se fosse necessário, mas eu não tenho nenhuma objeção ao uso de suas entidades nhibernate em seus pontos de vista.

Com NHibernate você realmente não precisa de uma camada de dados já que a própria sessão é a camada de dados.

A camada de serviço parece ser uma idéia válida, mas somente se você planeja ter vários clientes para essa camada.

Caso contrário, eu teria apenas 1 projeto e usar namespaces para separar as minhas camadas. Baseia-se mais rápido e é mais fácil de implantar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top