我何时应该在控制器与模型中编写代码?

时间:2013-08-16 22:04:21

标签: c# asp.net-mvc asp.net-mvc-4

毫无疑问,我知道控制器和模型的用途。但是,我能够编写与我的数据库交互的代码,例如在控制器或模型上将用户添加到表中。我应该在什么时候在控制器和模型中编写代码?尽管两者都有效,但更有条理或更实际的方式。如果答案含糊不清,请你发贴例子吗?Thx

4 个答案:

答案 0 :(得分:4)

访问数据库的代码应该在服务层,而不是保留在Controller或Model中。

Accessing Database Entities from Controller

以下是我对上述问题的回答,您还可以阅读其他答案,为什么您应该保留在单独的图层中。

namespace MyProject.Web.Controllers
{
   public class MyController : Controller
   {
      private readonly IKittenService _kittenService ;

      public MyController(IKittenService kittenService)
      {
         _kittenService = kittenService;
      }

      public ActionResult Kittens()
      {
          // var result = _kittenService.GetLatestKittens(10);
          // Return something.
      }
   }  
}

namespace MyProject.Domain.Kittens
{
   public class Kitten
   {
      public string Name {get; set; }
      public string Url {get; set; }
   }
}

namespace MyProject.Services.KittenService
{
   public interface IKittenService
   {
       IEnumerable<Kitten> GetLatestKittens(int fluffinessIndex=10);
   }
}

namespace MyProject.Services.KittenService
{
   public class KittenService : IKittenService
   {
      public IEnumerable<Kitten> GetLatestKittens(int fluffinessIndex=10)
      {
         using(var db = new KittenEntities())
         {
            return db.Kittens // this explicit query is here
                      .Where(kitten=>kitten.fluffiness > 10) 
                      .Select(kitten=>new {
                            Name=kitten.name,
                            Url=kitten.imageUrl
                      }).Take(10); 
         }
      }
   }
}

答案 1 :(得分:4)

为此,您应该添加逻辑层或逻辑类。控制器应该确定想做和可以做的,将它们按正确的方向(逻辑层)进行混洗,然后确定在逻辑之后向用户显示什么。将逻辑放在单独的层中将有助于保持控制器的精益,并促进代码重用。

在域核心中,我们只有具有属性的模型。所有逻辑都在不同的层中执行,除了返回以格式连接的字段的属性之外。

答案 2 :(得分:3)

ASP.NET MVC和MVC,一般来说,是一个表示层模式;因此,您与数据库的交互应该位于表示层之外的层中,通常是数据访问层,但它也可以是服务层或业务层。

答案 3 :(得分:0)