4

Martin Fowler の Patterns for Enterprise Application Architectures 本 (ドイツ語で 229 ページ、Lazy Load) で、彼は次のコードの例を示しています。

public List getProducts() {
    if (products == null) products = Product.findForSupplier(getID());
    return products;
}

ご覧のとおり、finder メソッドはドメイン クラス Product の一部のようです。どこか(多くの場合、データベースですが、ビジネス ロジックは気にする必要はありません) からオブジェクトを取得することに関連するものはすべて Data Mapper (PersonDataMapper) クラスの一部である必要があると考えていたため、これには少し混乱します。おそらく私は何かを逃しただけですか?

4

1 に答える 1

3

あなたが与えた例は、遅延読み込みの簡単な方法です。人が DataMapper を使用する可能性は低いです。Fowler が英語の本 (201) で述べているように:

遅延初期化を使用するのは簡単ですが、オブジェクトとデータベース間の依存関係を強制する傾向があります。そのため、 ActiveRecordTable Data Gateway、およびRow Data Gatewayに最適です。Data Mapperを使用している場合は、仮想プロキシ[GOF]を使用して取得できる間接レイヤーを追加する必要があります。

すべて [...]はDataMapperにある必要があります。はい、いいえ。設計パターンを使用する際に留意すべきことは、それらをいつ使用し、いつ使用しないかです。DataMapper は聖杯ではありません。それを行う唯一の方法ではありません。アプリが Web 上に存在する小さくて単純な CRUD アプリである場合、Data Mapper やドメイン モデルの使用によって複雑さが増すことは、おそらく無駄です。

さらに、設計パターンは、一般的なソフトウェアの問題に対する一般的な優れた手法です。本に書かれているように、あなたの具体的な問題にそれらを適用できるかもしれませんが、宗教的にそれらに従う理由はありません. パターン内の何かが問題解決を過度に複雑にする場合は、単純にしてください。派生する。調整。問題を解く。

于 2009-12-30T12:02:28.970 に答える