1

API 設計では、次のようなことを行うのが一般的ですか。

public ReadOnlyCollection GetCollection
{
get { // Get's read only collection here... 
}
}

get の本体で、これはコレクションを埋めるプライベート メソッドを呼び出します。そのため、一貫性のあるオブジェクトを 1 つだけクライアントに公開します。私を混乱させるのは、クラスとそのメンバーを静的にすることが正しいかどうかです。結局のところ、オブジェクトを返すので、クラスも不変です (不変クラスは静的であるべきだと私は考え続けています)。static がステートレスをほのめかしていないことは承知しています。静的は、1 つのエンティティとして集中化されるもの (会社の詳細など) に適していると考えるのは正しいですか?

ありがとう

4

3 に答える 3

1

回避static- これは手続き型プログラミングの特徴です。ユーティリティ メソッドと広くアクセス可能な定数にのみ使用してください。

いいえ - static != 不変であり、共通点はありません。Static はグローバルな状態であり、スレッドセーフではないものであり、アプリケーション内で静的データを複数回使用することはできません。

不変とは、オブジェクト インスタンスがその内部状態を変更できないことを意味します。Stringたとえば、一度構築すると、変更することはできません。ただし、静的性とは何の関係もありません。

最初の質問については、ゲッターが内部コレクション、特にその読み取り専用コピーを公開することはまったく問題ありません。

于 2010-09-29T18:39:44.687 に答える
0

モデルの要件によっては、「スマートな」セッターとゲッターを使用しても問題ありません。ここで説明した「静的クラス」の使用は正しいとは思いません。計算されたリストを返す場合は、それを変更不可能なコレクションにすることをお勧めします。これは、ドメイン オブジェクトを変更する唯一の方法がセッターを介して行われるようにするのに役立ちます (ただし、これですべてではありません)。

于 2010-09-29T18:41:37.790 に答える
0

getter メソッドの目的は、値がどこから来るかについて完全にブラックボックスの方法で、単純に値を返すことです。ゲッターメソッドに追加のコードを入れることは非常に一般的です。あなたが話している特定の例は、「遅延初期化」と呼ばれる手法のように聞こえます。これは、オブジェクト指向の原則にまったく違反していません。

静的または非静的の選択は、ステートフルさや可変性に関するものではありません。どちらかといえば、クラスがシングルトンを表す必要があるかどうかを尋ねたいと思います。「会社の詳細」を定数のバンドルとして保持している場合は、静的が適切です。クラスが基本的に DAO であり、要求ごとに会社の詳細への最新の変更を再フェッチする場合は、非静的クラスが必要になる場合があります。あなたの例は前者に傾いているようです。

于 2010-09-29T19:05:19.953 に答える