C# MVC web项目的体系结构/不同类型模型的使用
我正在构建一个目前有3个程序集的项目:C# MVC web项目的体系结构/不同类型模型的使用,c#,asp.net-mvc,asp.net-mvc-3,C#,Asp.net Mvc,Asp.net Mvc 3,我正在构建一个目前有3个程序集的项目: 用户界面 核心(服务和模型、公用设施) 存储库(Linq2SQL) 依赖关系是 用户界面->核心 核心->存储库 我希望服务和模型在它们自己的组件中,并最终得到围绕模型构建的东西,即: 用户界面->模型、服务 服务->模型、存储库 存储库->模型 模型 我正在构建的系统基本上是一个网站CMS,因此我将有一个网页模型(PageModel),其中包含一组子网页。PageModel可以调用服务(PageService)中的方法来填充其子页面,但在新设
- 用户界面
- 核心(服务和模型、公用设施)
- 存储库(Linq2SQL)
- 用户界面->核心
- 核心->存储库
- 用户界面->模型、服务
- 服务->模型、存储库
- 存储库->模型
- 模型
- UI->服务、视图模型、模型
- 查看模型->服务、模型
- 服务->存储库、模型
- 存储库->模型
- 模型
- UI->服务,域模型
- 服务->存储库、域模型、DTO模型
- 域模型->存储库,DTO模型
- 映射器->域模型,DTO模型
- 存储库->DTO模型
- DTO模型(无依赖项)
感谢那些回复的人。您给了我很多思考的空间。使用洋葱架构,您可以很好地完成这一任务。 例如,我将有: 用户界面、域、数据访问、服务 用户界面 服务 数据存取 域(也包含视图模型) 用户界面可以访问任何一个。 服务,仅数据访问和域。 数据访问-仅限域 我的存储库接口位于域项目中,它们在数据访问项目中实现。 我还在域项目中保留其他接口(IContext、IUnitOfWork等),因此我有一个中心位置,并且不会在项目之间传播太多接口 如果您认为合适,DTO将仅用于层间传输。对我来说,没有理由不能从数据层向上传递域模型,有些人选择在这里只使用DTO。我将在UI层(ex MVC controller)中映射到ViewModel,因为我可以使用AoP为我完成映射([AutoMap()]属性)
请记住,您的模型不应该包含任何持久性逻辑。我认为,与屏幕上显示的数据不同,存储数据是任何“现实世界”应用程序的典型特征。我认为你是在正确的轨道上,有两个独立的“模型”。我通常会打电话给他们:
-映射到屏幕上显示的内容以及视图所需的内容ViewModels
-映射到数据库,持久层(ORM)需要什么DataModels
数据模型
被称为实体
,尤其是在将实体框架作为数据访问层或数据传输对象
(DTO)时
通常也有一些“转换器”从视图映射到数据模型,或者有时可以使用AutoMapper
当然,如果您所显示的内容与数据结构足够接近,那么将所有持久性/数据模型传递给视图并没有坏处,但我也喜欢将它们分开
我已经考虑过洋葱架构中的一些想法(即依赖注入)来解决这个问题,但似乎有一个更优雅/明显的解决方案
一旦您掌握了正确使用依赖项注入的诀窍,它确实是一个非常优雅/显而易见的解决方案
我建议采用如下依赖结构:
- 用户界面
- 控制器->服务、模型、视图模型
- 视图->视图模型
- ViewModels(无依赖项)
- 服务->存储库、模型
- 寄存