我应该在MVC编码中使用的标准是什么

时间:2015-07-31 09:17:36

标签: c# entity-framework model-view-controller

根据提到的答案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 我的头脑无法理解这种技巧,请提出建议

2 个答案:

答案 0 :(得分:6)

你的问题的答案是,它并没有真正影响性能,但随着应用程序变得越来越大,它在可维护性方面肯定会成为一个问题。您可以采用SOLID架构原则:SOLID architecture principles using simple C# examples。这使您可以开发高质量的软件。

您可以创建一个多层应用程序:

  
      
  1. 接口层 - MVC应用程序
  2.   
  3. 业务层 - 包含逻辑类的类库
  4.   
  5. 数据访问层 - 数据库上下文和存储库,CRUD操作的工作单元
  6.   
  7. 共享层 - 日志记录,AppSettings,验证,实用程序,扩展,常量,枚举
  8.   

让你的应用程序在这个结构中需要你考虑控制反转,依赖注入等等,以确保松散耦合的类,简单的单元测试,最重要的是一个可靠的应用程序。

您还可以阅读: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数据集)进行测试。