1

プレゼンテーション層にSpring MVC、ビジネス層にEJB、データアクセスにJPAを使用するエンタープライズアプリを構築しています。アプリは、ユーザーが GUI から入力した複数の検索基準に基づいて、さまざまなエンティティの検索機能をサポートする必要があります。これはほとんどのエンタープライズ アプリでかなり一般的な機能のようです。最適なアプローチを提供する設計パターン/原則があるかどうか疑問に思っています。今のところ、各ビジネス エンティティに対して SearchCriteria クラスを用意しています (例: Account の AccountSearchFilter)。プレゼンテーション層は SearchCriteria クラスのオブジェクトを構築し、それをビジネス層に渡します。ビジネス層は、利用可能な基準に基づいて JPA クエリを構築し、エンティティ オブジェクトのコレクションを作成します。コレクションはプレゼンテーション レイヤーに戻され、プレゼンテーション レイヤーによって JSON に変換されます。

この設計には 2 つの問題があります。

  1. SearchCriteria クラスはビジネス層の一部ですが、プレゼンテーション層でも使用されます。
  2. ビジネス レイヤーは、ビジネス エンティティのコレクションをプレゼンテーション レイヤーに返します。

プレゼンテーション層とビジネス層の間でクラスを共有するのは好きではありませんが、それを切り離すために何ができるかわかりません。プレゼンテーション層でドメイン オブジェクトを使用することに関する既存の投稿を既に検索しましたが、それが良いか悪いかについての議論を開始したくありません。ドメイン オブジェクトを使用したプレゼンテーション レイヤーは必要ないという結論に達しました。また、DTO を作成するとコードが重複するように思われるため、それが唯一の実行可能な解決策である場合は、これを渡すことができます。

4

0 に答える 0