Сценарий:
В моем приложении (которое использует модель расширенного домена, где логика в модели, а не в службах) у меня есть пользователи. Я создаю новых пользователей с сервисом
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();
Внутри этого метода было бы необходимо создать новый объект галереи и добавить его в список галерей. Но как создать этот новый экземпляр? Используя фабрику? Это потребует внедрения фабрики в объект домена (может быть проблематично).
public void enableAutomaticGallery() {
automatic.add(automaticFactory.createAutomaticGallery(this));
}
Или определение моего интерфейса неверно? Должен ли я определить это как-то иначе, чтобы мне не пришлось вводить фабрику? Как?