现在我将称它们为州而不是 Pojos!您有一个开始位置,您可以通过不同的状态迭代和转换模型。最后,您有一个最终的终端状态,您希望将其保存到数据库中
stream(A).map(P1).map(P2).map(P3)....-> set of B
如果您使用称为事件溯源的技术,您可以推断它是的。这会是什么样子呢?而不是直接将 A 映射到状态 P1 并将状态 P1 映射到状态 P2 您将排队所有必要且足以将 A 映射到 P1 和 P1 到 P2 的操作等等......如果您想恢复 P1 或 P2 在任何时间,它将只是排队操作的产物。只要您尚未更改数据库状态,您就可以随时快退或快退。P1,P2,P3 可以充当快照。
这样,您将能够重建此属性的确切映射流。你将把你的操作排队的粒度有多细,如果它和属性级别一样细,或者更细粒度,这取决于你。
这是一篇描述事件溯源及其工作原理的好文章:https ://kickstarter.engineering/event-sourcing-made-simple-4a2625113224
更新:
我可以想出另一种技术来捕捉属性变化。您可以对您的 Pojo-s 进行测试,它与 Hibernate 用于增强 Pojos 的技术几乎相同,并且与用于跟踪的技术配置文件相同。然后,您可以捕获并响应 Pojo1、Pojo2、Pojo3 上的每个 setter 调用。不知道我是否会那样做......
如果https://www.cs.helsinki.fi/u/pohjalai/k05/okk/seminar/Aarniala-instrumenting.pdf,这里有一些关于字节码检测的详细阅读