Пример чистой архитектуры на оценку

Обсуждаем, как правильно строить приложения
Аватара пользователя
BrusSENS
Сообщения: 565
Зарегистрирован: 2012.07.26, 06:51
Откуда: Новороссийск
Контактная информация:

Re: Пример чистой архитектуры на оценку

Сообщение BrusSENS » 2019.10.03, 14:54

ElisDN писал(а):
2019.10.03, 11:55
Есть у нас ещё один "опытный практик", который думал, что он круче всех, а потом в суп попал.
Ясно, аргументы кончились и пошли ссылки на идиотов с левых форумов.
ElisDN писал(а):
2019.10.03, 11:55
Так что делайте как хотите если вы "практик", не осиливший инкапсуляцию, ООП и DDD. Но тогда не спорьте о теории.
Опять слёзы и кидание обидок в виде высеров собственных эмоций. Утрите сопли и перестаньте плакать.
Native Web - небольшой блог о веб разработке (временно на ремонте)
Режим обслуживания сайта для Yii 2.x.x

Аватара пользователя
ElisDN
Сообщения: 5428
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Пример чистой архитектуры на оценку

Сообщение ElisDN » 2019.10.03, 15:01

BrusSENS писал(а):
2019.10.03, 14:43
О нет, не рассказывайте об этом куске, под названием Doctrine. Жутчайший тормоз, работающий через гору костылей.
Тормозит Doctrine только у "курильщиков", пытающихся вкорячить её для выборок. У "здоровых программистов" проблем с ней нет.

Аватара пользователя
ElisDN
Сообщения: 5428
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Пример чистой архитектуры на оценку

Сообщение ElisDN » 2019.10.03, 15:22

BrusSENS писал(а):
2019.10.03, 14:54
Опять слёзы и кидание обидок в виде высеров собственных эмоций. Утрите сопли и перестаньте плакать.
Где же тут слёзы? Это конкретная и обоснованная констатация факта по вашему коду, что вы не понимаете суть инкапсуляции и ООП. Можете на нас хоть целый год обижаться и ср*ться - объективная реальность от этого не изменится.
BrusSENS писал(а):
2019.10.03, 14:43
Опять Вы видимо не поняли о чём Вам говорят. Почитайте посты ещё несколько раз, мб мозг заработает, а то серое вещество видать застоялось от постоянного штудирования теории.
Не осилили инкапсуляцию, ни одного нашего примера не поняли и начали агриться, что мы все "теоретики" - ваше дело.

Не осилить теорию и поэтому притвориться что вы практик и нарушаете всё по уму, а не по незнанию - хорошая отмазка.

Разойдёмся на этом.

anton_z
Сообщения: 440
Зарегистрирован: 2017.01.15, 15:01

Re: Пример чистой архитектуры на оценку

Сообщение anton_z » 2019.10.03, 15:57

ElisDN писал(а):
2019.10.03, 15:01
У "здоровых программистов" проблем с ней нет.
Ну да, либо работает, либо не юзают. Проблем нет :D

Аватара пользователя
ElisDN
Сообщения: 5428
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Пример чистой архитектуры на оценку

Сообщение ElisDN » 2019.10.03, 17:05

anton_z писал(а):
2019.10.03, 15:57
Ну да, либо работает, либо не юзают. Проблем нет :D
Ну а какие у неё тормоза?

Аватара пользователя
samdark
Администратор
Сообщения: 9198
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Пример чистой архитектуры на оценку

Сообщение samdark » 2019.10.03, 17:47

С доктриной есть проблемы и не мало. В том числе производительность. Но юзать её можно.

Аватара пользователя
BrusSENS
Сообщения: 565
Зарегистрирован: 2012.07.26, 06:51
Откуда: Новороссийск
Контактная информация:

Re: Пример чистой архитектуры на оценку

Сообщение BrusSENS » 2019.10.03, 20:30

ElisDN писал(а):
2019.10.03, 15:22
Где же тут слёзы? Это конкретная и обоснованная констатация факта по вашему коду, что вы не понимаете суть инкапсуляции и ООП. Можете на нас хоть целый год обижаться и ср*ться - объективная реальность от этого не изменится.

Не осилили инкапсуляцию, ни одного нашего примера не поняли и начали агриться, что мы все "теоретики" - ваше дело.

Не осилить теорию и поэтому притвориться что вы практик и нарушаете всё по уму, а не по незнанию - хорошая отмазка.

