我有一个 C++ 应用程序,它从数据库加载大量数据,然后对这些数据执行算法(这些算法是 CPU 和数据密集型的,所以我事先加载了所有数据),然后保存所有数据改回数据库。
数据库部分与应用程序的其余部分很好地分开。事实上,应用程序不需要知道数据来自哪里。应用程序甚至可以在文件上启动(在这种情况下,一个单独的文件模块将文件加载到应用程序中,最后将所有数据保存回文件)。
现在:
- 数据库层只想将更改的实例保存回数据库(而不是完整的数据),因此它需要知道应用程序更改了哪些内容。
- 另一方面,应用程序不需要知道数据来自哪里,因此它不想被迫为每个数据实例保持一个更改状态。
为了使我的应用程序及其数据结构与加载和保存数据的层(可以是数据库或文件)尽可能分离,我不想用有关实例自启动以来是否更改的信息污染应用程序数据结构或不。
但是为了使数据库层尽可能高效,它需要一种方法来确定应用程序更改了哪些数据。
复制所有数据并在保存时比较数据不是一种选择,因为数据很容易填满几 GB 的内存。
将观察者添加到应用程序数据结构中也不是一种选择,因为应用程序算法中的性能非常重要(循环遍历所有观察者并调用虚函数可能会导致算法中的重要性能瓶颈)。
还有其他解决方案吗?或者如果我不想以侵入性方式向我的应用程序类添加逻辑,我是否试图过于“模块化”?在这些情况下,务实一点会更好吗?
ORM 工具是如何解决这个问题的?它们是否还强制应用程序类保持某种变化状态,或者它们是否强制这些类具有变化观察器?