たくさんのDAOを書き直そうとしています。設定は次のとおりです。
- プレーンJDBCのみ(JPA、ORMは一切ありません)
- インターフェイスは使用されていません
- オブジェクトを挿入する前にたくさんのチェック
- ビジネスオブジェクトは強力にリンクされています
私の主な質問は、他の複数のオブジェクトで構成されるビジネスオブジェクトを永続化/取得するにはどうすればよいですか?たとえば、私のCustomerDAOはAddressDAOを知っていて、そこからcsutomersアドレスを取得しますか?
たくさんのDAOを書き直そうとしています。設定は次のとおりです。
私の主な質問は、他の複数のオブジェクトで構成されるビジネスオブジェクトを永続化/取得するにはどうすればよいですか?たとえば、私のCustomerDAOはAddressDAOを知っていて、そこからcsutomersアドレスを取得しますか?
プレーンJDBCのみ(JPA、ORMは一切含まない)ビジネスオブジェクトは強力にリンクされています
ビジネスオブジェクトをリンクしたいときにJPAを使用したくない理由はわかりませんが、少なくとも、ボイラープレートコードから解放されるSpringJDBCテンプレートを使用する必要があります。
その他の制約については、次のようにします。
DAO
メソッドを定義し、それらをバックアップされたSpringJDBCテンプレートに実装しますDAOImpl
。どこでもDAOを使用し、DAOImplを注入します。私の2セント!
JOOQの使用を検討してください。これはJPAではありませんが、代替ソリューションとして簡単に使用できます。十分軽量です。また、データベースエンティティをDAOオブジェクトとして構築するリバースエンジニアリングツールも提供します。
私は、アプリケーションがかなり設計された関連する状況にJOOQを埋め込みました。JDBC Layerの混乱を避けるために、DAO機能を上位レイヤーとして使用するのではなく、DAO機能を使用しませんでした。
乾杯!
複合エンティティは、DAOの上のレイヤーです。すべての結合を削除する場合、DAOによって永続化されるドメインオブジェクトは、関係なしでフラットである必要があります。コアJ2EEパターンCompositeEntityを参照してください。
また、一方のファインダーをもう一方のファインダーに配置することにより、DAO間に結合を導入しないことをお勧めします。例えば:
AddressDAO.findForCustomerId(id);
関係を管理するために3番目のDAOを使用するよりも劣ります。IE:
CustomerAddressRelDAO.findAddressForCustomer(id);
関係DAOを使用する場合、住所も顧客も相互に依存(または認識)していません。