私は顧客と顧客の住所(JDBC経由)のためにデータベースを更新する必要があるコンポーネントを持っています。 CustomerDAOからCustomerAddressDAOに電話するのが適切ですか?または、個別に呼び出す個別の "CustomerDataManager"コンポーネントを作成しますか?DAOはDAOを呼び出すことはできますか?
答えて
あなたはです。ですが、それはあなたがすべきことではありません。このような場合、両方のDAOを使用するメソッド呼び出しを持つサービス(この場合はCustomerService
)を使用したいと思います。サービスメソッドの周りでトランザクションを定義することができます。したがって、1つの呼び出しが失敗した場合は両方がロールバックされます。
他のDAOを呼び出すDAOの問題は、循環参照が非常に迅速に終了することです。依存性注入ははるかに難しくなります。
別のDAOを呼び出すこともできますが、CustomerDAOでCustomerAddressDAOを構築することもできます(結局のところ、それは顧客に関するものであり、顧客なしで顧客アドレスを持つとは思わない)。
明らかに、あなたはさまざまな方法でそれを行うことができます。しかし、この質問に適切に答えるには、モデルから始めてください。このモデルでは、Addressがエンティティであるかどうか(独自のIDを持ち、独立して使用されるかどうかを参照)、または値タイプ(顧客のコンテキストでのみ意味のあるもの)であることを確認します。
、住所は独自のダオ持ち、お客様が独自のダオどちらダオは、他の1にアクセスする必要があります持っている。この場合 その二つを操作する必要があるいくつかのロジックがある場合:。アドレスは、Entityです。
住所は、顧客に関連付けられた値の種類です。 この場合、アドレスには別のDAOがありませんlf。格納されているCustomerオブジェクトの一部として保存/復元されています。
結論:正しく設計されていれば、DAOは(標準的な状況では)お互いにアクセスしません。
"2つを操作する必要があるロジックがある場合、そのロジックはデータアクセスレイヤではなくアプリケーションロジックになければなりません。 - トランザクションである必要がある場合はどうしますか? (例:お客様と住所の両方が削除されていることを確認する必要があります) – HEATH3N
これは非常に良い質問です!私は、このシナリオでは、顧客に関連付けられた値タイプとして住所を持つことが理にかなっていると思います。これは顧客と一緒にアドレスを操作することを可能にする。 2つの削除。 –
- 1. DAOクラスのメソッドを呼び出す
- 2. DAOを工場なしで呼び出すには?
- 3. Json ServletからDAOメソッドを呼び出す方法
- 4. Daoクラスを呼び出すビジネスクラスをテストするJunitテスト
- 5. DAOクラスのメソッドを呼び出すことができません - スタティックコンテキストから非スタティックメソッドinsertを参照することはできません
- 6. VOとDAOは、クエリ
- 7. DAO工場パターンとは何ですか?
- 8. IntelliJはDAOレイヤーまたはレストレイヤーを生成できますか?
- 9. 3層アーキテクチャでは、DAOパターンはどこにありますか?
- 10. アクティブレコードとDAOの違いは?
- 11. J2EE Webアプリケーションのサービス層からDAOメソッドを呼び出すにはどうすればいいですか?
- 12. DAOとダムレイヤモデルをテストしますか?
- 13. DAOとSpring Autowired
- 14. DAOパターンとモデルオブジェクト
- 15. EJBサービスで2つのDAOを呼び出すと、なぜEJBTransactionRolledbackExceptionが発生しますか?
- 16. Guice-Injected DAOはシングルトンですか?
- 17. OpenSessionInViewFilterおよびカスタムスプリングDAO
- 18. ドメイン、DAOおよびサービスレイヤー
- 19. 1つの大きなDAOまたは複数の小さなDAO?
- 20. JSPからのDAO呼び出しはMVCパターンに準拠していますか?
- 21. Service.onStartCommandでstopSelf()を呼び出すことはできますか?
- 22. cfscriptでカスタムタグを呼び出すことはできますか?
- 23. GJSでGdk.Seat.grab()を呼び出すことはできますか?
- 24. プリミティブでdeleteを呼び出すことはできますか?
- 25. rootViewControllerでメソッドを呼び出すことはできますか?
- 26. C#でオブジェクトを呼び出すことはできますか?
- 27. Javaでprintlnを呼び出すことはできますか?
- 28. DAOデザインパターン
- 29. PHPのORMとDAO
- 30. ジェクトDAOと工場
ビジネス層でこれを行うことを阻んでいるのは何ですか? – Andre