查询中业务逻辑的重复

时间:2017-04-06 11:50:19

标签: asp.net-mvc entity-framework web-applications domain-driven-design

在我正在进行的项目中,我有DebtCollectionCase对象,其中包含Invoices, Payments, CreditNotes等等...我遇到的问题是查询数量一直在增加,并且会继续上升,我在这些查询中重复了一些计算。例如,计算得到UnpaidAmountInterest。它已经很乱了,随着时间的推移它会变得更糟。

解决方案是将这些计算放在域对象中,在函数中,然后可以在每个地方重用,但为了完成这个,我需要在内存中获取整个聚合,这意味着DebtCollectionCase, Invoices, Payments, CreditNotes应该获取然后只需调用函数进行计算。对于单个记录应该没问题,但是当我需要这些记录的列表时,他们的发票和付款就会出现DebtCollection案例。这将是一个大量的数据提取,它可能会影响性能。

所以这是一个在内存计算方面做的问题,这对于可重用性和维护更好,并且在查询中放置了商务逻辑,这意味着更好的性能,但更难以维护和违反DRY。有没有人有任何建议我应该使用哪种方法?

1 个答案:

答案 0 :(得分:1)

我找到了一个解决方案,称为DelegateDecompiler。它允许你在linq Select和Where语句中使用实体未映射的属性和函数,这意味着它们是可重用的,并且被转换为SQL,所以我不需要在内存中获取实体。如果有人需要Link to DelegateDecompiler,则链接如下。