ここに私のクラスがあります:
class PriceScale
-int ID
-float bookingFees
-Product product
-List<PricePeriod> periods
Class Product
-int ID
-string name
-List<PriceScale> priceScales
class PricePeriod
-DateTime begin
-DateTime end
-float price
-PriceScale scale
ご覧のとおり、「製品には多くの価格スケールがあり、価格スケールには多くの期間があります」というビジネスルールを厳密に適用しました。
私の問題: たとえば、Product クラスを扱っているとき、「priceScales はロードされていますか?」と自問するのは好きではありません。(製品が必要になるたびにロードするわけではないため)
解決 :
1/ 遅延読み込み : 私はそれが好きではありません.SQL クエリを知らないうちに実行すると、1+n クエリの問題が発生する可能性があります (私は価格計算システムに取り組んでいるので、本当にそうする必要があります)どのSQLクエリが実行されるかを確認してください)
2/ 常にロードする : 私はそれが好きではありません。なぜなら、このロジックをすべてに適用すると、データベース全体をロードすることになるからです。
3/ 構成 (メンバー priceScales) を削除します。その場合、価格スケールを処理する最善の方法は次のとおりです。
キーが製品 ID である Dictionnary<int,List<PriceScales>> を取得しますか?
他の何か?
4/ メソッドの最初に、priceScales が必要な場所に追加します
checkPriceScalesAreLoaded(productList);
遅延読み込みのように見えますが、より明示的です。
5/ 私が考えもしなかった他の何か :)
ありがとう