いくつかの素晴らしい情報が提供されていますが、あなたが混乱しているかもしれないとあなたが言ったことの1つはこれです:
「パブリックリストのメモ=新しいList()がある場合、インシデント内のユーザーはADD、REMOVEなどのメソッドを使用できるようになります。」
それはすべて、クラスをどのように設計するかによって異なります。考慮すべきことの1つは、このデータが相互に関連する方法です。それはあなたがあなたのクラスのデザインを描くのを助けるでしょう。
次のように聞こえます。
- 1つのインシデントに多くの人が関与する可能性があります
- 1人でたくさんのメモを作成できます
- メモは最低レベルであり、作成されたインシデントとそのインシデントに取り組んでいる責任者のために存在します。
インシデント1-多くの人
人1-多くのメモ
このタイプの関係は、さまざまな方法で実行できます。1つの方法は、関係するオブジェクトを実際に分離してから、結合されたオブジェクトを作成することです。
例えば
public class Incident {
//insert incident fields here
//do not add person logic / notes logic
//probably contains only properties
}
public class Person {
//insert person fields
//private members with public properties
//do not embed any other logic
}
public class Comment {
//insert comment private fields
//add public properties
//follow the law of demeter
}
これらのクラスは相互に詳細を提供するのではなく、この情報を格納するための単なるリポジトリです。次に、これらのクラスを相互に関連付けます。
public class IncidentPersonnel {
List<Person> p;
//add methods to add a person to an incident
//add methods to remove a person from an incident
....
}
次に、担当者によるコメントを処理する別のクラスがある場合があります
public class PersonnelNotes {
List<Note> n;
//other methods...
}
あなたはこれをさらに進めることができますが、それは物事を複雑にするかもしれませんが、私はあなたにこれをどのように扱うかについての別の考えを与えています。
関数のデメテルの法則に従うようにしてください
すべてのオブジェクトをカプセル化します。さらに、隣人はあなたと話すことができますが、他のことはあまりできません...これにより、クラスの結合が緩くなり、思考プロセスが少し簡単になります。
最後に、CRUD操作がどのように機能するかについて説明しました。これはすべて、 DAL(データアクセス層)に戻ります。次に、テーブルからデータの行を返すのではなく、すべての属性を含む参照オブジェクトを返すことができます。追加と削除は同じように機能します(オブジェクトの受け渡し)。ORMを使用するか、独自のDALを作成できます。それはすべて、あなたが自分自身をどの程度関与させたいかによって異なります:)。