0

私のアプリケーションには、UI にグリッド形式で表示される約 50 のエンティティがあります。50 個のエンティティすべてに CRUD 操作があります。ほとんどの操作には標準的なフローがあります

すなわち。get の場合、リポジトリからエンティティを読み取り、DTO に変換して、DTO のリストを返します。作成/更新/削除の場合 - DTO を取得 - エンティティに変換し、リポジトリを使用して DB で作成/更新/削除し、更新された DTO を返します

一部のエンティティについては、実行する必要があるエンティティ固有の操作もいくつかあることに注意してください。

現在、これらのメソッドのそれぞれに getProducts createProducts updateProducts getCustomers createCustomers updateCustomers のようなすべてのエンティティに対して get/create/update/delete メソッドがあります。エンティティからの変換後、製品/顧客リポジトリを使用して CRUD 操作を実行します -> dto および逆に。

多くのコードの繰り返しがあると感じており、これらのメソッドの多くを削除できる方法が必要です。

コードの繰り返しを回避するために、いくつかのパターン (COMMAND PATTERN) を使用できますか?

4

2 に答える 2

0

Spring Data JPAまたはhereプロジェクトをご覧ください。DAO のボイラープレート コードを廃止します。

基本的にAOPを使用して次のような呼び出しを解釈すると思います

findByNameandpassword (String name,String passwd) 

メソッド名のフィールドを選択する際に渡されたパラメーターに基づいてクエリを実行します (インターフェースのみ)。

春のプロジェクトであるため、春のライブラリの要件は非常に最小限です。

于 2013-09-30T07:52:14.527 に答える
0

基本的に、これを行うには2つの方法があります。

最初の方法: コード生成

データベース スキーマを指定してコードを生成できるクラスを記述します。これにより、エンティティごとに基本クラスが作成されることに注意してください。カスタム コード (特定のエンティティに固有のコード) がある場合は、それをサブクラスに配置して、基本クラスを再生成するときに上書きされないようにすることができます。

正しいサブクラスが使用されるように、オブジェクトのインスタンス化は Factory メソッドを介して行う必要があります。

生成されたコードに、コードが自動的に生成されることを明確に示すコメントを追加してください (人々がコードを直接編集し始めないようにするため)。

2 番目の方法: 反射

このソリューションは、より洗練されていますが、より複雑でもあります。エンティティごとに 1 つの基本クラスを生成する代わりに、任意のエンティティを処理できる 1 つの基本クラスを作成します。このクラスは、リフレクションを使用して DTO:s にアクセスします。

カスタム コード (特定のエンティティに固有のコード) がある場合は、それを他のクラスに配置できます。これらの他のクラスは、ジェネリック クラスに注入されます。

リフレクションを使用するには、DTO:s で厳密な命名ポリシーが必要になります。

結論

私は、移行プロジェクトの最初のメソッドを使用して、新しいアプリケーション サーバー (Java を実行) とファット クライアントの間のサービス インターフェイス用の DTO クラスを生成するプロジェクトに参加しましたが、非常にうまく機能しました。100 を超える生成された DTO クラスがありました。あなたが試みていることが少し違うことは承知しています。データベース レコードの編集は一般的な問題ですが (すべてのプロジェクトで必要です)、そのためのフレームワークは (m) もありません。

そのための一般的なツールまたはフレームワークを作成することを考えていましたが、まだ実現していません。

于 2013-09-30T08:39:25.753 に答える