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

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

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

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

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

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

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

10 ответов

7 просмотров

почему инвариант не гарантирован во втором случае? штука, которая инстанцирует сессию должна проверять инварианты, мне кажется. 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.

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

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

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
короче сгенерила мне эта штука код на ассемблере: struc string val { common local .value dq .value .value: if ~val eq db val end if db 0 } fo...
Vi Chapmann Chapmann
12
Всем привет! Массив вводится с клавиатуры, кол-во элементов неизвестно, поэтому я указал arr db 100 dup(?) С нахождением максимума проблем нет, а вот минимум почему-то всегд...
En Vind Av Sorg
11
кто шарит: mattermost отслеживает что ты на пк запускаешь?
Valentin
13
Помогите, пожалуйста, делаю программу для для подсчёта корней квадратного уравнения, знаю, что есть куча недочётов, недоработок, но основная проблема в том, что почему-то при ...
NYC
13
#include <stdio.h> int main(void) { int n; scanf("%d", &n); int digits1[n] = {0}; int digits2[n] = {0}; я не могу таким образом заранее массив нулями заполнить?
Linus
12
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
читать файл максимально быстро? странный вопрос))
zamtmn
53
я про форму записи. смысл указывать что 8 байтный регистр 8 байт?
Aiwan \ (•◡•) / _bot
10
Вроде бы вопрос уже заезжанный, но тем не менее У меня есть функция menu() которая выводит набор возможных действий, а затем спрашивает у пользователя что он хотел бы сделать....
David Golovatin
5
Карта сайта