spring、hibernate、maven、jpa、springMVC で大きなアプリケーションを開始します。今のところ私は30のクラスを持っています。(各クラスのインターフェイスには 60 個のクラスがあります) 2 つのパッケージがあります。(Dao とサービス) dao の場合、genericDao クラスを使用します。All Dao のクラス概要は次のとおりです。
>
package org.me.dao.jpageneric;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.apache.log4j.Logger;
public abstract class GenericDAO<T, K> {
@PersistenceContext(unitName="database")
protected EntityManager em;
protected Logger logger=Logger.getLogger(getClass());
public abstract Query getByIdQuery(K id);
public abstract Query getAllQuery();
public T save(T saved) {
if (saved == null) {
throw new IllegalArgumentException("L'argument de save() ne doit pas être nul.");
}
return (T) em.merge(saved);
} // save()
public void delete(T deleted) {
if (deleted == null) {
throw new IllegalArgumentException("L'argument de delete() ne doit pas être nul.");
}
em.remove(deleted);
} // delete().
@SuppressWarnings("unchecked")
public T get(K id) {
if (id == null) {
throw new IllegalArgumentException("L'argument de get() ne doit pas être nul.");
}
Query query = getByIdQuery(id);
return (T) query.getSingleResult();
}
@SuppressWarnings("unchecked")
public List<T> getAll() {
logger.debug("Récupération de tous les objets");
Query query = getAllQuery();
return (List<T>) query.getResultList();
}
すべての Dao は、このクラスを拡張し、そのインターフェイスを実装する必要があります (そして、他の 30 のクラスに対してこれを作成する必要があります)。良い習慣になることを願っています。
その後、サービス クラスの抽象ジェネリック クラスがもう 1 つあります。
package org.me.service.generic;
import java.util.List;
public abstract class GenericService<T,K> {
public abstract T create(T saved);
public abstract void remove(T deleted);
public abstract T findById(K id) ;
public abstract List<T> findAll();
}
同様に、すべてのサービス クラスは、この汎用サービス クラスを拡張し、各クラスのインターフェイスを実装する必要があります。グッドプラクティスは再びですか?
もちろん、各クラス(パッケージdaoおよびservice)のインターフェースがあります。
別の質問: コントローラーを作成する必要がありますが、どうすればよいですか? クラスごとにコントローラーを作成するには(つまり、30個のコントローラーですか?)、ページhtmlおよびjspをどのように処理しますか?ありがとうございました。申し訳ありませんが、私の英語は下手です.:-)