Разойдёмся на этом.
Притвориться, не осилили, отмазки... Спуститесь на землю и чутка подстригите своё чсв. Идите дальше уроки для "недалёких" создавайте по "правильному ООП". Хамить из принципа не буду, ибо таких, как Вы частенько встречаю. Всё по теории делают, а на практике в 90% обделываются. ТС, кстати, судя по всему один из Ваших адептов, раз не удосужились человеку объяснить то, что AR и Repo не вообще не должны готовиться вместе. И Вы мне потом про инкапсуляцию будете рассказывать и про ООП в целом.
По факту придрались к коду, который тупо был написан на коленке за пару минут для примерного объяснения своих мыслей. Академическим его никто не называл, был только посыл выразить мысли. Замечу, Вы придрались именно к моему примеру. ТСу ничего не сказали по поводу его кода, в котором вообще нет понимания, что он делает. А почему? Потому что один из Ваших адептов. Коммерция, понимаю, ничего личного.
По коду:
Инкапсулировать коллекцию не вижу смысла, если тут встаёт вопрос гибкости. Мне удобнее из сущности дёрнуть коллекцию в репозитории, что бы при сохранении агрегата его спокойно сохранить, имея состояние, а не с массивом мудохаться. Представляете, у меня коллекция даже может принять Criteria объект, для фильтрации. Мне не нужно иметь 100500 сущностей для проксирования и подобных штук. Прокси зло и за это по рукам нужно бить. А Вы учите этому новичков. Если от инкапсуляции нет толку - то это просто бред педанта. А в приведённом Вами примере толку как-раз ноль. Красиво - да. Скрыто - да. Но а толку? Программа работать по другому стала? Нет. Посему просто поумничали перед армией своих адептов, пытаясь показать, какой Вы крутой. А оказалось король то голый.
Native Web - небольшой блог о веб разработке (временно на ремонте)
Режим обслуживания сайта для Yii 2.x.x

Аватара пользователя
BrusSENS
Сообщения: 565
Зарегистрирован: 2012.07.26, 06:51
Откуда: Новороссийск
Контактная информация:

Re: Пример чистой архитектуры на оценку

Сообщение BrusSENS » 2019.10.03, 20:31

ElisDN писал(а):
2019.10.03, 15:01
Тормозит Doctrine только у "курильщиков", пытающихся вкорячить её для выборок. У "здоровых программистов" проблем с ней нет.
Вы сейчас серьёзно?)
Native Web - небольшой блог о веб разработке (временно на ремонте)
Режим обслуживания сайта для Yii 2.x.x

Аватара пользователя
BrusSENS
Сообщения: 565
Зарегистрирован: 2012.07.26, 06:51
Откуда: Новороссийск
Контактная информация:

Re: Пример чистой архитектуры на оценку

Сообщение BrusSENS » 2019.10.03, 20:58

samdark писал(а):
2019.10.03, 17:47
С доктриной есть проблемы и не мало. В том числе производительность. Но юзать её можно.
Доктрина с её производительностью и потреблением ресурсов - это просто извращение. Я вот смотрю, что среди PHP разработчиков большая часть просто плюёт на то, сколько ресурсов потребляет приложения и диву даюсь. Мне вот интересно, во всех компаниях так плюют на такое похабное отношение к потребляемым ресурсам? У всех в облаках всё что ли работает?
Native Web - небольшой блог о веб разработке (временно на ремонте)
Режим обслуживания сайта для Yii 2.x.x

Аватара пользователя
ElisDN
Сообщения: 5428
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Пример чистой архитектуры на оценку

Сообщение ElisDN » 2019.10.04, 00:10

