Ale
а еще можно в UoW мапить)
Sergey
угу)
Ilya
Больше классов богу классов
Ale
data mapper для бедных
Sergey
да нет, старый добрый row data gateway
Sergey
таким как его задумывали
Sergey
до этих всяких active record рубистов
Ale
если в UoW, то получится таки для бедных
Sergey
почему? ты можешь спокойно делать data mapper без UoW
Sergey
UoW тебе нужен тупо что бы persistance ignorance делать
Ale
хммм
Ale
ну с последним я согласен
Ale
а с первым
Sergey
сегодня на собесе чувак рассказывал как он на zend2 делал через table gateway дата мэппер но без uow
Ale
ого
Ale
в смысле он случайно так сделал или намеренно?)
Sergey
ну точнее не он лично... команда
Sergey
ну они так решили
Sergey
им мол gateway лучше было
Sergey
просто у тебя в "репозиториях появляется метод update/save`
Ale
ну необязательно в репозиториях так-то
Sergey
ну в гейтвее
Sergey
короч не суть
Ale
ну да
Sergey
он
Sergey
был же ORM
Sergey
passive record
Sergey
там дата мэппер но без UoW
Sergey
Atlas ORM или как-то так
Ilya
Унаследоваться проще и удобнее чем использовать отдельные объекты для каждой мелочи. Принцип единственной обязанности можно так вообще до абсурда довести, давайте отдельный объект для сохранения каждого поля юзера, отдельный для получения каждого поля юзера и отдельный для обновления каждого поля юзера
Sergey
ты когда-нибудь суппортил легаси проект, где все расширение функционала происходило через наследование?
Ilya
Постоянно
Sergey
и неужели ты не чувствуешь боли?
Ilya
Нет
Ale
важно, чтобы требования менялись
Sergey
а ты работал с проектами где было подругому?
Sergey
да
Sergey
требования менялись? было такое что прилетали изменения в требованиях которые все порят и приходится лепить кастыли или трейты?
Ilya
Ну да
Sergey
тесты я так понимаю ты не пишешь, потому забудем о них
Ilya
Почему же
Sergey
были ли у тебя регрессии, связанные с тем, что ты изменил что-то в цепочке наследования, и где-то что-то отвалилось?
Ilya
Нет, слежу за этим
Sergey
Ну да
то есть, боль таки есть?
Ale
вообще, надо понимать зачем все. Вопрос в простом внесении изменений. Если в вашу бизнес-логику идет много изменений, то ее надо хорошо покрывать спеками, если хорошо покрывать спеками, то их много, если их много, то они медленно гоняются из-за количества. Если ваша бл еще трубует какую-то лишнюю инфраструктуру(базу, http, fs), то еще в тестах идут задержки и на эту ерунду
Sergey
или ты во всем винишь "авторов изменений"?
Sergey
Нет, слежу за этим
как так то? А баги кто фиксит?
Ilya
Никого не виню, принимаю как естественный процесс мироздания
Ale
Нет, слежу за этим
а сколько SLOC в проекте? Именно вашего кода, который поддерживаете, а не 3rd
Ilya
Баги и костыли всегда были и будут независимо от модели разработки
Sergey
в целом да - главное уяснить что если требования меняются часто (у меня например недавно был проект где требования менялись несколько раз в неделю причем клиент скрывал от нас часть своих планов, либо просто не знал что ему нужно)
Sergey
Баги и костыли всегда были и будут независимо от модели разработки
да, так и есть. Вопрос в том, как минимизировать ущщерб
Sergey
если у тебя требования прописаны от и до, и никаких изменений - то фигачь как хочешь, все будет ок
Sergey
тут как раз подходы в духе "наследуй воруй убивай" работают только в путь
Sergey
тот же Yii как пример)
Sergey
а если требования меняются часто? Или ты понятия не имеешь на данный момент что на что влияет, то нужно вводить избыточность, дробление (декомпозиция если по другому)
Sergey
что бы минимизировать риски
Ale
тут как раз подходы в духе "наследуй воруй убивай" работают только в путь
ну если требований так много, что все за раз в голову не влазят, то тут все-таки не покатит. Потому что по сути изменения требований здесь что-то аналогичное прочтению следующего тома документации)
Sergey
короч
Sergey
декомпозиция
Sergey
разделение обязанностей
Sergey
управление связанностью
Sergey
все ради этого
Sergey
иногда можно и понаследовать, никто ж не говорит что это всегоа плохо, это не нужно просто
Sergey
маленькую
Sergey
У тебя есть классы Human, Student, Teacher.
Sergey
опиши как сделать так, что бы можно было сделать студента Васю и учителя Марью Ивановну
🐴
new Human('Вася', new Strategy\Student());
Sergey
да блин
Sergey
ты все сломал
Ale
он знал))
Sergey
я ж хотел что бы он наследование замутил(
🐴
я предположил
Sergey
что бы я потом "а теперь сделай что бы Марья отчислила Васю и тот стал солдатом"
Sergey
или "а теперь перенесемся в 41-ый век и преподавать будет робот"
🐴
$vasya->setStrategy(new Strategy\Soldier());
Ale
фу, setter