'ProductionLine'それぞれが複数'Stages'あり、各ステージが複数ある製薬会社向けのソフトウェアを開発しているとします。'Machines'
ここで、ステージとそのマシンを記録するために 3 つのテーブルを維持しているとします (議論を揺るがすため、ProductionLine は省略します)。
(1) ステージ(生産ラインが取りうるすべてのステージを表す基礎データ)
(2) マシン (生産工場が持つことができるすべての可能なマシンを表す基本データ)
(3) StageMachines (ステージに割り当てられたマシンの数を表します)
ステージには複数のマシンを含めることができ、マシンは複数のステージの一部になることができることに注意してください。しかし、Machine クラスは Stages のリストを持つべきではありません。なぜなら、それはビジネス問題のドメインによると無関係だからです。
次のクラスを設計しました。
public class Stage
{
private int _stageId;
public int StageID
{
get { return _stageId; }
set { _stageId = value; }
}
private string _stageName;
public string StageName
{
get { return _stageName; }
set { _stageName = value; }
}
private List<Machine> myVar;
public List<Machine> Machines
{
get { return myVar; }
set { myVar = value; }
}
public static bool Save(Stage stage)
{
//save code goes here...
}
}
public class Machine
{
private int _machineId;
public int MachineID
{
get { return _machineId; }
set { _machineId = value; }
}
private string _machineName;
public string MachineName
{
get { return _machineName; }
set { _machineName = value; }
}
public Machine()
{
}
public Machine(int id, string name)
{
_machineId = id;
_machineName = name;
}
}
今、私はジレンマに直面しています:
(1) ステージを作成するとき、すべてのマシンからいくつかのマシンを選択してデータを保存する必要があります。私のコードでこれをどのように処理すればよいのでしょうか。次のコードを記述できるはずです。
Stage s = new Stage();
s.Machines.Add(new Machine(1, "Machine#1"));
s.Machines.Add(new Machine(2, "Machine#2"));
s.Machines.Add(new Machine(3, "Machine#3"));
Stage.Save(s);
(2) コード内でこの多対多の関係を維持するにはどうすればよいですか? という名前の 3 番目のクラスを作成する必要があります'StageMachine'か? その場合、Stage オブジェクトを作成するときにマシンをどのように保存すればよいですか?
誰でも私に解決策を教えてもらえますか?
*** 追加の質問は、ステージのマシンを取得するときに、nTier のどこでどのようにマッピングを行うべきかということです。
他のクラスを参照する必要があるクラスの C# での適切な設計パターンは何ですか?
このリンクでは、クラス設計の問題について説明していますが、NTier 設計のステージ オブジェクトのマシンの保存と取得のメカニズムには答えていません。