リファクタリング:コレクションのカプセル化

メソッドがコレクションを返す場合、
読み取り専用のビューを返して、追加と削除のメソッドを提供します。

getメソッドはコレクションオブジェクトそのものを返すべきではありません。
なぜなら、コレクションを所有するクラス側が、何が行われているかを知らないうちに、
クライアントがそのコレクションの内容を操作することを可能にするからです。

さらに、コレクションに対するsetメソッドは提供すべきではありません。
その代わり、要素を追加したり削除する操作が必要です。
こうすることで、所有オブジェクトがコレクションからの追加や削除をコントロールできるようになります。
リファクタリング前
encapsulate_collection_2.png
リファクタリング後
encapsulate_collection_1.png

private List<Character> _characters = new List<Character>();

public List<Character> Characters
{
get { return _characters; }
set { _characters = value; }
}

private List<Character> _characters = new List<Character>();

public ReadOnlyCollection<Character> Characters
{
get { return _characters.AsReadOnly(); }
}

public void AddCharacter(Character character)
{
_characters.Add(character);
}

public void RemoveCharacter(Character character)
{
_characters.Remove(character);
}
リファクタリング―プログラムの体質改善テクニック (Object Technology Series)

Comment

Comment Form
公開設定

Trackback


→ この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。