在我正在进行的项目中,我有DebtCollectionCase
对象,其中包含Invoices, Payments, CreditNotes
等等...我遇到的问题是查询数量一直在增加,并且会继续上升,我在这些查询中重复了一些计算。例如,计算得到UnpaidAmount
或Interest
。它已经很乱了,随着时间的推移它会变得更糟。
解决方案是将这些计算放在域对象中,在函数中,然后可以在每个地方重用,但为了完成这个,我需要在内存中获取整个聚合,这意味着DebtCollectionCase, Invoices, Payments, CreditNotes
应该获取然后只需调用函数进行计算。对于单个记录应该没问题,但是当我需要这些记录的列表时,他们的发票和付款就会出现DebtCollection案例。这将是一个大量的数据提取,它可能会影响性能。
所以这是一个在内存计算方面做的问题,这对于可重用性和维护更好,并且在查询中放置了商务逻辑,这意味着更好的性能,但更难以维护和违反DRY。有没有人有任何建议我应该使用哪种方法?
答案 0 :(得分:1)
我找到了一个解决方案,称为DelegateDecompiler
。它允许你在linq Select和Where语句中使用实体未映射的属性和函数,这意味着它们是可重用的,并且被转换为SQL,所以我不需要在内存中获取实体。如果有人需要Link to DelegateDecompiler,则链接如下。