2012-02-02 14 views
0

私はofficeIdインスタンスを持つOfficeビジネスオブジェクトを持っています。カプセル化のための設計

ビジネスの観点から見ると、オフィスIDは500種類の異なる値を持つことができます。

officeId = 1それはLA に位置している意味officeId = 2は、オフィスがLAやSFO

のためであれば、私はそのような方法を持つことができ、SFOに位置しているので、

に私が確認したいことasOfficeInLosAngeles、isOfficeInSfoなどと同様に

これは、Officeでデータと動作をカプセル化する方法としてわかります。

しかし、私の懸念は、オフィスを見つけるために500種類の方法を追加しなければならないことです。

これらを抽出する方法はありますか?設計を簡素化し、カプセル化を維持する方法はありますか?

答えて

1

各都市ごとに1つ、500個の値を持つ列挙型を設計します。次に、enum値の1つとして都市を返すgetCityメソッドを提供します。次に、あなたの(Java言語)チェックが

City c = office.getCity(); 
if (c == City.LA) { 
    // Do something 
} else if (c == City.SFO) { 
    // Do something 
} 
0

カプセル化が正しいとなった...それをあなたのコード内で「1はLAを意味し、2はSFOを意味します...」という「知識」である必要があり、このように、考えますカプセル化された?あなたのオフィスオブジェクトがIDの意味を知る必要がある唯一のオブジェクトであれば、Stringなどの便利な表現を返すメソッドgetOfficeLocationを公開して、Officeオブジェクトの呼び出し元が使用でき、そのインターフェイスが変更されないことを知ることができますたとえ新しい場所をOfficeオブジェクトの新しいバージョンに追加したとしても。

関連する問題