1

それで、私が一般的なオブジェクト、Personを持っているとしましょう。人には名前と性別があります。名前は文字列である必要があり、性別はまたはである必要がありmaleますfemale。また、Personオブジェクトの配列を持ち、セットに対する操作を許可するコレクションオブジェクトPersonListもあります(たとえば、特定の性別の人々のリストを返します)。

一方では、コンストラクター内のデータを使用してPersonListを作成すると便利です...

list = new PersonList([new Person('Alice', 'Female'), ...]);

...しかし、データが有効かどうかはわかりません。無効なPersonオブジェクトを許可し、それらにアクセスするときにそれらの有効性を確認するか、Personにvaild()メソッドを与えて...と言うことができます。

list = new PersonList();
alice = new Person('Alice', 'Female');
if (alice->valid()) list->add(alice);

...またはadd()内のvalid()をチェックするかもしれません。しかし、valid()メソッドがあるのは奇妙に思えます。

一般的に、これらのオブジェクトをどのようにインスタンス化しますか?これは主観的なものですか、それとも普遍的な「正しい方法」がありますか?

4

2 に答える 2

1

無効なオブジェクトを作成しないと確信している場合は、有効性をチェックするメソッドは実際には必要ありません。ただし、ユーザーデータに基づいて無効になる可能性のあるオブジェクトを作成する場合は、有効性チェックメソッドを用意する必要があります。そのメソッドを呼び出すことは、コンストラクターが最後に行うことです。そのオブジェクトへの変換が発生してオブジェクトが無効になる可能性がある場合は、上記の変換が発生した直後に、上記のメソッドも呼び出す必要があります。無効なオブジェクトは即座にキャッチされる必要があり、クラスのエンドユーザーは、時折例外がスローされることを除いて、それについて心配する必要はありません。

于 2012-05-14T16:53:42.820 に答える
0
  1. のようなクラスPersonListはジェネリックではありません。に結合されPersonます。
  2. ハードコードされたデータが有効でない可能性があると考える理由は不明です。
  3. ある意味で無効なオブジェクトを作成できる場合は、その意味でその有効性をテストするメソッドを常に用意する必要があります。
于 2012-05-14T16:48:43.637 に答える