小编Gil*_*les的帖子

MVC Web项目的架构/使用不同类型的模型

我正在构建一个目前有3个程序集的项目:

  • UI
  • 核心(服务与模型,公用事业)
  • 存储库(Linq2SQL)

依赖性是

  • UI - >核心
  • 核心 - >存储库.

我希望服务和模型在他们自己的程序集中,并最终得到围绕模型构建的东西,即:

  • UI - >模型,服务
  • 服务 - >模型,存储库
  • 存储库 - >模型
  • 楷模

我正在构建的系统基本上是一个网站CMS,所以我将有一个网页模型(PageModel),它有一个子网页集合.PageModel可以调用服务(PageService)中的方法来填充其子页面,但是在新设计中这是不可能发生的,因为Models程序集必然不知道服务程序集.

我已经考虑过洋葱架构中的一些想法(即依赖注入)来解决这个问题,但似乎可以提供更优雅/更明显的解决方案.

我需要引入另一层模型吗?查看模特?我认为我所谓的模型是域模型......我可能错了!服务将是域名服务?

所以我的解决方案是:

  • UI - >服务,ViewModels,模型
  • ViewModels - >服务,模型
  • 服务 - >存储库,模型
  • 存储库 - >模型
  • 楷模

在这个例子中,我想我的PageViewModel将扩展PageModel并使用PageService来获取它的子页面.

任何建议赞赏.还有关于这些模型层通常被称为什么的任何指针?我在这里谈论DTO模型而不是域模型吗?和域模型而不是视图模型?看起来我建议使用View Models并不是View Model的工作.

谢谢

编辑:

我之前没有提到的一点是我的域模型不是单个数据库实体的基本翻译,就像你在大多数教程中看到的那样.域模型可以包含来自多个相关数据库表的数据字段.

那么,是否值得拥有一组纯粹用于封装域中数据的模型 - 没有任何方法/属性可以获取相关对象或将对象保存回数据库等? - 数据传输对象.

从查看几个潦草的图表来看,这意味着在域层中有一组映射器(这似乎是错误的......)将DTO模型转换为域模型并返回.该项目将围绕DTO模型而不是域模型构建,但考虑到DTO封装的内容,我不认为这是一个问题.

对于任何感兴趣的人,建议的依赖结构如下:

  • UI - >服务,域模型
  • 服务 - >存储库,域模型,DTO模型
  • 域模型 - >存储库,DTO模型
  • 映射器 - >域模型,DTO模型
  • 存储库 - > DTO模型
  • DTO模型(无依赖关系)

这有点乱!而这一切只是因为我希望我的PageModel能够获取自己的子PageModels ..看起来像依赖注入可能不是一个糟糕的计划.

感谢那些回答过的人.你给了我很多想法.

c# asp.net-mvc asp.net-mvc-3

6
推荐指数
1
解决办法
1032
查看次数

标签 统计

asp.net-mvc ×1

asp.net-mvc-3 ×1

c# ×1