Hibernate-generic-DAO, allgemeiner Dienst, und Generische View-Schicht?

Ich habe versucht, Sie zu verstehen und zu implementieren, die eine GenericDAO Schicht im Ruhezustand. Ich bin neu in das Konzept und wurden dabei ein wenig Lesen und studieren. Ich fand zahlreiche Beispiele, Beispiel-Implementierungen von einem GenericDAO Ebene, und das ist, was ich endete mit.

public class GenericDAOImpl<T, ID extends Serializable> implements GenericDAO<T, ID> {

    private static Logger log = Logger.getLogger(GenericDAOImpl.class.getName());


    private SessionFactory sessionFactory;


    @SuppressWarnings("unchecked")
    public T findById(long id, Class<T> objectClass) {
        log.info("Entered GenericDAOImpl findById(" + id +")");
        T result = (T) getSessionFactory().getCurrentSession().load(objectClass, id);
        if(result != null){
            Hibernate.initialize(result);
            return result;
        }else{ 
            return null;
        }
    }

    public boolean create(T newInstance) {
        log.info("Entered GenericDAOImpl create()");
        if(newInstance == null){
            return false;
        }
        getSessionFactory().getCurrentSession().saveOrUpdate(newInstance);
        return true;        
    }


    public boolean updpate(T updateInstance) {
        log.info("Entered GenericDAOImpl updpate()");
        if(updateInstance == null){
            return false;
        }
        getSessionFactory().getCurrentSession().update(updateInstance); 
        return true;
    }

    public boolean delete(T entity) {
        log.info("Entered GenericDAOImpl delete()");
        if(entity == null){
            return false;
        }
        getSessionFactory().getCurrentSession().delete(entity);
        return true;
    }

    @SuppressWarnings("unchecked")
    public List<T> findByExample(T exampleInstance, Class<T> objectClass){
        log.info("Entered GenericDAOImpl findByExample()");
        Criteria searchCriteria = getSessionFactory().getCurrentSession().createCriteria(objectClass);

        searchCriteria.add(Example.create(exampleInstance));

        return (List<T>)searchCriteria.list();          

    }

    public SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }       
}

Scheint es, als ob diese Arbeit sollte in der Theorie (möglicherweise müssen einige Optimierungen)

Meine Frage ist kann ich verwenden einen generischen service und view layer zu "pass-through" der geschichteten Architektur-Ansatz? Ich verstehe nicht ganz, hibernate Transaktionen genug, um zu wissen, ob es sicher ist, dies zu tun, mit seiner Handhabung der Transaktionen etc...

Vielleicht so etwas wie dies für die service-Schicht zum Beispiel

public class GenericServiceImpl<T, ID extends Serializable> implements GenericService<T, ID>{

    private GenericDAO<T, ID> genericDao;

    @Override
    public T findById(long id, Class<T> objectClass) {
        return this.getGenericDao().findById(id, objectClass);
    }

    @Override
    public boolean create(T newInstance) {
        return this.getGenericDao().create(newInstance);
    }

    @Override
    public boolean updpate(T updateInstance) {
        return this.getGenericDao().updpate(updateInstance);
    }

    @Override
    public boolean delete(T entity) {
        return this.getGenericDao().delete(entity);
    }

    @SuppressWarnings({ "unchecked", "rawtypes" })
    @Override
    public List findByExample(T exampleInstance, Class<T> objectClass) {
        return this.getGenericDao().findByExample(exampleInstance, objectClass);
    }


    public GenericDAO<T, ID> getGenericDao() {
        return genericDao;
    }

    public void setGenericDao(GenericDAO<T, ID> genericDao) {
        this.genericDao = genericDao;
    }


}

Dann könnte ich gehen und tun, eine generische view-Schicht?

Bitte lassen Sie mich wissen, ob diese Vorgehensweise akzeptabel ist oder wenn es irgendwelche Bedenken bei diesem Ansatz.

Vielen Dank im Voraus für Eure Gedanken und Antworten!

InformationsquelleAutor Curt | 2012-08-23

Schreibe einen Kommentar