Ho anche fan del -Convenzione GenericDao e GenericDaoImpl con un certo sostegno da classi di supporto generiche, dovrebbe il salvare o eliminare richiedere azioni supplementari per alcune classi persistenti:
public interface PersistListener<T> {
void onPersist(T item);
}
Costrutti simili possono essere utilizzati anche per la cancellazione. Ciò è particolarmente utile se è necessario un qualche tipo di registro eventi per scrivere ogni attività e non si desidera utilizzare AOP per questo.
miei GenericDaoImpl sarebbe simile a questa:
public class GenericDaoImpl<T> extends HibernateTemplate {
public void setPersistListeners(List<PersistListener> listeners) {
this.persistListeners = new GenericInterfaceHandler(listeners,
PersistListener.class);
}
// hibernate updates the key to the object itself
public T save(T item) {
getSession().save(item);
List<PersistListener<T>> listeners = this.persistListeners.getAll(item);
for (PersistListener<T> listener : listeners)
listener.persist(item);
}
// ...
}
Che persistListener nell'esempio di cui sopra farà è quello di trovare un PersistListener con classe generica corrispondenza a quella della classe data come parametro. Si trova così, quindi la chiamata è delegata al listener appropriato. My GenericInterfaceHandler può anche essere utilizzato per restituire solo il gestore più specifico o il solo gestore per la classe data, se presente.
Se sei interessato, potrei anche pubblicare l'implementazione di GenericInterfaceHandler in quanto è un costrutto piuttosto potente in molte occasioni.
Grazie! Inoltre, avrebbe senso inserire le mie interfacce DAO in un pacchetto dao e l'implementazione in un pacchetto dao.hibernate (in modo che l'implementazione possa essere cambiata in seguito)? – oym
Questo ha senso – Kevin