最近、GOOSの本で、一般的なタイプ(コレクションなど)を独自のクラスにパッケージ化するという興味深いアイデアを見つけました。
.Net構造の言語ではなく、作業中の問題の言語を使用するようにしてください。ドメインとコード間の概念的なギャップを減らします。また、ジェネリックスを使用した型の受け渡しを制限するようにしてください。これは複製の一形態です。タイプするために抽出されるべきドメインの概念があることはヒントです。
率直に言って、私は一般的な汎用コレクションをパッケージ化するのにそれほど極端ではありませんが、型に独自の名前を付けることでさえ、読みやすく理解しやすいように一致させます。
public class UserNameDictionary : Dictionary<int, string>
{
}
とてもシンプルです。そして今、何を読むのが良いですか:
Dictionary<int, string> users = new Dictionary<int, string>();
UserNameDictionary users = new UserNameDictionary();
また、クラスにコメントをすばやく追加できます。
/// <summary>
/// Represents a dictionary of user names accessed by ids.
/// </summary>
これはAdd(int、string)のようなメソッドにコメントを追加しませんが、他の人がこのクラスを使用するとき、彼らはUserNameDictionary
抽象的なDictionary<int, string>
コンテキストではなく、コンテキストで考えます。
クラスをより便利にしたい場合は、基本クラスのメソッドを非表示にすることができます。
public new void Add(int userId, string userName)
{
base.Add(userId, userName);
}
より複雑なユースケースでは、作業を内部辞書に委任するカスタムクラスを使用します。