BrusSENS писал(а):
2019.10.03, 20:30
Притвориться, не осилили, отмазки... Спуститесь на землю и чутка подстригите своё чсв.
Вам четыре человека сказали, что вы дичь несёте. Ну правда вы не осилили. Смиритесь.
BrusSENS писал(а):
2019.10.03, 20:30
Идите дальше уроки для "недалёких" создавайте по "правильному ООП". Хамить из принципа не буду, ибо таких, как Вы частенько встречаю. Всё по теории делают, а на практике в 90% обделываются.
Да нет, не обделываются. Нормально работают. Здесь только вам "плакать и смеяться" хочется.
BrusSENS писал(а):
2019.10.03, 20:30
ТС, кстати, судя по всему один из Ваших адептов, раз не удосужились человеку объяснить то, что AR и Repo не вообще не должны готовиться вместе.
А с чего мне ему эту вашу ещё одну дичь объяснять? Это AR и DM не должны. А Repo + DM и Repo + AR вполне можно приготовить, так как на внутренность Repo никаких ограничений не накладывается. А если не нравится именно слово Repo, то можно его в какой-нибудь Manager переименовать.
BrusSENS писал(а):
2019.10.03, 20:30
По факту придрались к коду, который тупо был написан на коленке за пару минут для примерного объяснения своих мыслей. Академическим его никто не называл, был только посыл выразить мысли.
Мы так и сказали, что ваш код тупой и как на коленке. А умного кода чтоб вас похвалить вы нам вместо него не написали. Так что тогда на правду о тупом коде обижаетесть?
BrusSENS писал(а):
2019.10.03, 20:30
Замечу, Вы придрались именно к моему примеру. ТСу ничего не сказали по поводу его кода, в котором вообще нет понимания, что он делает. А почему? Потому что один из Ваших адептов.
Ой как вы немешкиворочить умеете. Я почти пять сообщений с придирками к его коду сочинил до того, как вы к нам вломились с "перестал верить в бред, о крутых приложениях c DDD" и "DDD не место в PHP", за что были по инерции сразу посланы... опять в Википедию.
BrusSENS писал(а):
2019.10.03, 20:30
Инкапсулировать коллекцию не вижу смысла, если тут встаёт вопрос гибкости. Мне удобнее из сущности дёрнуть коллекцию в репозитории, что бы при сохранении агрегата его спокойно сохранить, имея состояние, а не с массивом мудохаться.
Сериализуете сущность через геттеры? Тогда понятно.
BrusSENS писал(а):
2019.10.03, 20:30
Представляете, у меня коллекция даже может принять Criteria объект, для фильтрации.
Представляете, но у меня тоже.
BrusSENS писал(а):
2019.10.03, 20:30
Если от инкапсуляции нет толку - то это просто бред педанта. А в приведённом Вами примере толку как-раз ноль. Красиво - да. Скрыто - да. Но а толку? Программа работать по другому стала? Нет. Посему просто поумничали перед армией своих адептов, пытаясь показать, какой Вы крутой.
Сами ругаетесь на применение DDD в бложиках и сами тут же примеры приводите из бложика.

Да, моя программа с инкапсуляцией по-другому работать стала:

- Закрытый пост новые комментарии не принимает.
- События добавления комментариев генерируются.
- Статистика внутри сущности пересчитывается.
- Код проверок не надо копипастить в юзкейсы.
- Отлично работает самоинкапсуляция.
- Тесты идеально всё вышесказанное проверяют.
- Тесты проще, так как тестируют метод сущности, а не весь юзкейс.
- Джуны через getComments()->add(...) не нагадят.
- Волосы оунера нежные и шелковистые, а не седые.

Толку целых девять пунктов. #КакТебеТакоеИлонМаск?
Последний раз редактировалось ElisDN 2019.10.04, 00:25, всего редактировалось 1 раз.

Аватара пользователя
ElisDN
Сообщения: 5428
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Пример чистой архитектуры на оценку

Сообщение ElisDN » 2019.10.04, 00:24

BrusSENS писал(а):
2019.10.03, 20:31
ElisDN писал(а):
2019.10.03, 15:01
Тормозит Doctrine только у "курильщиков", пытающихся вкорячить её для выборок. У "здоровых программистов" проблем с ней нет.
Вы сейчас серьёзно?)
Я всегда серьёзно.
BrusSENS писал(а):
2019.10.03, 20:58
Доктрина с её производительностью и потреблением ресурсов - это просто извращение. Я вот смотрю, что среди PHP разработчиков большая часть просто плюёт на то, сколько ресурсов потребляет приложения и диву даюсь. Мне вот интересно, во всех компаниях так плюют на такое похабное отношение к потребляемым ресурсам? У всех в облаках всё что ли работает?
Что с AR отправка комментария потребляет два-четыре мегабайта, что с Doctrine.

У "здоровых программистов" ORM работает только в домене на запись и не используется для чтения. А "курильщики" – ССЗБ.

Аватара пользователя
maleks
Сообщения: 1786
Зарегистрирован: 2012.12.26, 12:56

Re: Пример чистой архитектуры на оценку

Сообщение maleks » 2019.10.04, 07:13

BrusSENS писал(а):
2019.10.03, 20:30
ТСу ничего не сказали по поводу его кода, в котором вообще нет понимания, что он делает. А
Если б вы удосужились прочитать что то про "чистую архитектуру", например по той ссылке что в первом посте, тогда может быть и увидели б что я пытаюсь сделать.

