【发布时间】:2011-06-02 14:56:43
【问题描述】:
首先,我使用的是没有任何 ORM 框架的 Web 表单。
我一直在努力使我的域对象尽可能“智能”和“丰富”,而不允许它们访问我的服务和存储库层。我最近的尝试是为在线商店创建礼券模型。
我看到的主要反复出现的问题是:
越来越多的逻辑不断被引入服务层。所有对存储库的调用都必须通过服务层,并且每次验证参数时(例如 - 存在于数据库中等)。结果,我的服务层正在增长,但我的域对象只有一些简单的合同验证。甚至对象验证也在服务层,因为如果项目的 ID 为空,它会检查 db 以确保代码是唯一的。 IHMO,系统的消费者不应该关心他们需要的功能是否处理持久性。
我有一个单独的 POCO 用于兑换礼券时的交易日志条目。我假设我应该将这些交易的列表或集合作为我的礼券模型的属性,但我仍然不确定何时应该填写该属性。我是否在服务上添加了一个单独的方法来按需将交易加载到对象中(例如 - LoadTransactions(gc object)),或者是否应该在请求现有礼券或礼券列表时自动加载交易(或者可能getGC 中的一个选项也可以加载事务)
诸如“可用余额”之类的计算字段呢...我什至应该在我的对象上拥有这样的属性吗?每当我使用该对象时,我都需要不断更新该属性以确保它是最新的。现在我只有一个服务方法 GetBalanceByCode(gc code)。
甚至像兑换礼券这样的操作基本上都是 100% 以数据为中心的(获取一些输入参数,验证它们并将交易日志条目添加到 db)。
【问题讨论】:
标签: c# asp.net architecture domain-driven-design repository-pattern