我正在为类似银行的机构制作BI系统。该系统应管理信用合同,发票,付款,处罚和利息。
现在,我需要制作一个构建发票的方法。我必须计算客户现在需要付多少钱。他有债务,他必须付钱。他还必须支付利息。如果他迟到了应付款,他就会在他迟到的每一天都受到处罚。
我认为有两种方法可以做到这一点:
第一个变体的好处:
第一个变种的缺陷:
第二种变体的好处:
第二种变体的缺陷:
还有其他方法吗?我可以将这两者的好处结合起来吗?您遇到的其他类似系统中使用了哪一个?请分享任何经验。
答案 0 :(得分:3)
这种性质的问题总是比它们最初出现时更复杂。这个 是我喜欢称之为Rumsfeldian problem of the unknown unknown的结果。 基本上,无论你现在做什么,都要准备好对未来的任意规则进行调整。
这是一个艰难的主张。一些可能对其产生重大影响的未来可能性 您的计算模型是经过日期支付,调整和收费。 原谅的利息期也可能成为一个问题(特别是如果过时)。要求 根据“已知”的内容提供各种时间点(PIT)计算 PIT(过去的过去观点)或考虑到参考PIT之后发生的交易 在参考之前(当前的过去观点),它们已经过了PIT的日期。这种性质的计算可以 真正的痛苦。
我的建议是从“划痕”计算(即第一个变体)。仅实施优化(例如,第二变体) 必要时满足性能限制。从头开始计算是计算密集型的 模型但通常在适应意外左转时更灵活。
如果绩效是一个问题,但复杂因素的频率(例如,过时的交易) 相对较低,您可以探索采用两种变体中最好的混合模型。在这里存储 当前状态并计算前进 仅使用自上次存储状态以来发布的那些事务来创建新的当前状态。如果你打了一个 “复杂化”重新做了整个帐户 开始重新建立现状。
从长远来看,能够在不触发重写的情况下容纳意外情况可能更为重要 比现在剃须计算时间。在必要之前,不要对计算模型施加限制。保存 目前的州通常会带来一些内置的假设和限制,以减少摆动空间 满足未来的要求。