コードの設計方法についてアドバイスが必要です。
私のシステムにはHW
、プロセスが使用するための多くのデータからなる (ハードウェア) がいくつかあります。HW
順番にChannel
、多くのデータを持ついくつかがあります。
さらに、それぞれPlant
(PlantHW
およびPlantChannel
) に固有のデータがいくつかあります。これらはそれほど多くのデータではなく、 や ほど頻繁には使用されませHW
んChannel
。プロセスで何Plant
を使用するかは、プロセスを開始する前にユーザーが選択し、実行中に変更されることはありません。ただし、ユーザーはプロセスをキャンセルして、別のPlant
.
私の質問は、良い方法でバインドするHW
方法です (方向は関係ありません)。疎結合で、パフォーマンスもOKで、わかりやすいものにしたいです。PlantHW
Channel
PlantChannel
HW
また、 orをすべて反復するのが最善かどうかもわかりませんPlantHW
。2 つの選択肢の長所と短所:
繰り返すPlantHW
- 長所: プロセスは特定の目的のためのものであるため、最も論理的です。
Plant
- 短所:
HW
興味深いデータがすべて含まれており、常にPlantHW
.
繰り返すHW
- 長所:
HW
すべての興味深いデータが含まれています - 短所:論理的ではない
- 短所: プロセスは
Plant
、対応するPlantHW
/を取得するために選択されたものを知る必要がありPlantChannel
ます。
これを設計する方法についてアドバイスが欲しい。
編集
6 つのクラスには、プロセスで使用される設定とプロセス データが含まれています。それらはファイルから(バイナリシリアル化によって)読み取られ、プログラムが開始されます。
System
- 共通システム設定Plant
- プロセスは複数のプラントに対して実行できます。このクラスには、各プラントに固有のデータが含まれています。HW
- ハードウェア機器の設定とプロセス データが含まれます。PlantHW
- 特定のプラントのハードウェア機器の設定とプロセス データが含まれています。Channel
- ハードウェア機器のチャネルの設定とプロセス データが含まれます。PlantChannel
- 特定のプラントのハードウェア機器のチャネルの設定とプロセス データが含まれます。
たとえば、これを実行できるようにしたい ( iterate の代替を選択した場合HW
):
void DoOperationsOnAChannel(HW hw, Plant selectedPlant)
{
// plantHw data is not often used
// var plantHw = GetPlantHW(hw, selectedPlant);
foreach(var channel in hw.Channels)
//Do operations based on hw, plantHw and channel
}
または( iterate の代替を選択した場合PlantHW
)
void DoOperationsOnAChannel(PlantHW plantHw)
{
var hw = GetHW(plantHw);
foreach(var channel in plantHw.Channels)
//Do operations based on hw, plantHw and channel
}