Read models naming

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

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

  1. AnrDaemon

    AnrDaemon Продвинутый новичок

    Сообщения:
    4.098
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Мне интересно, какие события вы используете у read модели?
    Может, мне понравится и я тоже начну так делать?
     
  2. WMix

    WMix герр M:)ller Партнер клуба

    Сообщения:
    5.924
    Ваш город:
    Berlin
    Address:
    Berlin, Germany
    Country:
    Location on Map:
    все которые изменили его состояние или я чтото не понимаю?
    >>> дай корзину
    1. новая корзина,
    2. положили товар
    3. положили товар
    4. изменили колво
    <<< корзина
     
  3. Adelf

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

    Сообщения:
    3.124
    Ваш город:
    Казань
    Address:
    Kazan, Russia
    Country:
    Location on Map:
    @WMix, состояние read модели не меняется. оно вообще immutable.
     
    AmdY, Yoskaldyr и fixxxer нравится это.
  4. fixxxer

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

    Сообщения:
    12.446
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    А, да, вот еще в php не хватает конструкции "public readonly". В typescript очень удобно.

    Вообще CQRS и всякие flux-redux это практически одно и то же.
     
  5. AnrDaemon

    AnrDaemon Продвинутый новичок

    Сообщения:
    4.098
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Если на то пошло, давайте замахнёмся на Дельфёвые property XX read YYY write ZZZ;
     
  6. Adelf

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

    Сообщения:
    3.124
    Ваш город:
    Казань
    Address:
    Kazan, Russia
    Country:
    Location on Map:
    В typescript оно перекочевало из C# :)
    А там много вкусного еще.
    int Id{public get; private set;}

    Это да
     
    Yoskaldyr нравится это.
  7. MiksIr

    MiksIr miksir@home:~$

    Сообщения:
    3.125
    Ваш город:
    Третьяковская, Москва, город Москва, Россия
    Address:
    Moskva, Russia
    Country:
    Location on Map:
    решается с помощью annotate based development и трейтика :)
     
  8. Adelf

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

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

    Upd: Хотя я похоже не понял сарказма :)
     
  9. MiksIr

    MiksIr miksir@home:~$

    Сообщения:
    3.125
    Ваш город:
    Третьяковская, Москва, город Москва, Россия
    Address:
    Moskva, Russia
    Country:
    Location on Map:
    Сарказм сарказмом, а поиск по packagis-у дал пачку таких вот трейтов ;)
     
  10. fixxxer

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

    Сообщения:
    12.446
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    В тайпскрипте так (ну, почти так) тоже можно. Да и в обычном JS можно, только много букв писать.
     
  11. AnrDaemon

    AnrDaemon Продвинутый новичок

    Сообщения:
    4.098
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    У вас работает поиск по packagist? >.< Я вам завидую.
     
  12. WMix

    WMix герр M:)ller Партнер клуба

    Сообщения:
    5.924
    Ваш город:
    Berlin
    Address:
    Berlin, Germany
    Country:
    Location on Map:
    мне показалось, что ты собирался строить состояние модели по событиям
     
  13. Adelf

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

    Сообщения:
    3.124
    Ваш город:
    Казань
    Address:
    Kazan, Russia
    Country:
    Location on Map:
    @WMix, меняется write модель. Она и генерит события. Слушателям же нужна read модель, чтобы получить из нее данные.
     
  14. WMix

    WMix герр M:)ller Партнер клуба

    Сообщения:
    5.924
    Ваш город:
    Berlin
    Address:
    Berlin, Germany
    Country:
    Location on Map:
    Ну все правильно: команды валидируют запрос и пишут события, запрос (квери) читает события и генерит по ним read model. Если события в массиве проецировать, точно накуралесишь. -- нужен обьект.
    на клиенте (для кого модель сделана) типизация уже своя, да и интересует его вырезка (граф), те. перед тем как отдавать, вероятно придется закастить в массив и обрезать лишнее. Или опять не о том думаю?
     
  15. grigori

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

    Сообщения:
    6.739
    Ваш город:
    Stormwind
    Address:
    Scottsdale, United States
    Country:
    Location on Map:
    Думаю, именование, как одна из трех сложных проблем в программировании, заслуживает отдельной темы.
    Отдавать в API "продукт" или "карточку продукта" не должно быть связано с классами программы.
    КомпьютернаяМодельПродукта может появиться для какой-нибудь стратегии, но не в API.
     
  16. grigori

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

    Сообщения:
    6.739
    Ваш город:
    Stormwind
    Address:
    Scottsdale, United States
    Country:
    Location on Map:
    Пытаюсь понять вас. Иногда выходит, что разницы нет. У тебя в понятие "read model" - входит класс модели, который выполняет запрос, или это только сам класс с данными на выходе из модели?
     
  17. grigori

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

    Сообщения:
    6.739
    Ваш город:
    Stormwind
    Address:
    Scottsdale, United States
    Country:
    Location on Map:
    в TypeScript, как и в golang, задача соответствия отфонарных данных интерфейсу решается через duck typing,
    и статическая типизация не нужна для проектирования (@Adelf ) потому что пользовательских типов динамическая типизация не касается

    Что, собственно, мешает писать класс с доступом по __get() ? Дженерики помогают не потерять типизацию, когда коллекция передается в общую функцию с универсальной обработкой данных разных пользовательских типов - а часто ли это надо в userland?
     
    Последнее редактирование: 12 ноя 2017
  18. Вурдалак

    Вурдалак Newbie

    Сообщения:
    6.025
    Ваш город:
    Russia, Moscow
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Ну так read model — это и есть API, только внутренний.

    Грубо говоря, DTO — это commands, queries и read models (ответ на query). Наверное, сюда в каком-то смысле можно отнести и events, т.к. эти сообщения — тоже часть внутренного API приложения. Просто классы с данными к/от service layer.
    DTO — более общий термин, который, менее ценен в дискуссии, как раз в силу своей общности. Ну да, это DTO, то DTO, всё DTO. С таким же успехом можно было всё называть словом «объект», ну а чо.

    DTO — это что-то более техническое, на заре появления этих терминов у программистов уже было понимание, что лучше передавать не кучу аргументов и не запрашивать по одному аргументу, а нужно их как-то группировать. Уже потом появилось понимание, что это сообщения и появились более конкретные и удобные термины. Появилось также понимание, что сообщения — это immutable-объекты (если ты поменял сообщение, то ты получил другое сообщение), а DTO чуть ли не у Фаулера в его PoEAA имеет сеттеры в примерах, т.е. это наивное представление о сути этих объектов. Но терминология эволюционировала, поэтому потребности в термине DTO особо больше нет.

    Это просто класс с данными. Сервис, выполняющий запрос — это query service, он принимает на вход query, а на выходе — read model.
     
    artoodetoo, флоппик, fixxxer и ещё 1-му нравится это.
  19. grigori

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

    Сообщения:
    6.739
    Ваш город:
    Stormwind
    Address:
    Scottsdale, United States
    Country:
    Location on Map:
    вот так уже понятнее, спасибо за подробное объяснение.
    @Adelf в тему RFC по функционалу форума: нужна wiki для составления словаря, для объяснения значений подобного этому.
    самые ценные диалоги оказываются недоступными для понимания, и гуглить "read model" бесполезно - там все еще та самая единственная абстрактная статья
     
    Последнее редактирование: 12 ноя 2017
  20. fixxxer

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

    Сообщения:
    12.446
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    В typescript совсем не так же, как в golang, и оба варианта не совсем duck typing, но это уже совсем оффтопик.

    Happy refactoring, bitches.

    Постоянно надо, когда работаешь с коллекциями в том или ином виде. PhpStorm-овская поддержка PhpDoc вида @return Foo[]|Collection, конечно, выручает, но все же это не на том уровне.
     
    Последнее редактирование: 14 ноя 2017