新しいプロジェクトに Generic DAO と Generic Service を実装しようと考えています。私はウェブで多くの例を見てきました。
開始する前に、このデザイン パターンを使用することの長所と短所を知りたいと思います。
このパターンを使用することをお勧めしますか?
新しいプロジェクトに Generic DAO と Generic Service を実装しようと考えています。私はウェブで多くの例を見てきました。
開始する前に、このデザイン パターンを使用することの長所と短所を知りたいと思います。
このパターンを使用することをお勧めしますか?
複数の DAO クラスがデータベースと通信したい場合 (CRUD(Create,Read ,Update and Delete) の例のように)、一般的な DAO 設計パターンが登場します。 (セッションを使用して)DAOクラスごとに(セッションを使用して)DAOクラスを新しく実装するたびに、データベースを処理する独自のコードを作成する必要があるため、一般的に退屈な作業です。
以下は、ジェネリック DAO を使用する場合の長所と短所です。
注:以下の詳細は、DAO パターンの使用に関する SO の質問の長所と短所への回答から学んだことです。
長所
1 . 実際のストレージ システムの優れた抽象化レイヤーを作成します。
2 . 永続化レイヤーのよりオブジェクト指向のビューを提供します。
3 . データベースからデータアクセスを実行するドメインクラスとコードを明確に分離します。 [JDBC、ORM [休止状態のような] または JPA を使用]
4 . 一般的なCRUDフローを設定したら、他の DAO に対して同じレイアウトを繰り返すことができます。
短所
1 . DAO を手書きすると、コードが面倒で反復的になり、コード ジェネレーター/テンプレートと ORM を使用する必要があります。
Q - このパターンを使用することをお勧めしますか?
A - 上記の長所と短所を観察した後、アプリケーションでジェネリック DAO を抽象化レイヤーとして使用して、CRUD の条件でデータベースと通信しました。これにより、他の DAO と同じことを行うために多くの重複コードを減らすことができました。後で Generic DAO を使用することに慣れると、生活が楽になります。
DAO と汎用 DAO については、別の意見を持ったほうがよいと思います。長所に関するいくつかの言葉 (プレーンな JDBC ではなく、例として ORM、Hibernate を使用する場合、私の提案は有効です)。
- 実際のストレージ システムの優れた抽象化レイヤーを作成します。
それはマーケティングでたらめです。実際には、さまざまな RDBMS (Oracle RDBMS -> PostgreSQL) 間での移行に問題があります。ストレージ システムの種類の変更については言及していません (RDBMS -> NoSQL など)。
- 永続化レイヤーのよりオブジェクト指向のビューを提供します。
いいえ!適切に行うことは非常に困難です。ほとんどの DAO 実装には、次のような多数のメソッドがあります。
getSomething(String x, String y, String z);
getSomethingOther(String x, String z);
- データベースからのデータ アクセスを実行するドメイン クラスとコードを明確に分離します。[JDBC、ORM [hibernate など] または JPA を使用]。
そうかもしれませんが、この分離の有用性は誇張されています。
- 一般的な CRUD フローを設定したら、他の DAO に対して同じレイアウトを繰り返すことができます。
正しいです。