212 похожих чатов

Привет. А подскажите как правильно смоделировать агрегаты в этой ситуации: Есть

два агрегата ReadingSession и Book.

У ReadingSession есть метод setCurrentPage, которые перелистывает страницу. Соответственно устанавливемая страница не должна быть больше, чем всего страниц у книги.

Что я могу сделать:

1. Передавать в setCurrentPage инстанс Book, чтобы можно было сделать сравнение с кол-вом страниц. В таком случае инвариант не будет нарушен
2. Добавить в ReadingSession readonly парамер pages, куда будет выгружать кол-во страниц из кинги. Так удобнее в том плане, что не нужно два агрегата выгружать сразу. Но инвариант уже не гарантирован.

Как мне поступить?

10 ответов

25 просмотров

почему инвариант не гарантирован во втором случае? штука, которая инстанцирует сессию должна проверять инварианты, мне кажется. new ReadingSession(book.pages.size)

Alexander- Автор вопроса
🐴
почему инвариант не гарантирован во втором случае?...

За время работы с ReadingSession, Book может измениться

1. Перечислить операции в которые вовлечены данные 2. Перечислить инварианты стэйта, прекондишены для этих операций и от каких данных зависят 3. Прикинуть насколько мы чувствительны к stale data 0. Выкинуть из головы агрегаты книга и т.д. агрегаты про процессы а не про сущности

Alexander
За время работы с ReadingSession, Book может измен...

Может, но это значит что мы уже другую книгу читаем, это ок вообще?

Alexander- Автор вопроса
Sergey P
Может, но это значит что мы уже другую книгу читае...

А. Действительно. У меня же страницы не меняются после создания

Alexander- Автор вопроса
Sergey P
1. Перечислить операции в которые вовлечены данные...

А вообще зачем мне агрегат книги выкидывать из головы, если во время чтения я не могу читать страницу, которой нет?

Alexander
А вообще зачем мне агрегат книги выкидывать из гол...

Я не знаю зачем тебе агрегат книги. Очень странно иметь границу бизнес транзакций которую мы называем книгой

Alexander- Автор вопроса

Ну до того как пользователь сможет читать книгу, ее надо создать. У меня есть требования к минимальному набору информации о книге и ее страницах. Когда есть книга, ее можно начать читать, т. е. создать ReadingSession. Единственное требование к данным это рефернс на Book. Остальные требования уже к процессу чтения – например нельзя читать страницу которой нет, чтение можно отложить и т.д.

а почему устанавливаемая страница не должна быть больше, чем всего страниц у книги? А количество страниц часто меняется? А что случится, если устанавливаемая страница будет больше, чем страниц у книги?

Alexander
Ну до того как пользователь сможет читать книгу, е...

мысленно представь что когда бизнес говорит "у книги есть ISBN и заголовок" это не значит что у тебя есть сразу сущность книга с полем isbn и title, это так же может значить что у нас есть сущность BookID и сущность ISBN и какой BookDescription.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта