私の推論を説明しましょう。
クラス メソッド
基本原則:
持続性はクラスの動作であり、クラス メソッドであるべき
最初の問題: さまざまな DAO のセットをサポートする必要がある場合は、Factory を介してそれらを作成する必要があります。2 番目の問題: すべての永続化動作が特にクラスのインスタンスに関連しているわけではありません。たとえば、List メソッドと Search メソッドは、クラスではなくクラス リストを返し、インスタンスに依存しません。したがって、それらは基本的に静的メソッドです。
3 番目の問題: このクラスで継承をサポートしたい。そのため、永続化の詳細は親ごとに異なります。静的メソッドがある場合、それは問題になります。
それで、あなたはに進みます
コントローラー
の
基本原則:永続化メソッドは単一のクラスに属していません。それらはより大きく、したがって
分離する必要があります。懸念の分離が再び必要になるため、DAO が必要です。これは Utility クラスなので、メソッドはすべて基本的にstaticです。
最初の問題: 複数の永続化方法をサポートする場合は、DAO を作成するための Factory が必要です。
2 番目の問題: クラスの階層をサポートしたいので、静的クラスを使用できません。ファクトリを介してコントローラーを生成する必要があります。
3 番目の問題: 開発者に過度に複雑な API を提供しています。
クライアント コードの例:
PurchaseOrder po;
PurchaseOrderController poc;
poc = PurchaseOrderControllerFactory.Instance.Create();
po = poc.GetPurchaseOrder(42);
// do stuff
poc.SavePurchaseOrder(po);
それから私はゼロから始めます。
行動から始める
基本原則:持続性は行動ではありません。行動は永続性よりも重要です。
システムには、発注書サブシステムがあります。ユーザーは、高レベル (ユース ケース レベル) でのみ操作できます。そのため、メソッドは発注書のユース ケースを実装します。これらのメソッドは、必要に応じてファクトリを介して DAO を使用して、データベースにアクセスし、必要なことを行います。
つまり、 PurchaseOrder は基本的に DTO であり、データをすばやく渡す方法です。振る舞いがあってはなりません。
クライアント コードの例:
// It could be a factory if needed.
PurchaseOrderSystem pos = new PurchaseOrderSystem();
List<PurchaseOrder> transacted;
transacted = pos.TransactPurchaseOrders(john, 23);
// Show transacted purchase orders or whatever...