C# 层ASP.NET MVC项目
我试图理解一个设计良好的项目的概念 我正在使用ASP.NETMVC,我正在尝试创建一个分层(可插拔)项目 我现在拥有的当前项目结构是:C# 层ASP.NET MVC项目,c#,asp.net,asp.net-mvc,design-patterns,domain-driven-design,C#,Asp.net,Asp.net Mvc,Design Patterns,Domain Driven Design,我试图理解一个设计良好的项目的概念 我正在使用ASP.NETMVC,我正在尝试创建一个分层(可插拔)项目 我现在拥有的当前项目结构是: LayeredProject-包含控制器的MVC项目 LayeredProject.EntityFramework-包含用于数据库的所有POCO类。(我使用代码优先的方法) LayeredProject.Model-这应该包含项目中使用的所有业务对象 如果说该项目是一个电子商务网站,我会将其结构如下: 在LayeredProject.EntityFramewo
LayeredProject
-包含控制器的MVC项目LayeredProject.EntityFramework
-包含用于数据库的所有POCO类。(我使用代码优先的方法)LayeredProject.Model
-这应该包含项目中使用的所有业务对象- 在
项目中,我有与数据库表相对应的类。类别、产品、用户。此项目仅用于保存和加载数据库中的数据,这些对象不应用于其他目的。此项目引用了LayeredProject.EntityFramework
projectLayeredProject.Model
- 在
project中,我存储了我使用的所有对象,其中大多数对象都是LayeredProject.Model
POCO的对象和使用的其他一些服务类的副本LayeredProject.EntityFramework
- 在
中,我保留了所有ViewModels类、控制器和不同的UI逻辑。此项目引用了LayeredProject
projectLayeredProject.Model
EntityFramework
项目和Model
项目中复制我的POCO类
请帮助我理解这一点您可以使用分层结构以及MVC设计您的项目。控制器和视图部件应保持完好。您可以根据需要将业务逻辑部分划分为任意多个层。模型应根据您期望的层数而定。为此,将您的业务逻辑保留在一个单独的项目中(不是必需的:它可以存在于web项目本身中),将该项目中的DLL引用到MVC web解决方案中。将作为数据库查询结果生成的模型传递到web解决方案,并在controller的帮助下呈现视图。(我使用这种风格完成了我的项目)似乎您使用代码优先的方法来构建数据访问,您可以深入阅读这篇内容广泛的文章并获得更多的见解
您可能有太多的层,没有理由将带有业务逻辑的模型与LayeredProject MVC层本身分离,除非您计划使用客户端应用程序或其他单独的项目来访问模型。在MVC项目中,您已经有了一个模型文件夹,可以用于该文件夹。但是,在MVC项目中,您还应该添加一个“ViewModels”文件夹,以保存专门用于视图关注点的模型(例如DTO对象)
该项目展示了一种简单的方法,可以在MVC项目的文件夹中简单地将内容分开:。虽然它使用的是RavenDB而不是EF,但想法都是一样的。我开发的大多数MVC应用程序都是以这种方式分层的 MVC项目:拥有控制器、视图和模型。业务逻辑驻留在模型中 数据访问层(持久层):此项目使用ORM。(在您的案例中,实体框架)
映射到数据库表的类位于模型中,而不是数据访问层。MVC项目应包含:
- 视图模型:视图的模型,即非常特定于渲染每个视图的模型(这些模型不是MVC中的M)。此模型通常包含必须在视图中显示或编辑的数据,以及呈现视图所需的其他信息:例如,如果视图必须呈现下拉列表,则视图模型应包含相应的SelectList或IEnumerable以填充列表。您可以使用映射器(如AutoMapper或ValueInjector)将数据从业务实体(来自业务层的实体)移动到视图模型,反之亦然。或者,如果合适,您可以直接将业务实体用作模型视图中的属性(视图模型不需要是平面的:它可以包含对象作为属性)
- 视图,使用视图模型强类型
- 控制器:此控制器使用业务逻辑(即模型,MVC中的M)来控制应用程序流,为视图创建和提供模型视图,并对用户操作作出反应
- UI助手:我通常添加此层以满足干燥原则。也就是说,如果我必须准备一个SelectList,并且它将在许多视图中使用,我会在这一层中使用它,并在所有必要的地方使用它。这可能包括计算、排序或任何与UI相关的内容,因此它不适合业务层(模型)。这将使用业务层,并为视图提供特定的数据
- 业务逻辑层:
- PetService,一个可用于读取、写入、查找和修改pets的类(如上所述,无论如何