Ho più entità come Hotel, Città di destinazione ecc. che possono contenere immagini. Il modo in cui ora ho il mio sistema è, penso a tutte le immagini che appartengono a questo set universale (una tabella nel DB contiene filePath a tutte le immagini).
Quando devo aggiungere un'immagine a un'entità, vedo se l'entità esiste in questo insieme universale di immagini. Se esiste, collega il riferimento a questa immagine, altrimenti crea una nuova immagine. Per esempio:.
class ImageEntityHibernateDAO {
public void addImageToEntity(IContainImage entity, String filePath,
String title, String altText) {
ImageEntity image = this.getImage(filePath);
if (image == null)
image = new ImageEntity(filePath, title, altText);
getSession().beginTransaction();
entity.getImages().add(image);
getSession().getTransaction().commit();
}
}
La mia domanda è: prima dovevo scrivere questo codice per ogni entità (e ogni entità avrebbe una collezione Set). Quindi, invece di riscrivere lo stesso codice, ho creato la seguente interfaccia:
public interface IContainImage {
Set<ImageEntity> getImages();
}
Le entità che dispongono di raccolte di immagini implementano anche l'interfaccia IContainImage
. Ora, per qualsiasi entità che deve supportare l'aggiunta di funzionalità Image, tutto ciò che devo richiamare da DAO è qualcosa del tipo:
// in DestinationDAO::addImageToDestination {
imageDao.addImageToEntity(destination, imageFileName, imageTitle, imageAltText);
// in HotelDAO::addImageToHotel {
imageDao.addImageToEntity(hotel, imageFileName, imageTitle, imageAltText);
Sarebbe di grande aiuto se qualcuno potesse fornirmi qualche critica su questo design? Ci sono dei difetti che non vedo subito?