Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.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
C# 采用三层体系结构的MVC模式_C#_Asp.net Mvc_Asp.net Mvc 3_Entity Framework - Fatal编程技术网

C# 采用三层体系结构的MVC模式

C# 采用三层体系结构的MVC模式,c#,asp.net-mvc,asp.net-mvc-3,entity-framework,C#,Asp.net Mvc,Asp.net Mvc 3,Entity Framework,我正在我的应用程序中使用ASP.NET MVC。我将我的应用程序划分为三层体系结构。1) 数据访问层(使用实体框架),2)应用程序/业务层,3)表示层(ASP.NET MVC) 因为我在表示层使用MVC框架,所以我对业务逻辑感到困惑。我需要知道在MVC模式中我应该把我的业务逻辑放在哪里。换句话说,我们可以说从哪里我需要调用我的中间层。从模型还是从控制器 如果我从Controller调用我的业务逻辑,那么这些模型似乎是无用的。另一方面,如果我从模型中调用业务逻辑,那么在系统上似乎没有必要进行竞价,

我正在我的应用程序中使用ASP.NET MVC。我将我的应用程序划分为三层体系结构。1) 数据访问层(使用实体框架),2)应用程序/业务层,3)表示层(ASP.NET MVC)

因为我在表示层使用MVC框架,所以我对业务逻辑感到困惑。我需要知道在MVC模式中我应该把我的业务逻辑放在哪里。换句话说,我们可以说从哪里我需要调用我的中间层。从模型还是从控制器

如果我从Controller调用我的业务逻辑,那么这些模型似乎是无用的。另一方面,如果我从模型中调用业务逻辑,那么在系统上似乎没有必要进行竞价,因为业务对象与模型映射,然后模型被传递给控制器。模型的作用正是DTO所做的


任何帮助都将不胜感激

ASP.NET MVC层或层既不包含业务逻辑也不包含业务模型M代表UI模型,而不是应用程序核心的模型,
MVC
(以及其他
MV*
模式)通常是用于分离UI关注点的模式。您应该从控制器发送消息(调用)您的业务层(BL),聚合数据,创建或将其结果映射到UI模型,并将其传递给视图。您的UI模型应该对BL模型一无所知——这种区别使得应用程序的各个层松散耦合

换句话说,我们可以说从哪里我需要调用我的中间层。 从模型还是从控制器

绝对是控制器的。您向它注入依赖项,并从操作方法调用它们。NET MVC提供了许多将依赖项注入控制器的机制,并与NInject、StructureMap和其他一些IoC容器很好地集成

MVC中组件之间的依赖关系如下所示

图片取自Martin的Fowler文章,顺便说一句,这是一篇关于MVC和MVP的非常好的阅读

此外,还有一组关于软件实践的视频,涵盖了设计模式。我从他们对MVVM和MVP的定义中学到了很多


阅读这些材料不仅可以提高您对模式本身的理解,还可以提高您对模式如何适应应用程序环境以及如何与之交互的理解

ASP.NET MVC
层或层既不包含业务逻辑也不包含业务模型M代表UI模型,而不是应用程序核心的模型,
MVC
(以及其他
MV*
模式)通常是用于分离UI关注点的模式。您应该从控制器发送消息(调用)您的业务层(BL),聚合数据,创建或将其结果映射到UI模型,并将其传递给视图。您的UI模型应该对BL模型一无所知——这种区别使得应用程序的各个层松散耦合

换句话说,我们可以说从哪里我需要调用我的中间层。 从模型还是从控制器

绝对是控制器的。您向它注入依赖项,并从操作方法调用它们。NET MVC提供了许多将依赖项注入控制器的机制,并与NInject、StructureMap和其他一些IoC容器很好地集成

MVC中组件之间的依赖关系如下所示

图片取自Martin的Fowler文章,顺便说一句,这是一篇关于MVC和MVP的非常好的阅读

此外,还有一组关于软件实践的视频,涵盖了设计模式。我从他们对MVVM和MVP的定义中学到了很多


阅读这些材料不仅可以提高您对模式本身的理解,还可以提高您对模式如何适应应用程序环境以及如何与之交互的理解

这纯粹是您必须根据需求做出的设计/架构决策

如果您希望扩展应用程序以支持其他服务/应用程序,建议不要在控制器/模型中编写任何业务逻辑。您可以在业务/应用层编写它。这将帮助您在将来扩展您的体系结构。比如说,如果您想为您的移动应用程序创建restful服务,您可以将服务作为包装器编写,以重用现有的业务/应用程序层

另外,只要看看领域驱动设计,Eric Evans的书就值得一读


这纯粹是您必须根据需求做出的设计/架构决策

如果您希望扩展应用程序以支持其他服务/应用程序,建议不要在控制器/模型中编写任何业务逻辑。您可以在业务/应用层编写它。这将帮助您在将来扩展您的体系结构。比如说,如果您想为您的移动应用程序创建restful服务,您可以将服务作为包装器编写,以重用现有的业务/应用程序层

另外,只要看看领域驱动设计,Eric Evans的书就值得一读


非常感谢伊利亚·伊万诺夫。你真的帮助了我。有一件事我忘了问我们在哪里执行演示验证?在视图或控制器中。请您更详细地解释一下演示验证是什么意思?用户输入?它应该由控制器触发,但最好将逻辑放在执行验证的数据附近。所以模特儿似乎是个好地方。但这可能因问题的上下文而异。是的,我想验证用户输入。您说过模型是一个很好的地方,但是客户端验证呢?如果我们将验证放在模型中,它需要回发,或者如果我们将验证放在模型和视图的两个位置,代码在两个不同的位置隔离,因为同一个问题可能会导致维护问题,可能很难维护是的,但是客户端通常在性能和环境上都与服务器端非常不同,所以