【发布时间】:2011-03-10 02:19:18
【问题描述】:
我的实体结构如下:
IManager: IDeletable
{
IEnumerable<IFund> Funds {get;}
IFailureNotification Delete();
}
IFund : IDeletable
{
IEnumerable<IFundClass> FundClasses
IFailureNotification Delete();
}
IFundClass: IDeletable, IInvestable
{
IFailureNotification Delete();
}
我有一个服务,它接受 IDeletable 并在其上调用 Delete。然后根据返回值提交事务或回滚事务。我正在使用 NHibernate 来持久化类,因此无法将 RI 放入数据库并捕获异常(无论如何我都不喜欢)。
这是多态性的经典案例,Manager 循环遍历其 Funds 并在删除自身之前将其删除,Fund 在删除自身之前依次删除 FundClasses,因此服务可以采取任何实现IDeletable 并知道删除将在所有级别执行适当操作的实体。
问题出在:fund 类需要使用他们一无所知的IInvestable 接口来查找它们是否在完全独立的上下文中使用。这需要一个服务 - IInvestmentCalculationService。
显然,我不想将InvestmentCalculationService 注入基金类实体构造函数,也不想将其注入删除方法,因为这是在 Funds 和 Managers 以及许多其他类上,所以不没有任何意义 - 也意味着一旦我们有更多要求,我们就必须更改所有内容的删除方法。
我对这里的域事件模型有点动心:http://www.udidahan.com/2009/06/14/domain-events-salvation/ 但我不确定它是否正确,因为我正试图从触发的事件处理程序中取回数据 - 这会起作用,但有点味道有点不对,所有的例子都只显示了火和忘记的情况。
有人有什么建议吗?
【问题讨论】:
标签: c# nhibernate dependency-injection dns domain-driven-design