два агрегата ReadingSession и Book.
У ReadingSession есть метод setCurrentPage, которые перелистывает страницу. Соответственно устанавливемая страница не должна быть больше, чем всего страниц у книги.
Что я могу сделать:
1. Передавать в setCurrentPage инстанс Book, чтобы можно было сделать сравнение с кол-вом страниц. В таком случае инвариант не будет нарушен
2. Добавить в ReadingSession readonly парамер pages, куда будет выгружать кол-во страниц из кинги. Так удобнее в том плане, что не нужно два агрегата выгружать сразу. Но инвариант уже не гарантирован.
Как мне поступить?
почему инвариант не гарантирован во втором случае? штука, которая инстанцирует сессию должна проверять инварианты, мне кажется. new ReadingSession(book.pages.size)
За время работы с ReadingSession, Book может измениться
1. Перечислить операции в которые вовлечены данные 2. Перечислить инварианты стэйта, прекондишены для этих операций и от каких данных зависят 3. Прикинуть насколько мы чувствительны к stale data 0. Выкинуть из головы агрегаты книга и т.д. агрегаты про процессы а не про сущности
Может, но это значит что мы уже другую книгу читаем, это ок вообще?
А. Действительно. У меня же страницы не меняются после создания
А вообще зачем мне агрегат книги выкидывать из головы, если во время чтения я не могу читать страницу, которой нет?
Я не знаю зачем тебе агрегат книги. Очень странно иметь границу бизнес транзакций которую мы называем книгой
Ну до того как пользователь сможет читать книгу, ее надо создать. У меня есть требования к минимальному набору информации о книге и ее страницах. Когда есть книга, ее можно начать читать, т. е. создать ReadingSession. Единственное требование к данным это рефернс на Book. Остальные требования уже к процессу чтения – например нельзя читать страницу которой нет, чтение можно отложить и т.д.
а почему устанавливаемая страница не должна быть больше, чем всего страниц у книги? А количество страниц часто меняется? А что случится, если устанавливаемая страница будет больше, чем страниц у книги?
мысленно представь что когда бизнес говорит "у книги есть ISBN и заголовок" это не значит что у тебя есть сразу сущность книга с полем isbn и title, это так же может значить что у нас есть сущность BookID и сущность ISBN и какой BookDescription.
Обсуждают сегодня