Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何构建一个企业MVC应用程序,业务逻辑在哪里?_Asp.net Mvc_Model View Controller_Architecture - Fatal编程技术网

Asp.net mvc 如何构建一个企业MVC应用程序,业务逻辑在哪里?

Asp.net mvc 如何构建一个企业MVC应用程序,业务逻辑在哪里?,asp.net-mvc,model-view-controller,architecture,Asp.net Mvc,Model View Controller,Architecture,我是MVC新手。据我所知: 控制器:处理路由请求 视图:处理数据的表示 模型:看起来非常像数据访问层 业务逻辑在哪里 以具有以下功能的大型企业应用程序为例: 多个不同的数据源(WCF、WebServices和ADO)绑定在一个数据访问层中(使用多个不同的DTO) 许多业务逻辑在几个DLL上分割 对于MVC web应用程序来说,什么是最合适的方法(在代码和项目结构方面) 我看到的示例中,所有内容都放在Model文件夹中,但它们似乎不适合于非常大的应用程序 谢谢你的建议 我倾向于将业务逻辑放

我是MVC新手。据我所知:

  • 控制器:处理路由请求
  • 视图:处理数据的表示
  • 模型:看起来非常像数据访问层
业务逻辑在哪里

以具有以下功能的大型企业应用程序为例:

  • 多个不同的数据源(WCF、WebServices和ADO)绑定在一个数据访问层中(使用多个不同的DTO)
  • 许多业务逻辑在几个DLL上分割
对于MVC web应用程序来说,什么是最合适的方法(在代码和项目结构方面)

我看到的示例中,所有内容都放在Model文件夹中,但它们似乎不适合于非常大的应用程序


谢谢你的建议

我倾向于将业务逻辑放在服务中,并从控制器调用它们,控制器将数据编组并将其发送到适当的服务

为了让MVC应用程序位于此之上,我将使用facade模式或类似的东西来代理对现有业务逻辑的调用。因此,您的服务本质上只是将数据传递给现有业务逻辑的外观

这样,现有的业务逻辑与新的基于MVC的代码之间就有了一个清晰的分界。

“视情况而定”:

请求被路由到控制器,控制器会适当地处理它们。控制器是将其他一切(模型、视图等)结合在一起的“粘合剂”。因此,很自然,“业务逻辑”要么直接处理,要么由控制器卸载到另一个组件

你把逻辑放在哪里取决于你的需要。如果一个控制器只需要一个逻辑,那么把它直接放在一个控制器里面就可以了。当然,如果数据一致性需要,逻辑也可能进入单个模型


或者,您可以将逻辑放在助手类/函数中,或者(正如其他人所提到的),您可以为业务逻辑创建一个服务层。

MVC不是一个满足您需要的完整体系结构,它只覆盖表示层。您的控制器应该与业务层对话,以获取模型对象。业务层可以与其他层对话,如数据库访问、web服务、文件系统等。

也许这将帮助您更好地理解模型。它们可以扮演数据传输对象的角色,也可以像链接所描述的那样更深入。然而,在我看来,他们不应该是你的朋友。我看到的许多示例使用服务和存储库模式处理业务逻辑和DAL

检查代码和camp示例以获取此示例


我还找到了Rob Connery's和the来帮忙。

ModelVViewC控制器听起来像是针对您的3层,但事实并非如此。它真正组织了用户界面的组合方式。控制器位于中间,通常(A)使用B业务对象进行填充,并且(B)从B业务对象获取M模型对象以传递到V视图。系统的MVC部分(UI功能)不知道业务层的另一端发生了什么。DB?服务电话?磁盘IO?发射激光?因此,MVC-B-?将是描述MVC及其连接方式的首字母缩略词

想象一下位于中心的C控制器,一条线向下延伸到B业务对象。控制器通常会从B业务对象获取M模型,以传递到V视图,但M模型只是数据。这是关键。从某种意义上说,C控制器现在是系统中最智能的部分,但B业务对象仍然是最强大的

因此,M模型对象是C控制器和B业务对象之间通信的很大一部分。此外,每个视图都有一个VMViewModel)对象,该对象可能是M模型,但可能是由C控制器构造的,用于将更复杂的信息集传递给V视图

因此,控制器(1)从客户机获取数据并处理业务对象(如有必要),可能使用模型对象进行通信,然后(2)从B业务对象获取M模型对象,构建VM,并将其提供给视图(可能有几个)呈现

起初,它看起来像是到处都是层和层,特别是因为进入MVC是增加界面使用的好时机(见最后3或4),而且。你的项目中可能会有比其他项目多得多的文件。尽管你很快就会发现这实际上是一种很好的组织方式

就像这个“顶”作为系统的一部分,MVC部分,我们不关心M模型对象是如何构造的,也不关心B业务对象对它们做了什么。当然,如果您的客户模型对象恰好看起来很像您的客户db表,请不要感到惊讶!这是正常和常见的。但是,您的客户M OdEL对象和您的客户<强> b>强>对象将真正有单独的生命。这是一个考虑

的好时机。 抵制懒惰的诱惑,在C控制器中加入大量的逻辑。每时每刻都努力将关注点放在它们下面的位置。C控制器只是用来连接东西的。如果需要大量代码来构建