5

タイプヒントを使用する場合、オブジェクトを必須にすることができます。

public function myMethodThatDoFineStuff(MyObject $myobject) {

}

すべてのオブジェクトではなく、その属性の一部のみを必須にする場合はどうなりますか?特定のドメインをより適切に表す場合、ドメインモデルがより適切であると仮定しましょう。これが、(ドメイン上の)ビジネスモデルでより理にかなっている場合はどうでしょうか。どうすればいいですか?

何があっても常にALLオブジェクトを配置する必要がありますか?


明確化のための例は以下を提案します:

特定の著者の本を一覧表示するために、次の方法があると想像してみてください。

public function listBookOfAuthor(Author $author) {

}

ここで、authorオブジェクトに200ほどのプロパティがあると想像してみましょう。ただし、本のリストを処理するには、名前と名前だけ必要です。

とにかくALL$authorオブジェクトを受け取る必要がありますか?

4

3 に答える 3

2

すべてのオブジェクトではなく、その属性の一部のみを必須にする場合はどうなりますか?

技術的には、関数が期待するいくつかの属性のみを使用してインターフェースを作成できます。分離すると、これはオーバーヘッドのように見えるかもしれませんが、インターフェイスは、PHPでどのように機能するかについて、マニュアルで少し試してみる価値があります。

それが私たちのビジネスモデルでより理にかなっているという理由だけで?

あなたのビジネスモデルについては何も知らないので、それが理にかなっているかどうかはわかりません。しかし、私はあなたがビジネスの質問ではなくプログラミングの質問をしていると思いました。

何があっても常にALLオブジェクトを配置する必要がありますか?

次に、タイプヒントを失いますが、任意のオブジェクトを渡すことができます。コードをどの程度厳密に記述したいかによって異なります。インターフェイスを使用する場合は、コードをリファクタリングするとき(具体的なオブジェクトの実装を変更するとき)、およびstclassオブジェクトを使用するときと同様に非常に柔軟です。ただし、stdclassオブジェクトを使用する場合、関数は、関数入力を処理する前に、最初に取得したものを確認する必要があります。

于 2011-05-04T15:48:40.240 に答える
2

次の方法で必要なプロパティをテストします。

public function listBookOfAuthor(Author $author) {

    if (empty($author->firstName)) {
        throw new listBookOfAuthorException('firstName must be defined');
    }

}

あなたがこれをたくさんやっているのを見つけたら、プロパティが存在することをチェックするためのメソッドを含むある種の親クラスを書くことができます。

于 2011-05-04T15:51:08.447 に答える
2

スキーマによっては、メソッドlistBooksOfAuthor()(のようなサービスオブジェクトのメソッドのように見えます)は、完全なオブジェクトではなく、BookServiceのみで十分な場合があります。$authorIdAuthor

しかし、私は質問のポイントを理解していると思います。おそらく、Authorオブジェクトを完全に取り込むにはコストがかかります。たとえば、のようなメソッドからAuthorService::getAuthorById()です。

必要なのが機能の適度なサブセットだけであるような状況ではAuthor、おそらく、それらの状況に必要なメソッドのみを反映する別個のインターフェース(AuthorSummaryInterfaceのようなもの)を作成できます。Authorオブジェクトがそのインターフェースを実装できるようにして、すでにオブジェクトが手元にあるときに、Authorその限られた機能のみを必要とする操作を実行できるようにしAuthorます。Author:getSummary()または、の具体的な実装を返すメソッドを作成することもできますAuthorSummaryInterface。この方法では、メンバーの要件(たとえば、名前が必要)を適用し、それらの要件が満たされない場合に例外をスローできます。

また、オブジェクトを生成する一連のメソッド(おそらく、AuthorServiceオブジェクトまたはオブジェクト上)を作成することもできます。次に、機能のみが必要な状況では、これらの制限された機能を作成し、作成するのに費用がかからないオブジェクトを作成できます。AuthorSummaryServiceAuthorSummaryAuthorSummaryInterface

いくつかのアイデア。

于 2011-05-04T17:16:29.183 に答える