ハードウェア設置用の制御システム(水循環システム)を構築しています。ハードウェア記述層と制御層の2つの層で設計しました。
+----------------------------------------------+
| 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);
問題は、これにより、下位層(ハードウェア層)がその上位のインテリジェンス(そのコントローラー)を認識できるようになることです。これは、レイヤー間の一方向の依存関係ルールを破るだけでなく、すべてのハードウェア記述クラスをシリアライズ可能にする必要があるため、上位レイヤーへのすべての参照はオプションである必要があり、一時的であると宣言される必要があるため、コードが複雑になります。
このようにHW記述レイヤーを介してコントロールを使用できるようにするのが良いか悪いか、または別の方法があるかどうかを判断しようとすると、少し行き詰まります。私は、HW記述レイヤーのほとんどすべてをミラーリングして委任することを含む、1つの方法しか考えられません。これは、邪魔になる方法のようです。
ですから、私の質問は、この状況を認識し、ヒントや経験を持っている人がいるかどうかです。名前はありますか?そのための良いパターン/ベストプラクティスはありますか?また、この状況を回避して回避した他の有名なライブラリ/フレームワークはありますか?
ありがとうございました。