С универсальным интерфейсом dao:
public interface GenericDAO<T extends DataObject, ID extends Serializable> {
T save (T object);
T load (ID id);
void remove (ID id);
Class<T> getPersistedType();
}
Вы реализуете GenericDaoImpl с вашим любимым ORM, например Hibernate, для обработки загрузки и сохранения общих объектов. В итоге вы получите UserDao, StoreDao, TransactionDao, PetsDao и еще 50 Dao, каждый из которых имеет свою логику того, как объект должен быть сохранен, загружен и удален. У вас также может быть много экземпляров GenericDao, каждый для типа класса, который требует только универсальной обработки.
Я ищу реализацию службы, которая будет обрабатывать эти операции для любого объекта DataObject и выберет подходящий Dao для этого. Если для этого объекта есть реализация Dao, используйте ее, в противном случае используйте GenericDao.
Один из способов сделать это - использовать оператор DaoFactory if / else для проверки типа объекта и возврата соответствующего Дао. Однако это потребует от вас внесения изменений в заводские настройки каждый раз, когда добавляется новый Дао, и это не очень элегантно.
Какой лучший способ реализовать это? Чтобы спросить это по-другому,
как вы находите Дао, связанный с определенным классом?