Gil*_*les 6 c# asp.net-mvc asp.net-mvc-3
我正在构建一个目前有3个程序集的项目:
依赖性是
我希望服务和模型在他们自己的程序集中,并最终得到围绕模型构建的东西,即:
我正在构建的系统基本上是一个网站CMS,所以我将有一个网页模型(PageModel),它有一个子网页集合.PageModel可以调用服务(PageService)中的方法来填充其子页面,但是在新设计中这是不可能发生的,因为Models程序集必然不知道服务程序集.
我已经考虑过洋葱架构中的一些想法(即依赖注入)来解决这个问题,但似乎可以提供更优雅/更明显的解决方案.
我需要引入另一层模型吗?查看模特?我认为我所谓的模型是域模型......我可能错了!服务将是域名服务?
所以我的解决方案是:
在这个例子中,我想我的PageViewModel将扩展PageModel并使用PageService来获取它的子页面.
任何建议赞赏.还有关于这些模型层通常被称为什么的任何指针?我在这里谈论DTO模型而不是域模型吗?和域模型而不是视图模型?看起来我建议使用View Models并不是View Model的工作.
谢谢
编辑:
我之前没有提到的一点是我的域模型不是单个数据库实体的基本翻译,就像你在大多数教程中看到的那样.域模型可以包含来自多个相关数据库表的数据字段.
那么,是否值得拥有一组纯粹用于封装域中数据的模型 - 没有任何方法/属性可以获取相关对象或将对象保存回数据库等? - 数据传输对象.
从查看几个潦草的图表来看,这意味着在域层中有一组映射器(这似乎是错误的......)将DTO模型转换为域模型并返回.该项目将围绕DTO模型而不是域模型构建,但考虑到DTO封装的内容,我不认为这是一个问题.
对于任何感兴趣的人,建议的依赖结构如下:
这有点乱!而这一切只是因为我希望我的PageModel能够获取自己的子PageModels ..看起来像依赖注入可能不是一个糟糕的计划.
感谢那些回答过的人.你给了我很多想法.
您可以使用洋葱架构很好地完成此任务。例如,我将拥有:UI、域、数据访问、服务
UI 服务数据访问域(也包含视图模型)
UI 可以访问任何一个。服务,只有数据访问和域。数据访问 - 仅域。
我的存储库接口位于域项目中,它们在数据访问项目中实现。我还在域项目中保留其他接口(IContext、IUnitOfWork 等),这样我就有一个中心位置,并且不会在项目之间传播太多接口。
如果您认为合适,DTO 将仅用于层之间的传输。对我来说,你没有理由不能从数据层向上传递域模型,有些人选择在这里只使用 DTO。我将在 UI 层(前 MVC 控制器)中将映射映射到 ViewModel,因为我可以利用 AoP 为我完成此操作([AutoMap()] 属性)
请记住,您的模型根本不应该包含任何持久性逻辑。
| 归档时间: |
|
| 查看次数: |
1032 次 |
| 最近记录: |