Read models naming

Проверенные VDS на SSD в Европе от $4 и России: Датацентр №1 от 199руб

Тема в разделе "Вопросы по теории программирования", создана пользователем Adelf, 31 окт 2017.

  1. Adelf

    Adelf Laravel&PhpStorm Команда форума

    Сообщения:
    3.124
    Ваш город:
    Казань
    Address:
    Kazan, Russia
    Country:
    Location on Map:
    Я тут начинаю один side-проект. Решил организовать некий CQRS. Write models - доктриновские сущности без геттеров, с методами-глаголами. Read models - обычные классы.
    Если сущность Product, то как назвать read модель с продуктом? Тоже Product? как-то мне это не нравится.
    Я чего-то не понимаю? Литература, ссылки?
     
  2. Вурдалак

    Вурдалак Newbie

    Сообщения:
    6.025
    Ваш город:
    Russia, Moscow
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Я называю просто Product.
     
  3. Adelf

    Adelf Laravel&PhpStorm Команда форума

    Сообщения:
    3.124
    Ваш город:
    Казань
    Address:
    Kazan, Russia
    Country:
    Location on Map:
    ну ок :)
     
  4. Вурдалак

    Вурдалак Newbie

    Сообщения:
    6.025
    Ваш город:
    Russia, Moscow
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Я раньше пытался добавлять суффиксы (-Dto, -ReadModel), но потом понял, что это только мусорит сигнатуры методов, а смысла ноль: я всё равно сущность и read model не могу перепутать.
     
  5. Adelf

    Adelf Laravel&PhpStorm Команда форума

    Сообщения:
    3.124
    Ваш город:
    Казань
    Address:
    Kazan, Russia
    Country:
    Location on Map:
    Ну я думал генерить эвенты передавая туда read модель. Таким образом, она будет создаваться и внутри сущности и из базы. Таким образом единственное место, где будут оба класса - это сам класс сущности. Так, что можно пережить.
    А это нормальная мысль? :)
     
  6. Вурдалак

    Вурдалак Newbie

    Сообщения:
    6.025
    Ваш город:
    Russia, Moscow
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Это типа $this->record(new ArticleWasApproved($this->id, $this->state))? Это очень плохая мысль.
     
  7. Adelf

    Adelf Laravel&PhpStorm Команда форума

    Сообщения:
    3.124
    Ваш город:
    Казань
    Address:
    Kazan, Russia
    Country:
    Location on Map:
    $this->record(new ArticleWasApproved($this->getReadModel()))

    Но вообще, да. Не очень.
    Я говорю об эвентах в понимании laravel. Например
    ArticleWasApproved =>
    ClearArticleCache,
    SendArticleInfoToSomeViralityAPI - вот здесь, допустим, нужна рид модель. Доставать ее из id запросом?
     
  8. Вурдалак

    Вурдалак Newbie

    Сообщения:
    6.025
    Ваш город:
    Russia, Moscow
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Да.

    Это абсурдно хотя бы потому, что сама read model в идеале строится на основе событий модели и необязательно одной. В смысле, там нормально иметь кучу денормализаций, которые как раз не хочется держать в обычной write model. В противном случае возникает вопрос зачем тебе вообще разделение моделей, если у тебя свойства read model замечательно хранятся и вычисляются внутри write model.

    Да и read model может быть несколько.
     
  9. Adelf

    Adelf Laravel&PhpStorm Команда форума

    Сообщения:
    3.124
    Ваш город:
    Казань
    Address:
    Kazan, Russia
    Country:
    Location on Map:
    Это знаю.

    Ну вообще, да. Все-таки не зря основная идея в их полном разделении.
     
  10. fixxxer

    fixxxer К.О. Партнер клуба

    Сообщения:
    12.446
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Если ты можешь легко сделать $this->getReadModel(), то нафига вообще read model-то отдельно? Типа, через промежуточный класс геттеры сразу станут норм? :)
     
    grigori и Adelf нравится это.
  11. флоппик

    флоппик promotor fidei Команда форума Партнер клуба

    Сообщения:
    4.784
    Ваш город:
    Павлодар, Казахстан
    Address:
    Pavlodar, Kazakhstan
    Country:
    Location on Map:
    Дай посмотреть? :D
     
  12. Adelf

    Adelf Laravel&PhpStorm Команда форума

    Сообщения:
    3.124
    Ваш город:
    Казань
    Address:
    Kazan, Russia
    Country:
    Location on Map:
    Пока нечего показывать. Потом, если стыдно не будет.
     
  13. флоппик

    флоппик promotor fidei Команда форума Партнер клуба

    Сообщения:
    4.784
    Ваш город:
    Павлодар, Казахстан
    Address:
    Pavlodar, Kazakhstan
    Country:
    Location on Map:
    Ну мы все знаем, что будет, так какая разница? :D
     
    grigori, fixxxer и Adelf нравится это.
  14. grigori

    grigori ( ͡° ͜ʖ ͡°) Команда форума

    Сообщения:
    6.739
    Ваш город:
    Stormwind
    Address:
    Scottsdale, United States
    Country:
    Location on Map:
    а расскажите для тех, кто в танке, пример когда read model нужна, и чем она отличается от DTO?

    Lля меня первый закон проектирования - бритва Оккама, чистые Value Object считаю бессмысленными, если они не предназначены для передачи как DTO.
    В сущности может содержаться например, валидация - и это уже не read model.
    Интересно увидеть другую логику.
     
  15. Вурдалак

    Вурдалак Newbie

    Сообщения:
    6.025
    Ваш город:
    Russia, Moscow
    Address:
    Moscow, Russia
    Country:
    Location on Map:
  16. fixxxer

    fixxxer К.О. Партнер клуба

    Сообщения:
    12.446
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    @grigori, если тебе так хочется именно техническое, а не семантическое отличие, я только что придумал специально для тебя: DTO сериализуем, а read model - совершенно не обязательно.
     
  17. grigori

    grigori ( ͡° ͜ʖ ͡°) Команда форума

    Сообщения:
    6.739
    Ваш город:
    Stormwind
    Address:
    Scottsdale, United States
    Country:
    Location on Map:
    @Вурдалак, темы все те же. Спасибо за ссылку, кто зайдет сюда - откроет и прочтет.

    по документу по ссылке, read model "специализируется под клиентские запросы", хороша для кеширования, для "денормализации при изменении, а не при каждом запросе" (С).

    Теперь замечание по теме: модель, специализированная для генерации ответов на запросы пользователей, не имеет отношения к модели сущности вроде "Продукт".
    Я понимаю read model вроде "Каточка продукта" с данными о производителе и цене.
     
  18. grigori

    grigori ( ͡° ͜ʖ ͡°) Команда форума

    Сообщения:
    6.739
    Ваш город:
    Stormwind
    Address:
    Scottsdale, United States
    Country:
    Location on Map:
    Давай продолжим мысль: если read model не сериализуется, что она делает, в какой форме выражается результат ее работы?
     
  19. fixxxer

    fixxxer К.О. Партнер клуба

    Сообщения:
    12.446
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    @grigori, чего далеко за примерами ходить? Возьмем этот форум и откроем список постов в любом разделе. Вон там есть количество комментариев, имя автора, последний комментарий. Вот это и есть read model поста. Дальше коллекция этих read models идет во вьюху и рендерится.

    Вот как до всяких фреймворков с активрекордами делали - писали метод, который селектит из базы что надо и возвращает массив (то есть коллекцию) ассоциативных массивов (неявная структура которого и есть read model class).
     
  20. Вурдалак

    Вурдалак Newbie

    Сообщения:
    6.025
    Ваш город:
    Russia, Moscow
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Разные контексты позволяют называть вещи одинаково.
     
    Последнее редактирование: 5 ноя 2017