データマッパーはほぼ完成しましたが、今は人間関係の段階にあります。
ここで私の考えを説明しようと思います。このトピックに関する良い記事や情報を見つけることができなかったので、おそらく私は車輪の再発明をしているのかもしれません(確かに、私は大きなフレームワークを使用できますが、それを実行して学びたいと思います)。
1:1の関係
まず、1:1の関係を見てみましょう。一般に、「Company」というドメインクラスと「Address」というドメインクラスがある場合、Companyクラスにはaddress_idのようなものがあります。ほとんどの場合、会社のリストを表示するだけで、住所は誰かが詳細を確認するときにのみ必要であるとしましょう。その場合、私のデータマッパー(CompanyDataMapper)は単に遅延ロードします。つまり、データベースからそのaddress_idをフェッチするだけで、アドレスデータを取得するための結合は行いません。
一般的に、私はすべての関係に対してゲッターメソッドを持っています。したがって、この場合、getAddress(Company companyObject)メソッドがあります。会社のオブジェクトを取得し、そのアドレスプロパティを検索し、NULLの場合は、そのAddressオブジェクトのMapperクラス(AddressDataMapper)を使用して、データベースから対応するAddressオブジェクトをフェッチし、そのアドレスオブジェクトを指定されたアドレスプロパティに割り当てます。会社オブジェクト。
重要:データマッパーは別のデータマッパーを使用できますか?
ほとんどの場合、会社オブジェクトと住所オブジェクトの両方が必要であるとしましょう。これは、常にリストにまとめて表示するためです。この場合、CompanyDataMapperは会社オブジェクトをフェッチするだけでなく、JOINを使用してSQLクエリを実行し、アドレスオブジェクトのすべてのフィールドも取得します。最後に、レコードセットを繰り返し処理し、新しいオブジェクトに対応する値をフィードして、アドレスオブジェクトを会社オブジェクトに割り当てます。
これまでのところ、単純に聞こえます。
1:n関係
これらはどうですか?1:1との唯一の違いは、会社が複数のAddressオブジェクトを持っている可能性があることです。見てみましょう:ほとんどの場合、会社にのみ関心がある場合、データマッパーは会社オブジェクトのaddressesプロパティをNULLに設定するだけです。アドレスプロパティは、なし、1つ、または複数のアドレスを参照できる配列です。ただし、読み込みが遅いため、まだわかりません。NULLです。しかし、ほとんどの場合、すべてのアドレスが必要になるとしたらどうでしょうか。すべての会社とそのすべての住所を含む大きなリストを表示するとしたらどうでしょうか。この場合、物事は本当に醜くなり始めます。まず、すべてのアドレスオブジェクトに対してアドレステーブルを50回結合することはできません(それは不可能であると強く信じています。そうすると、パフォーマンスはゼロ未満になります)。ですから、これをさらに先に考えると、
重要:これは本当ですか?10個のアドレスごとに10個の会社がある場合、100個のアドレスオブジェクトを取得するには100個のクエリを送信する必要がありますか?
m:n関係
アドレスオブジェクトに国、州、市、道路、家番号のみが含まれているとします。しかし、1つの家は、多くの企業が入っている大きなビジネスタワーになる可能性があります。誰もがそのウェブサイトでその塔を誇示するために小さなROMを借りることができるそれらの近代的なオフィスビルの1つのように。つまり、多くの企業が同じアドレスを共有できます。
そのような問題に対処する予定はまだありません。
重要:おそらくそれは1:nの関係よりも大きな問題ではありませんか?
これを解決/実装するための詳細を説明する優れたリソースを誰かが知っているなら、私はリンクについて喜んでいます!