我正在为硬件安装(水循环系统)构建控制系统。我把它设计成两层:硬件描述层和控制层。
+----------------------------------------------+
| Control (enables manipulation of devices) |
+----------------------------------------------+
| uses (decorates)
v
+---------------------------------------+ (de)serialize +------------+
| HW Description |<--------------->| Files / DB |
| (stores physical layout, cabling etc) | +------------+
+---------------------------------------+
硬件描述层包含硬件图,描述管道如何连接到热交换器和其他设备。该层的数据可根据安装进行配置,并将在运行时读取。因此,硬件描述层中的所有类都应该以一种或另一种方式序列化(通过 Hibernate/序列化到 XML 左右)。
控制层将用智能装饰硬件描述层类,因此热交换器将获得一个与之关联的 HeatExchangerController。
在这个系统中,控制层中的实体可能需要通过硬件描述来寻找他们最近的邻居,所以热交换控制器可能会做类似的事情
HeatExchangerController neighbour = this.getHeatExchanger().getInputPipe().getOtherSide().getHeatExchanger().getController();
neighbour.notify(highLoadAlert);
问题是这使得较低层(硬件层)意识到它上面的智能(它的控制器)。这不仅打破了层之间的单向依赖规则,而且由于所有硬件描述类都应该是可序列化的,这使代码复杂化,因为对更高层的所有引用都需要是可选的,声明为瞬态的等。
现在,我有点难以确定通过这样的硬件描述层提供控件是一个好主意还是坏主意,或者是否有任何替代方法可以采用。我只能想到一种方法,它涉及镜像和委托几乎所有的硬件描述层,这似乎是一种很好的侵入方式。
所以我的问题是你们中是否有人认识到这种情况并有任何提示/经验。它有名字吗?是否有任何好的模式/最佳实践,是否有任何其他知名的库/框架也有并解决了这种情况?
谢谢你。