C# 业务层是否在MVC中?

C# 业务层是否在MVC中?,c#,asp.net-mvc-2,C#,Asp.net Mvc 2,什么时候在mvc web应用程序中有一个业务层比较方便?为什么来自控制器的调用直接进入数据访问层 什么时候在mvc web应用程序中有一个业务层比较方便 如果您有一些想要重用的现有或复杂的业务逻辑,这可能会很方便。显然,这并不意味着在每个应用程序中都应该有一个业务层。这将取决于应用程序的具体要求,如果回答这个问题而不提供有关您的场景的更多细节,将是主观的 所以,如果你想要一个客观的答案,请提供一个客观的场景,否则我们只是在这里闲聊,没有建设性 为什么从控制器直接调用数据访问层 不知道,这将是不好

什么时候在mvc web应用程序中有一个业务层比较方便?为什么来自控制器的调用直接进入数据访问层

什么时候在mvc web应用程序中有一个业务层比较方便

如果您有一些想要重用的现有或复杂的业务逻辑,这可能会很方便。显然,这并不意味着在每个应用程序中都应该有一个业务层。这将取决于应用程序的具体要求,如果回答这个问题而不提供有关您的场景的更多细节,将是主观的

所以,如果你想要一个客观的答案,请提供一个客观的场景,否则我们只是在这里闲聊,没有建设性

为什么从控制器直接调用数据访问层


不知道,这将是不好的做法,因为这将使您的控制器与数据库紧密耦合,因此很难进行单元测试。如果明天你决定换成罐头怎么办?是否要修改控制器?我建议您通过始终使用抽象(抽象类/接口),使应用程序的不同层尽可能弱耦合。

模型是mvc中的业务层

编辑(还有一点咆哮):我对MS产品的体验在MVC v1中停止了。那时,你的模型是由L2S或EF或其他什么生成的。我知道MVVM在mvc中非常流行,但这种模式表示支持视图的是视图模型,而支持业务逻辑的是模型。Rails、merb、django、symphony、backbone.js和我所知道的所有其他mvc框架都会调用您将业务逻辑放入模型中的东西,当您访问wikipedia并查找mvc时,您将看到它对模型有这样的描述

模型管理行为和行为 应用领域的数据, 回应索取资料的要求 关于其状态(通常从 视图),并响应 更改状态(通常从 控制器)。在事件驱动系统中, 模型通知观察者(通常是 视图)当信息发生如此变化时 他们可以做出反应


这并不意味着愚蠢,但是如果ASP.net MVC调用视图模型,那么他们使用的术语是错误的,并且完全与他们命名框架的模式失去了联系。

在应用程序中使用业务层总是很有帮助的。对于一些除了CRUD之外没有太多功能的非常简单的应用程序,EF或LINQtoSQL生成的对象可以用作业务对象。在控制器中嵌入数据访问调用的唯一时间是当应用程序非常简单时。

当您的逻辑既不涉及特定Web事务的控制流,也不涉及特定域对象的数据访问时。请参阅MSDN白皮书中有关ASP.NET MVC单元测试的这一部分:


我建议使用存储库模式将数据访问的细节与控制器分开。您不一定需要整个业务层,除非您有一个包含许多自定义规则的复杂域。但是,您可能应该将存储库接口和类保存在单独的库中,这样存储库上的单元测试就不会使用web层(您可以在那里测试控制器)

下面是一个将工作单元和存储库模式与实体框架结合使用的好例子:


作为一名应用程序开发人员,当我编写.NET代码时——这并不是说夸大了我自己的自尊心,而是说我的主要目标是编写不可避免地需要不断扩展和更改的应用程序

因此,我将模型代码写在子文件夹BOL和DAL下

DAL处理所有的数据库代码——有一个BaseDAL,它具有获取数据集的函数和获取返回值的函数(有数据集和没有数据集)——我只使用存储过程

BOL对实际对象进行建模,每当我需要数据库中的数据时,我都会调用相关的DAL。因此,BOL是实际的BOL,我可以随时更改DAL

分离是良好发展的关键,在我看来,将BOL与DAL分离是很有意义的。你不应该从一个控制器打db电话,这完全是错误的

MVC中关于 ASP.NET/MVC明确指的是 视图模型

  • 真的吗?那么在ASP.NET/MVC中,V代表什么呢

请记住,MVC框架只是一个表示层。如果您看到wikipedia,您将认识到该模型基本上是域层,所有业务逻辑都应该在那里处理

关于控制器是否应该直接引用数据库,有几种理论。还有一种趋势正在出现,即:


<>为了使控制器精简和可测试,你可以考虑实现控制器调用的一个。

ERM……我不认为那是真的。它们实际上是特定于页面的模型,与UI的耦合性比后端强得多。不,你说的是视图模型。在MVC上下文中,模型是业务逻辑层。@Matt,不确定您指的是什么。MVC中关于ASP.NET/MVC的M明确指的是视图模型。+1-在传统MVC中,它们是业务层-域模型。没有什么能阻止您使用ASP.NET MVC实现这一点,尽管这有点难以讨论,因为ASP.NET.MVC将视图模型简单地称为“模型”。@Kirk Woll,评论不错。确切地说:
MVC中关于ASP.NET/MVC的M明确地指的是视图模型
+1尽管实际上我想我目前没有使用MVC模式,因为我们还没有移动到.NET 4.0,但我想当我们移动到.NET 4.0时,我会使用类似的方法。嗯。。。好吧,也许,有人请点亮