Нормальный ActiveRecord будет. Это в yii ненормальный.Да ну ладно, что это за AR тогда будет.
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);
}
}
У меня на мобилке кстати все расплылось. На компе норм.Я нарисовал с помощью Monodraw.
Да не, тут особого смысла нет, просто хотел указать, что есть инфраструктура, и что она «сбоку».Разве что, я не очень понимаю почему Domain обращается к Infrastructure. Зачем? @Вурдалак ?
Upd: А. Не обращается, а наоборот, видимо. Инфраструктура достает обьекты из базы например. Ясно.
Не только мусор но и вредная. У чела все в голове смешалось и не разобравшись со всеми терминами и паттернами решил излить свой поток сознания.кстати на хабе прикольная статейка сейчас обсуждается
Кручу-верчу, самого себя обмануть хочу.парень ловко обосновывает аргументы
Так статья этого пациента уже тут на форуме проскальзывала: http://www.yegor256.com/2014/12/01/orm-offensive-anti-pattern.htmlА я недавно видео доклада смотрел. Там человек очень много говорит правильных слов, даже в bullshit bingo можно играть. Идеальная архитектура, True ООП, Single responsibility. Но предлагает такое... что даже стыдно говорить. Да еще и книгу об этом написал. Я не рекомендую это видео смотреть. Но я специально нашел момент со слайдом главного объекта бизнес-логики. Прям любо-дорого глянуть
http://bit.ly/2xwD8Ny
Во всяком адском хайлоаде типа соцсетей похожий "ручной активрекорд" с тюнингованными под конкретные кейсы запросами часто делается. Вот только там все понимают, что это вынужденная мера, а не верх дизайна, ну и это делается в тех местах, где бизнес-логики практически и нет, сплошная инфраструктура да view.А я недавно видео доклада смотрел. Там человек очень много говорит правильных слов, даже в bullshit bingo можно играть. Идеальная архитектура, True ООП, Single responsibility. Но предлагает такое... что даже стыдно говорить. Да еще и книгу об этом написал. Я не рекомендую это видео смотреть. Но я специально нашел момент со слайдом главного объекта бизнес-логики. Прям любо-дорого глянуть
https://youtu.be/ckjAWXJWZEY?t=1526
Помню, 5 лет назад я сделал это добавлением служебного запроса в batch, назвал его meta. Там передавал структуру зависимостей - результат первого в параметры второго, а сами вызовы сохраняются независимыми.Я эту проблему, помнится, решал безо всяких GraphQL небольшой модификацией батчей в jsonrpc2, добавив туда возможности ссылаться в параметрах на результаты другого элемента батча (по ID) и псевдокоманды типа Batch.match/Batch.repeat/Batch.filter.
Конечно, сломал этим независимость элементов батча друг от друга и возможность распараллеливания, но как раз это мне и не надо было совсем.
написал большой пост в той веткеREST действительно ассоциируется с CRUD, мы это уже обсуждали
да что вы говорите! а разделять методы получения и модификации данных не пробовал? моки, фикстуры - не? интеграционные тесты не подходят?Чистый юнит тест для реалий Yii будет непросто сделать
Добавлю, что значение Yii::$app->user->id надо из контроллера передавать в SL как параметр метода. Тогда в SL не будет зависимости от класса User4. Service layer должен быть максимально stateless: никаких Yii::$user, сессий, и прочего «текущего состояния». Если ты захочешь, например, в админке или в консольной команде от имени пользователя отправить сообщение, то должно быть достаточно указать userId. Как ты понимаешь, Yii::$user где-то внутри бизнес-логики будет этому сильно мешать, т.к. его либо не будет, либо он может указывать на другого пользователя (на админа, например).
я много лет не писал на yii, но мне понадобилось 3 клика мышкой и 3 скролла по странице чтобы открыть http://www.yiiframework.com/doc-2.0/yii-test-baseactivefixture.htmlЯ не знаю про устройство Yii AR, но если там нельзя даже сделать new User() без обращения к БД, то просто выкинь это говно. Но я подозреваю, что не все так плохо.
А вообще AR вполне можно тестировать, никто же не заставляет вызывать методы типа save(), нам же методы модели надо протестировать, а не методы AR.