p.s. Раз по существующей реализации уже нет новых предложений, то на следующей неделе попробую ее потестить на большем наборе задач и бизнес логики.

Аватара пользователя
maleks
Сообщения: 1786
Зарегистрирован: 2012.12.26, 12:56

Re: Пример чистой архитектуры на оценку

Сообщение maleks » 2019.10.04, 07:41

BrusSENS писал(а):
2019.10.03, 14:32
anton_z писал(а):
2019.10.03, 09:22
Нет, он не бесполезный, если бьть точным. Его инжектить можно и мокнуть потом. Таким образом код, которорый зависит от таких репов можно будет тестить без базы:
Имхо, самое ненормальное в коде, когда она пишется для тестов, а не для того, что бы нормально работать.
Вы про TDD не слышали никогда?
Как раз наоборот качество кода становится приличным когда он пишется так что его легко тестировать.

Вот из одной из книг:
The trick is to let our tests drive our design (that’s why it’s called test-driven
development). TDD is about testing code, verifying its externally visible qualities
such as functionality and performance. TDD is also about feedback on the code’s
internal qualities
: the coupling and cohesion of its classes, dependencies that are
explicit(явный) or hidden, and effective information hiding—the qualities that keep the
code maintainable.

anton_z
Сообщения: 440
Зарегистрирован: 2017.01.15, 15:01

Re: Пример чистой архитектуры на оценку

Сообщение anton_z » 2019.10.04, 14:41

Фух, наконец руки дошли написать свой вариант примера.
Смотрите. Соображения по архитектуре в README.md.

Аватара пользователя
yiijeka
Сообщения: 3068
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Пример чистой архитектуры на оценку

Сообщение yiijeka » 2019.10.04, 15:28

Вся проблема в том, что придёт новый программист и 99% что он заюзает $post = new Post; if ( $post-load() && $post->save()) и вся ваша clean архитектура идёт лесом, так как она в корне уже имеет проблемы - публичный API.

Только сущность POST можно создать кучей способов :
- (new Post)->save()
- (new CreatePostForm)->create()
- (new PostSearch)->save()
- (new PostFactory)->create()
- (new Post)->create()
- (new Query)->insert ..
- придумай свой, к которому привык

ИМХО чистая архитектура - одна задача - один способ ...

Wizard
Сообщения: 173
Зарегистрирован: 2018.02.05, 13:41
Контактная информация:

Re: Пример чистой архитектуры на оценку

Сообщение Wizard » 2019.10.04, 21:04

maleks писал(а):
2019.10.04, 07:41
Вы про TDD не слышали никогда?
Как раз наоборот качество кода становится приличным когда он пишется так что его легко тестировать.

Вот из одной из книг:
The trick is to let our tests drive our design (that’s why it’s called test-driven
development). TDD is about testing code, verifying its externally visible qualities
such as functionality and performance. TDD is also about feedback on the code’s
internal qualities
: the coupling and cohesion of its classes, dependencies that are
explicit(явный) or hidden, and effective information hiding—the qualities that keep the
code maintainable.
в другой написано это
Тестирование не повышает качество ПО – оно указывает на качество программы, но не влияет на него. Стремление повысить качество ПО за счет увеличения объема тестирования подобно попытке снижения веса путем более частого взвешивания. То, что вы ели, прежде чем встать на весы, определяет, сколько вы будете весить, а использованные вами методики разработки ПО определяют, сколько ошибок вы обнаружите при тестировании. Если вы хотите снизить вес, нет смысла покупать новые весы – измените вместо этого свой рацион. Если вы хотите улучшить ПО, вы должны не тестировать больше, а программировать лучше.

Аватара пользователя
ElisDN
Сообщения: 5428
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Пример чистой архитектуры на оценку

Сообщение ElisDN » 2019.10.04, 22:00

Wizard писал(а):
2019.10.04, 21:04
в другой написано это
Пример не очень корректный. Если каждый день взвешиваешься, то волей-неволей об этом помнишь и изменения видишь. И начинаешь следить за рационом и от этого хоть на сто 0,1 кг в неделю/месяц, но худеешь.

А если взвешиваться лишь в новогоднюю ночь с мыслью "уж в следующем-то году точно похудею" или вообще никогда, то результата точно никакого не будет.

Так и тесты. Если их сочинять до или во время написания кода, то и в ТЗ досконально изучишь, и будущий код заранее точнее продумаешь, и классы потом удобные для тестирования напишешь.

Wizard
Сообщения: 173
Зарегистрирован: 2018.02.05, 13:41
Контактная информация:

