我建立,目前有3个组件项目的使用:架构MVC Web项目/不同类型的模型
- UI
- 核心(服务&模型,实用程序)
- 库( LINQ2SQL)
依赖是
- 用户界面 - >核心
- 核心 - >存储库。
我想业务和模式是在自己的组件,并与同时围绕模型建立的东西最终,即:
- UI - >模型,服务
- 服务 - >模型,库
- 库 - >模型
- 模型
钍我正在构建的e系统基本上是一个网站CMS,因此我将为网页(PageModel)建立一个模型,该网页包含子网页集合。 PageModel可以调用服务(PageService)中的方法来填充其子页面,但是在新设计中不可能发生,因为Models集合对服务程序集一定一无所知。
我已经考虑过在洋葱体系结构(即依赖注入)中的一些想法来解决这个问题,但似乎可以使用更优雅/明显的解决方案。
我是否需要引入另一层模型?查看模型?我认为我所说的模型是领域模型......我可能错了!服务将是域服务?
所以我的解决办法是:
- UI - >服务,的ViewModels,模型
- 的ViewModels - >服务,模型
- 服务 - >存储库,模型
- 库 - >模型
- 模型
在这个例子中,我想像m y PageViewModel将扩展PageModel并使用PageService来获取它的子页面。
任何建议赞赏。还有关于这些模型通常被称为什么的指针?我在这里谈论的是DTO模型而不是域模型?和领域模型而不是视图模型?看起来我提议使用视图模型并不是视图模型的工作。
感谢
编辑:
这是我从来没有最初提到的是,我的领域模型是不是单一的数据库实体的基本翻译就像你会在大多数教程看到的。域模型可以包含来自多个相关数据库表的数据字段。
所以值得拥有一组模型纯粹是为了封装域中的数据 - 没有任何方法/属性来获取相关对象或将对象保存回数据库等? - 数据传输对象。
从看一对潦草的图表,这将意味着在域图层中有一组映射器(这似乎是错误的)将DTO模型翻译为域模型并返回。该项目将围绕DTO模型而不是域模型构建,但给出了DTO封装的内容,我不认为这是一个问题。
任何人谁是有兴趣的,所提出的依赖结构会像这样:
- UI - >服务,领域模型
- 服务 - >存储库,领域模型中,DTO模式
- 领域模型 - >库,DTO模型
- 映射器 - >域模型,模型DTO
- 库 - > DTO模型
- DT O型号(无相关性)
这有点混乱!所有这一切都只是因为我希望我的PageModel能够获取自己的子页面模型。它看起来像是在依赖注入方面可能不是一个坏计划。
感谢那些已经回复的人。你给了我很多想法。
谢谢亚当。将存储库接口放在域中似乎是一种以域为中心的一切方式的好方法。 在持久性点上,我的域模型为Save()提供了便捷的方法,它只是在相关存储库中调用Save()方法。你会认为这是持久性逻辑,因此不好的做法? – Giles 2012-02-28 22:44:25
雅,他们应该对此一无所知。将实体传递到您的存储库,并让它成为处理所有事情的单一位置。这可以很好地适应工作单元模式,因为存储库可以被重构为现在实际上将其保存到集合中,并且工作单元实现将该集合保存到一个事务中的数据库中。您的服务不是调用模型上的Save(),而是知道调用存储库实现,该实现应该注入到控制器或存储库中。这非常适合测试/嘲笑/等。 – 2012-02-28 22:59:57