gpt4 book ai didi

c# - 实体中的服务行为——如何避免服务注入(inject)实体?

转载 作者:太空狗 更新时间:2023-10-30 01:11:12 24 4
gpt4 key购买 nike

我有一个实体结构如下:

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 的实体,并且知道删除将在所有级别执行适当的操作。

这就是问题所在:基金类需要使用它们一无所知的 IInvestable 接口(interface)来查找它们是否在完全独立的上下文中使用。这需要一项服务 - IInvestmentCalculationService

显然,我不想将 InvestmentCalculationService 注入(inject)到基金类实体构造函数中,我也不想将它注入(inject)到 delete 方法中,因为这在 Funds 和 Managers 以及许多其他类没有任何意义 - 也意味着一旦我们有更多要求,我们必须更改所有内容的删除方法。

我对这里的领域事件模型有点感兴趣:http://www.udidahan.com/2009/06/14/domain-events-salvation/但我不确定它是否正确,因为我正在尝试从触发的事件处理程序中取回数据 - 这会起作用但闻起来有点不对劲,而且所有的例子都只显示了 fire and forget 的情况。

有人有什么建议吗?

最佳答案

感谢大家的帮助,我吸引的观众给我留下了深刻的印象!我特别喜欢麦金太尔的哲学,从那以后它真正影响了我的思想。在这种情况下,尽管我们进行了双重 dispatch 。感觉更稳定一些。

干杯

关于c# - 实体中的服务行为——如何避免服务注入(inject)实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3148853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com