【发布时间】:2014-10-18 18:47:10
【问题描述】:
我正在使用 ASP.NET MVC 开发基于 Web 的应用程序。我正在尝试拥有丰富的领域模型,而不是瘦/贫血模型。
我按照 Onion 架构对我的解决方案进行了建模。不同的项目如下:
- {}.Domain.Core - 包含域对象和接口,例如在基础设施层实现的 IDbContext
- {}.Database - 是数据库项目
- {].Infrastructure - 包含日志记录、数据访问等的实现。
- {}.Web - 视图和控制器
**** 数据访问是使用 dapper 完成的,IDbContext 是围绕 2 个简单命令、查询接口的包装器。我已将每个查询隔离为单独的类。
为了便于讨论,我只介绍了应用程序的一小部分。
我有一个版本化的文档库,其中包含文档以及标签、权限等其他元数据
我的文档对象的简化模型如下所示
我希望在域对象中定义操作,因为每个操作都涉及业务逻辑。 让我把“删除”作为一个操作。需要执行的操作
- 验证用户是否有删除权限
- 检查是否没有将受到此删除影响的关联
- 检查是否没有正在进行的工作流
- 在事务中从数据库中删除实际项目
如上例所示,我需要数据库上下文来完成此操作。 我目前考虑的方式是建模是否让域对象具有 IDbContext,它可以执行公开的查询。
在我的控制器类中,我调用域对象并执行操作。
我不确定在域对象中传递 IDbContext 是否可以?如果不是,有什么更好的建模方法?
我不相信有一个单独的服务层,因为 1)控制器在大多数情况下充当服务层的第一层 2)服务层只是将相同的方法从域复制到另一个类
让我知道如何改进这个设计。
【问题讨论】:
标签: asp.net-mvc oop architecture onion-architecture