как Разбивать базу проекта на Domain и Application Logic

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

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

  1. ivanov77

    ivanov77 Новичок

    Сообщения:
    52
    Ваш город:
    South Pole
    Address:
    Fort Lee, United States
    Country:
    Location on Map:
    Интересно. Не видел раньше такой схемки, откуда она?
     
  2. Вурдалак

    Вурдалак Newbie

    Сообщения:
    5.974
    Ваш город:
    Russia, Moscow
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Я нарисовал с помощью Monodraw.
     
  3. fixxxer

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

    Сообщения:
    12.354
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Нормальный ActiveRecord будет. Это в yii ненормальный. :)

    ActiveRecord - это entity + mapper в одном классе, ничего более. ActiveRecord не означает анемичность модели. Другое дело, что провоцирует на это.

    Можно, например, взять тот же Analogue ORM и легким движением руки сделать из него ActiveRecord (маппинг "на лету" сгенерировать чуть сложнее, но это не суть, это опустим):

    PHP:
    abstract class ActiveRecord {

          public static function 
    find($id) {
               return 
    ORM\Manager::getInstance()->mapper(get_called_class())->findOrFail($id);
          }

          public function 
    save() {
               
    ORM\Manager::getInstance()->mapper(get_called_class())->store($this);
          }

          public function 
    delete() {
               
    ORM\Manager::getInstance()->mapper(get_called_class())->delete($this);
          }

    }
    Другое дело, что тут возникает вопрос - а нафига вообще этот ActiveRecord, если от него никакой пользы, окромя вреда. Это правильный вопрос. :)
     
    Последнее редактирование: 9 окт 2017
  4. Adelf

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

    Сообщения:
    3.075
    Ваш город:
    Казань
    Address:
    Kazan, Russia
    Country:
    Location on Map:
    У меня на мобилке кстати все расплылось. На компе норм.

    @fixxxer, в идеале да, все так как ты описал. Но все реализации AR с которыми доводилось работать лезут в базу при каждом чихе. Lazy-loading -тут понятно. Но и добавить новую сущность в коллекцию manyToMany или hasMany - нормально не получится. Сразу летит insert в базу. Хотя в идеале оно должно в save() весь DML делать. Так что тестить AR модели - то еще зло. Приходится извращаться, и да => Anemic :)

    @ivanov77, Вурдалак все правильно изложил. Я тоже хотел, но у меня вышло бы длиннее, от того и поленился :) Разве что, я не очень понимаю почему Domain обращается к Infrastructure. Зачем? @Вурдалак ?
    Upd: А. Не обращается, а наоборот, видимо. Инфраструктура достает обьекты из базы например. Ясно.
     
  5. Вурдалак

    Вурдалак Newbie

    Сообщения:
    5.974
    Ваш город:
    Russia, Moscow
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Да не, тут особого смысла нет, просто хотел указать, что есть инфраструктура, и что она «сбоку».
     
  6. WMix

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

    Сообщения:
    5.847
    Ваш город:
    Berlin
    Address:
    Berlin, Germany
    Country:
    Location on Map:
    кстати на хабе прикольная статейка сейчас обсуждается
     
    ivanov77 нравится это.
  7. Вурдалак

    Вурдалак Newbie

    Сообщения:
    5.974
    Ваш город:
    Russia, Moscow
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Да обычный мусор, а не статья.
     
    fixxxer и Yoskaldyr нравится это.
  8. Yoskaldyr

    Yoskaldyr Новичок Партнер клуба

    Сообщения:
    404
    Ваш город:
    Varna, Bulgaria
    Address:
    Varna, Bulgaria
    Country:
    Location on Map:
    Не только мусор но и вредная. У чела все в голове смешалось и не разобравшись со всеми терминами и паттернами решил излить свой поток сознания.
     
    fixxxer нравится это.
  9. WMix

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

    Сообщения:
    5.847
    Ваш город:
    Berlin
    Address:
    Berlin, Germany
    Country:
    Location on Map:
    Ну, так се, вредная, ее заплюсили.. я в код сильно не вдумывался, но парень ловко обосновывает аргументы. Чтоб там небыло, есть интересные моменты
     
  10. Adelf

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

    Сообщения:
    3.075
    Ваш город:
    Казань
    Address:
    Kazan, Russia
    Country:
    Location on Map:
    А я недавно видео доклада смотрел. Там человек очень много говорит правильных слов, даже в bullshit bingo можно играть. Идеальная архитектура, True ООП, Single responsibility. Но предлагает такое... что даже стыдно говорить. Да еще и книгу об этом написал. Я не рекомендую это видео смотреть. Но я специально нашел момент со слайдом главного объекта бизнес-логики. Прям любо-дорого глянуть :)

    https://youtu.be/ckjAWXJWZEY?t=1526
     
    Последнее редактирование: 10 окт 2017
  11. fixxxer

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

    Сообщения:
    12.354
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Кручу-верчу, самого себя обмануть хочу.
     
  12. Вурдалак

    Вурдалак Newbie

    Сообщения:
    5.974
    Ваш город:
    Russia, Moscow
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Так статья этого пациента уже тут на форуме проскальзывала: http://www.yegor256.com/2014/12/01/orm-offensive-anti-pattern.html
    Адская некомпетентность. Но видимо своим видом он внушает доверие у неподготовленных слушателей/читалей.
    Что ж, гомеопаты среди программистов тоже есть и по всей видимости у него есть своя целевая аудитория.

    Правда там в комментах написано, что его «негативно восприняли», поэтому с удовольствием посмотрю ответы на вопросы как-нибудь :)
     
  13. fixxxer

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

    Сообщения:
    12.354
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Во всяком адском хайлоаде типа соцсетей похожий "ручной активрекорд" с тюнингованными под конкретные кейсы запросами часто делается. Вот только там все понимают, что это вынужденная мера, а не верх дизайна, ну и это делается в тех местах, где бизнес-логики практически и нет, сплошная инфраструктура да view.
     
  14. Вурдалак

    Вурдалак Newbie

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

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

    Сообщения:
    12.354
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    А, точно. Тогда непонятно, нафига вообще тогда этот класс-то с единственным this.id, можно и статикой все сделать с таким же успехом.
     
  16. Вурдалак

    Вурдалак Newbie

    Сообщения:
    5.974
    Ваш город:
    Russia, Moscow
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Он сделал сеттер TransactionScript::setId(). И назвал это «sql speaking object». И написал книгу, выступает на конференциях. Своего рода Евгений Попов в мире архитектуры.
     
    fixxxer и Adelf нравится это.
  17. grigori

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

    Сообщения:
    6.671
    Ваш город:
    Stormwind
    Address:
    Scottsdale, United States
    Country:
    Location on Map:
    Помню, 5 лет назад я сделал это добавлением служебного запроса в batch, назвал его meta. Там передавал структуру зависимостей - результат первого в параметры второго, а сами вызовы сохраняются независимыми.

    написал большой пост в той ветке :)
     
  18. grigori

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

    Сообщения:
    6.671
    Ваш город:
    Stormwind
    Address:
    Scottsdale, United States
    Country:
    Location on Map:
    да что вы говорите! а разделять методы получения и модификации данных не пробовал? моки, фикстуры - не? интеграционные тесты не подходят?
     
    Последнее редактирование: 12 окт 2017 в 06:42
  19. grigori

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

    Сообщения:
    6.671
    Ваш город:
    Stormwind
    Address:
    Scottsdale, United States
    Country:
    Location on Map:
    Добавлю, что значение Yii::$app->user->id надо из контроллера передавать в SL как параметр метода. Тогда в SL не будет зависимости от класса User
     
  20. grigori

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

    Сообщения:
    6.671
    Ваш город:
    Stormwind
    Address:
    Scottsdale, United States
    Country:
    Location on Map:
    я много лет не писал на yii, но мне понадобилось 3 клика мышкой и 3 скролла по странице чтобы открыть http://www.yiiframework.com/doc-2.0/yii-test-baseactivefixture.html