Pergunta

Atualmente estou trabalhando em um projeto web site ASP.net MVC.

Eu coloquei todo o material relacionado banco de dados no meu modelo, como consultas e atualização / / delete funções de economia.

Eu também criado um par de controladores que executam a lógica. Eu adicionei um namespace Helpers e dentro desse namespace existem algumas classes que contêm lógica de paginação, internacionalização etc.

Eu queria saber qual é a melhor prática para a colocação de funções e classes que fazem algumas coisas em geral, como a geração de uma fatura?

Foi útil?

Solução

Como eu expresso em um comentário anterior, eu sou muito muito interessado nesta questão.

Em primeiro lugar, parece errado para criar diretórios adicionais (para as outras classes e utilitários) diretamente em seu projeto ASP.NET MVC. Além disso, eu não sinto que ele deve estar em modelo. Para mim, o modelo é mais ou menos dados classes que de alguma forma representa o banco de dados (ou os dados que estamos tentando modelo). Além disso, muitas vezes a funcionalidade de negócios (ou as peças "reais" de código em sua aplicação) lida com várias classes de modelo de cada vez, e por isso não pode ser um lugar natural para ele de alguma classe de modelo.

Então eu acho que estou inclinado para o seguinte esquema:

  • Faça acções controlador muito pequena ; apenas algumas linhas de código cada.
  • Mantenha modelo simples e principalmente sem função, e colocá-lo em um projeto separado .
  • Coloque tudo seu código que faz todo o trabalho "real" (a "camada de negócios") em um projeto separado .

Desta forma, você terá uma total liberdade na escolha de seus próprios namespaces, você será capaz de criar qualquer número de classes de utilitários, funções e geralmente capazes de estruturar o seu código como você gosta sem ser restringido por ASP.NET MVC.

Esta é apenas uma idéia. No momento eu estou trabalhando em meu primeiro maior aplicação ASP.NET MVC. Então, eu estou indo realmente para saber se e como isso funciona na prática.

Outras dicas

Eu tenho classes de modelo que têm Crud e Poco como você tem.

Além de que tenho ViewModels que são usados ??para as vistas digitadas.

As minhas viewmodels são bastante grande e usado em uma série de pontos de vista (cerca de 10-15 ViewModels para toda a appplication). Na minha aplicação destas ViewModels acabou como sendo o local perfeito para o código que cosido grande e repetetive para as ações do controlador.

Por exemplo, eu tenho alguma lógica que é muito perto de UI quando eu adicionar um produto ao carrinho. Agora tenho um método no ViewModel: AddToCart (IProductService productService, ICartService cartService).

Você pode considerar a criação de alguns serviços que você injetar em seus controladores.

É quase demasiado ampla uma pergunta.

Este tipo de lógica de negócio deve estar em algum lugar no seu modelo.

No entanto, acho que quando há apenas algo que realmente não se "encaixar" em qualquer lugar - e você pode ser tentado a criar uma classe Utilitários -. Este é geralmente um bom lugar para utilizar métodos de extensão

Talvez você pode adicionar métodos de extensão em seu conjunto de dados para ajudá-lo com paginação?

Eu você realmente precisa do melhor prática, considerar a olhar para Domínio impulsionada projeto . Ele não agradar a todos os projectos e exige boa capacidade de OOP, mas eu acho que é sem duvida uma "melhor prática" ... contanto que você pode pagar; -)

Observe que você já faz violar DDD desde que você use Active Record (colocar persistência lógica em entidades). Então, eu não digo que você Have a seguir DDD. Mas será útil para Grokar de qualquer maneira.

Eu acho que a melhor solução para esta questão sobre a prática é: Coloque a lógica no modelo, se ele vai ser usado em controladores. Se é específico do controlador, só soltá-lo em seu controlador. Quando eu digo o modelo, este poderia ser um projeto separado que conatins seu modelo de dados de entidade, ou poderia ser uma Model View, ou poderia ser apenas a pasta Modelos do seu projeto MVC.

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