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