Сценарий:Использование фабрики в объекте модели домена?
В моем приложении (которое использует богатую модель домена, где логика находится в модели, а не в сервисах) У меня есть пользователи. Я создаю новые пользователь с сервисом
User newUser = userService.createNewUser("Hans Dampf");
или получить их из базы данных
User oldUser = userDao.findByName("Hans Dampf");
Потому что в каждом вызове в мое приложение у меня есть прямой доступ к объекту пользователя, я хотел бы использовать пользователь объект как точка входа в мою модель домена.
Каждый пользователь может иметь разные типы Галереи, сохраненные в другой таблице.
class User {
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "userId")
private Set<Gallery> automatic = new HashSet<Gallery>();
}
Я хочу иметь простой способ включить конкретную галерею. Так что мой API будет выглядеть следующим образом:
User user = ... // creating or retriving user
user.enableMainGallery();
Внутри этого метода было бы necassary создать новый объект галереи и добавить его в список галерей. Но как создать этот новый экземпляр? Использование фабрики? Это потребует ввода фабрики в объект домена (может быть проблематичным).
public void enableAutomaticGallery() {
automatic.add(automaticFactory.createAutomaticGallery(this));
}
Или мое определение интерфейса ошибочно? Должен ли я определить его каким-то другим способом, так что мне не нужно вводить завод? Как?
В сообщении здесь http://evan.bottch.com/2007/12/06/factory-and-repository-in-the-domain/ он рассказывает о том, как фабрики и DAO являются частью модели домена, и мы не должны воспринимать их как объекты уровня приложения. Я не уверен, где я стою, но это другая точка зрения. –