0

私は Zend Framework を使用しており、DDD アプローチ (ドメイン駆動設計) に移行しようとしています。ドメイン オブジェクト用のモデル、マッパー、および DbTable があります。

システム内のすべてのユーザーのリストなど、同時に複数のエンティティをフェッチする必要がある状況はたくさんあります。そのため、私のユーザー モデルには、すべてのユーザーを返すメソッド「getAllUsers」があります (現在は、すべてのユーザーの配列ですが、コレクション クラスを作成することを考えています)。これまでのところ、通常のメソッド (非静的) を使用してコレクションを取得しています。この目的のために、「空の」オブジェクトを作成する必要があります。もう 1 つのオプションは、静的メソッドに変換することです。

どちらのアプローチが優れているか、そのようなメソッドを非静的のままにするか、それらを静的メソッドに変換するかはわかりません。そして、より良いアプローチ/プラクティスは何ですか?またその理由は何ですか? また、どのアプローチが DDD 方法論に密接に従っているか。

PS: いいタイトルが思いついたら教えてください。いいえ、コースの質問ではありません。

4

3 に答える 3

1

まず、これは DDD 関連の質問ではないと思います。静的メソッドを使用するかどうかは、OOP または設計の問題に似ています。

基本的に、クラスの静的メソッドを使用することは、実際には OOP ではなく手続き型プログラミングです。カプセル化や継承などの OOP パラダイムを使用できないためです。設計上の欠陥/コードの臭いの可能性を指摘しています。

また、静的メソッドのモックはより複雑であり、単体テストでレガシーコードをカバーできるようにするためだけに追加されているため、単体テストが難しくなります。

いくつかのコード例を投稿すると、質問に答えるのが簡単になります。

同様の質問がここここ、またはここで回答されました。

于 2011-11-21T07:24:48.597 に答える
0

ドメイン駆動設計では、永続的なユーザーのコレクションをUserRepositoryインターフェイスとして表現する必要があります。そのインターフェースの具体的な実装には、データベース接続の状態などの状態があります。したがって、リポジトリ実装のインスタンスが必要であり、そのメソッドは静的メソッドではなくインスタンス メソッドになります。

于 2011-11-21T21:22:30.310 に答える
0

静的メソッドとは、インスタンス化されたオブジェクトがそれを呼び出す必要がないことを意味します。通常、静的メソッドは、クラスの特定のインスタンスだけでなく、クラス全体に関連するメソッドをグループ化するために使用されます。対照的に、非静的メソッドは、特定の個々のオブジェクトに関連するメソッドをグループ化するために使用されます。

したがって、getAllUsers() を非静的としてマークし、それをユーザーの下に置くと、基本的に、特定の 1 人のユーザーが他のすべてのユーザーについて知るように求められます。アナロジーを使用すると、1 人の市民からその国のすべての市民に関する完全な情報を尋ねるようなものになります (あなたは自分の国にいるすべての市民を知っていますか?)。

静的とマークすることは、百科事典の市民定義からすべての市民に関する情報を求めるようなものです。非静的とマークするよりはましですが、それでも少し奇妙で厄介です。

通常、国には、市民に関する情報を取り扱う責任を負う人口登録簿があります。類推を元に戻す - 「何か他のもの」、これを担当するコレクションのようなレジスタがあります。

于 2011-12-01T13:28:03.973 に答える