1

JSF2、Spring3、および Hibernate4 のテクノロジーを使用して Web アプリケーションを構築するための一般的なプロジェクト テンプレートを探しています。

テンプレートを提案する記事を見つけましたが、データベース内のテーブルごとに 5 つのクラス/インターフェイスが必要なためためらっていました。

  • 2 つのインターフェース (dao + サービス)
  • 実装用の 2 つのクラス
  • 1豆

それで普通ですか?誰かがより良いアーキテクチャを手伝ってくれますか?

4

2 に答える 2

2

Spring Data JPA モジュールの上にアーキテクチャを構築します。これにより、エンティティ用に 1 つのクラスが残り、(通常の状況では) リポジトリ用に 1 つのインターフェイスが残ります。

詳細については、 Spring のドキュメントをご覧ください。

短縮例:

春の設定:

<!-- Directory to scan for repository classes -->
<jpa:repositories
   base-package="x.y.z.repositories" />

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
  <property name="entityManagerFactory" ref="entityManagerFactory" />
  <property name="jpaDialect">
    <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
  </property>
</bean>

<bean id="entityManagerFactory"
  class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="jpaVendorAdapter">
    <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
      <property name="generateDdl" value="true" />
      <property name="database" value="HSQL" />
    </bean>
  </property>
</bean>

実在物:

@Entity
public class Product {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @Column(name = "id")
  private Long id;

  @NotNull
  private String name;
}

リポジトリ:

public interface ProductRepository extends CrudRepository<Product, Long> {

  public List<Product> findByName(String name);

}

リポジトリを使用するには、単にそれを注入する必要があります。

@Autowired
private ProductRepository productRepository;
于 2013-03-05T12:31:31.713 に答える
2

CGLib を依存関係として含めると、インターフェイスを取り除くことができます。最初からサービスの実装が異なる場合を除き、それらは必要ありません。本当に必要な場合にのみ導入してください (1:1 Service:ServiceImpl はアンチ パターンです)。

Hibernates/JPAsEntityManagerは既に一般的な CRUD DAO であるため、エンティティごとに DAO を作成する必要はありません。必要になったらすぐに導入し、EntityManagerそれまではサービス内で使用してください。

免責事項: これは Java EE への無駄のないアプローチであり、Adam Bien が著書 Java EE Patterns で推奨しているものに非常に近いものです。これを春に適応させましたが、今のところ問題なく動作しています。

ところで、Java 関係者は「本当にこれが必要なのか?」と自問することを忘れがちです。

于 2013-03-05T12:43:15.613 に答える