2

コードの設計方法についてアドバイスが必要です。

ここに画像の説明を入力

私のシステムにはHW、プロセスが使用するための多くのデータからなる (ハードウェア) がいくつかあります。HW順番にChannel、多くのデータを持ついくつかがあります。

さらに、それぞれPlant(PlantHWおよびPlantChannel) に固有のデータがいくつかあります。これらはそれほど多くのデータではなく、 や ほど頻繁には使用されませHWChannel。プロセスで何Plantを使用するかは、プロセスを開始する前にユーザーが選択し、実行中に変更されることはありません。ただし、ユーザーはプロセスをキャンセルして、別のPlant.

私の質問は、良い方法でバインドするHW方法です (方向は関係ありません)。疎結合で、パフォーマンスもOKで、わかりやすいものにしたいです。PlantHWChannelPlantChannel

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
}
4

1 に答える 1

0

あなたの質問について明確な考えを得ることができませんでしたが、私の理解によれば、ハードウェアとチャネルにそれぞれ関連付けられたプラントとプラント チャネルが必要です。私の見解では、プラント インターフェイスが必要であり、ハードウェア クラスは、インターフェイスを介して注入されたプラントのインスタンスを取得する必要があります。これにより、実行時であっても実装を柔軟に変更できます。チャネル クラスにも同じことが当てはまります。

于 2013-06-23T17:22:29.987 に答える