根据提到的答案here,我明白我应该将业务逻辑放在模型本身内,而在我的程序中我直接在控制器的操作中使用EF,例如获取列表来自数据库的汽车直接我正在做以下事情:
public ActionResult CarList()
{
using(var _db = new CarRentEntities())
{
var result = _db.Cars.Where(m=>m.Active);
return View(result);
}
}
如果我将在控制器内部或模型内部使用上述代码,对我的网站性能有什么影响?
我应该使用哪种方法?例如,如果我想与团队合作,我是否应遵循分离代码的标准,请提出建议
使用存储库模式:我读过我们不应该使用if {例如here,我会复制一些提到的内容:
不将存储库模式与Entity一起使用的唯一最佳理由 框架?实体框架已经实现了存储库模式。 DbContext是您的UoW(工作单元),每个DbSet都是存储库。 在此基础上实现另一层不仅是多余的,而且是多余的 使维护更加困难。
如果我的数据库包含以下表格:制造商,汽车,租借,客户,租用类是客户端和汽车之间有2个外键的表,包含其他详细字段。
如何处理需要从2个不同的存储库汽车和客户端获取数据的租赁对象,以便根据用户输入的搜索条件显示租用网格,如果我将使用存储库汽车和客户,他们有他们的自己的dbContext, BOOM 我的头脑无法理解这种技巧,请提出建议
答案 0 :(得分:6)
你的问题的答案是,它并没有真正影响性能,但随着应用程序变得越来越大,它在可维护性方面肯定会成为一个问题。您可以采用SOLID架构原则:SOLID architecture principles using simple C# examples。这使您可以开发高质量的软件。
您可以创建一个多层应用程序:
- 接口层 - MVC应用程序
- 业务层 - 包含逻辑类的类库
- 数据访问层 - 数据库上下文和存储库,CRUD操作的工作单元
- 共享层 - 日志记录,AppSettings,验证,实用程序,扩展,常量,枚举
醇>
让你的应用程序在这个结构中需要你考虑控制反转,依赖注入等等,以确保松散耦合的类,简单的单元测试,最重要的是一个可靠的应用程序。
您还可以阅读:Implementing the Repository and Unit of Work Patterns in an ASP.NET MVC Application
答案 1 :(得分:2)
一般来说,模型是一个"单位" - 即它是您要显示的数据的模型。控制器是一个"集成商" - 即它将渲染网页所需的各种资源汇集在一起。您可能希望创建一个类似于此的数据库fascade类;
public ActionResult CarList()
{
using(var carStore = new Factory.CreateCarStore())
{
var result = carStore.GetActiveCars();
return View(result);
}
}
将数据库访问与Web控制器分开(这样可以使其更具可测性,因为您可以替换不同的CarStore实现(即测试XML数据集)进行测试。