Re: Пример чистой архитектуры на оценку

Сообщение Wizard » 2019.10.04, 22:09

ElisDN писал(а):
2019.10.04, 22:00
Wizard писал(а):
2019.10.04, 21:04
в другой написано это
Пример не очень корректный. Если каждый день взвешиваешься, то волей-неволей об этом помнишь и изменения видишь. И начинаешь следить за рационом и от этого хоть на сто 0,1 кг в неделю/месяц, но худеешь.

А если взвешиваться лишь в новогоднюю ночь с мыслью "уж в следующем-то году точно похудею" или вообще никогда, то результата точно никакого не будет.

Так и тесты. Если их сочинять до или во время написания кода, то и в ТЗ досконально изучишь, и будущий код заранее точнее продумаешь, и классы потом удобные для тестирования напишешь.
Дмитрий, но все же это не гарантия качественного кода. Да возможно он будет работать правильно, соответствовать требованиям. Само по себе понятие качества очень абстрактное. У ПО есть ряд характеристик, баланс между которыми и определяет то самое качество. А тесты если и оказывают какое то влияние то не значительное

Аватара пользователя
ElisDN
Сообщения: 5428
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Пример чистой архитектуры на оценку

Сообщение ElisDN » 2019.10.05, 00:19

Wizard писал(а):
2019.10.04, 22:09
Дмитрий, но все же это не гарантия качественного кода. Да возможно он будет работать правильно, соответствовать требованиям.
У фреймворка Yii есть 6338 тестов практически для каждого класса. И они автоматически запускаются при каждом пуше и пулл-реквесте на семи версиях PHP и проверяют работу ActiveRecord в нескольких БД. При разработке новых фич и при обнаружении багов сразу же добавляется новые тесты, соответствующие фрагменты покрывающие.

И эти тесты сейчас – единственная реальная гарантия того, что код работает более-менее корректно. Так как вручную полностью проверить всю систему даже раз в месяц никто не в состоянии.

С имеющимися тестами можно сразу понять, сломалось ли что-нибудь после composer update. И они позволяют пять лет принимать коммиты от сотен программистов, не боясь что-то сломать.

И после выхода PHP 7.4 или 8.0 можно будет просто запустить все эти тесты на них и сразу увидеть, какие места сломались.

Так что и соответствие ТЗ тестами проверяются, и регрессии быстро обнаруживаются, и обновлять вендоры и версию PHP легко, и внутренности рефакторить можно спокойно, и джунов в проект впускать не так страшно.

А если бы во фреймворк коммитили сто программистов наугад без тестов... то это была бы совсем другая история.
Wizard писал(а):
2019.10.04, 22:09
Само по себе понятие качества очень абстрактное. У ПО есть ряд характеристик, баланс между которыми и определяет то самое качество. А тесты если и оказывают какое то влияние то не значительное
Вот мой живой пример того, что мне даёт тестирование и как это влияет на мой код.

Интеграционными тестами я проверил все комбинации, чтобы не приходилось их прокликивать вручную.

Продумывание юнит-тестов привело к написанию компонента из слабосвязанных юнитов. А если б тесты сочинять не пришлось, то бы просто накидал наугад без разбора кучу из if-ов в статический метод.

anton_z
Сообщения: 440
Зарегистрирован: 2017.01.15, 15:01

Re: Пример чистой архитектуры на оценку

Сообщение anton_z » 2019.10.05, 01:00

yiijeka писал(а):
2019.10.04, 15:28
так как она в корне уже имеет проблемы - публичный API.

ИМХО чистая архитектура - одна задача - один способ ...
Безусловно, жесткий API это тоже бывает хорошо, но надо работать с тем что есть, а не так что "это все хрень, на 100% хорошая архитектура не получится, поэтому будем делать как попало, либо все выкинем и перепишем на фрейме X", поэтому и ищем решения).

Для меня публичный API это не проблема, а возможности))) Гайдлайны соблюдают программисты - соблюдают, почему бы и архитектурные правила туда не включить и не следить за этим. Нет такого кода, который позволял бы не проверять за новым программистом). Одна задача - один способ, хм, все люди разные и думают по разному. Едва ли без соглашений и разъяснений на одном коде это можно реализовать.

P.S. не слишком ли много сейчас на код взваливают - помимо того, что он должен решать задачу быть несложным и протестированным (это нормально, все что дальше ИМХО оверхед), он еще должен быть самодокументируемым, да еще и способствовать обучению и погружению новых членов команды. Не много ли мы от своего кода хотим?

Ответить