0

ここでのほとんどすべての質問と、www の関連する多くの議論を読みましたが、それでも要点をよく理解できていません。状況...

私のひどい英語と混乱した用語を許してください、しかし私はDAOとリポジトリの違い/利点/警告にはあまり興味がありません.これは質問の「核心」を変えないと思いますが、多分私は間違っています. .

明らかに、この例は単純すぎて、どのソリューションも簡単にやり過ぎてしまいますが、これははるかに大きなシステムの「ケース」と考えてください。

電話をかける相手をセールスマンに提案するアプリケーションを作成する必要があるとします。

各見込み客には、いくつかの「テキスト」データ (つまり、名前、性別、生年月日、住所、電話番号、電子メールなど)、写真、および他の人やベンダーとのやり取りの履歴があります。

テキスト データは Mysql テーブル (人) に存在し、写真はファイル システムのどこかにあり、誰かがすでにサービスをリリースしており、セールスマンとバイヤーとしてのすべての見込み客のスコアを考慮して、連絡を取ることに関心がある可能性のある人のリストを返します。

私はおそらく次のようになります:

  1. 名前、電話番号、住所、電子メール、写真を含むドメイン オブジェクトの人物。すべてのプロパティとメソッド getScore() のセッターとゲッター。

  2. 2 つの DAO、1 つは mysql テーブル用、もう 1 つはファイルシステム用です。

  3. 特定のセールスマン (アプリケーションのユーザー、この例の範囲外) の見込み客のリストを取得するサービス。

私には明らかではないこと:

  1. ドメイン オブジェクトのメソッド getScore() は、サービス層のサービスを直接呼び出すことができますか? そうでない場合、なぜですか?

  2. 異なる DAO からのデータには別の DTO が必要ですか?

  3. もしそうなら、2 つの情報を組み立てる方法 (つまり、mysql DAO から URI を取得し、ファイルを取得し、画像をロードする) に関するロジックを所有する、ある種のマネージャーまたは「スーパー」DAO が必要ですか? これは、データ層またはサービス層に存在する必要がありますか? (データが保存されている限り、データ層にとどまるべきだと思われます)。

  4. マネージャーまたは「スーパー DAO」の出力は、別の DTO である必要がありますか、それとも直接ドメイン オブジェクトである可能性がありますか?

  5. DTOの場合、マネージャー/スーパーDAOを呼び出してドメインオブジェクトを構築するサービスが必要ですか(この場合、サービスはスコアをドメインオブジェクトに「追加」すると想定しています)。

明確な質問であることはわかっていますが、ソリューションを設計する方法を理解できません。

4

1 に答える 1

0

答えの出発点:

  1. getScore()メソッドはドメインオブジェクトではなくサービスに属するべきだと思います
  2. 好みの問題
  3. それは私見のサービスです
  4. サービスの出力は、DTO またはドメイン オブジェクトである可能性があります。

要するに(そして私の意見では)

  • ドメインオブジェクトは「ダム」クラスです(データをオブジェクトにマップするためだけに)
  • DAOはデータを取得するために存在します (それだけです)
  • DTOは、DAO とサービスの間のメディエーターとして使用できます
  • サービスは、関連するアクションを実行するためにここにあります(daoを使用して)。たとえば、スコアを計算する場合

使用は下から上に許可されます。サービスは DAO を使用できますが、変更の可能性を容易にするためにその逆はできません (例: DB バックエンドの変更 => DAO の更新、それだけです)

=> コミュニティ ウィキ

于 2014-10-14T17:47:15.833 に答える