我正在考虑一个对象结构,它应该进行复杂的计算。根据用户GUI上的条目完成计算。
公式如下:
A = B+C;
B = D*E;
C = C; (simply value insert by the user)
D = C/E;
E = C*C;
用户可以输入所有值的值(实际项目中的A到E /,大约有210个变量)。如果无法开发数学公式来计算其他值,则可以通过迭代值来完成,直到找到“工作设置”。
我现在正在考虑以下结构: 每个变量都是数据类的对象。每个数据类都可以在其他数据类上注册侦听器以获取值更改事件。如果数据类得到值更改事件,它会重新计算自身并通知所有侦听器它自己的数据变化。
问题现在如下: 如果此链中的最后一次计算得到结果,则输入的值不可能(例如,“除以零”),它会将其值设置为最接近的可能值(在本例中为1)。然后,链中的所有计算必须以相反的顺序再次完成。
你眼中是否有比这个基于听众的结构更好的结构,每个人都会重新计算,如果他在观察到的变量上检测到变化事件(有210个变量,我即将松开概述谁来计算什么,何时为什么;中央计算结构对我来说似乎更易于维护,但我无法想象中央计算单元的良好结构。
欢迎任何意见和建议! 干杯, 琼
答案 0 :(得分:3)
经过大量时间在谷歌上花费后,我在google代码中发现了一个有趣的反应性Java项目:reactive4java
我还没有尝试过这个项目,但与我找到的其他项目(Frappé,Junior和SugarCubes)不同,它似乎仍处于活跃状态并正在开发中。其他提及的项目要么不再可用,要么在几年前进行了最后一次更改。
更新: 在使用reactive4java之后,我得出结论,这个项目不能用于oop-context,来做你的计算。我(到目前为止)不可能将项目中的任何对象或值绑定到Reactive-kernel,反之亦然。如果我发现更多相关内容,我会再次在此发布。
更新2:在与项目的维护者交谈之后,我被指出如何将数据对象绑定到reactive4java框架,因此框架在数据对象发生变化时进行计算。在玩完框架之后,我会发布一个详细的工作示例。
答案 1 :(得分:2)
您正在实施的内容称为reactive programming。文章还提到直接使用观察者模式可能会导致性能问题。
有几个库实现了对这种编程模型的支持,你可以查看其中的一些并找出它们正在做什么。据我所知,他们中的许多人使用依赖关系的图表视图,只有在新值达到所有可达输入时才重新计算表达式的值。
答案 2 :(得分:1)
我几年前见过反应式编程 - 但我认为通过这种编码你不会对你的项目有更好的了解。它只是让你摆脱了对观察者和事件的处理。