
Антон
01.04.2018
10:58:24
потому что любое малейшее изменение бизнес логики заставляет искать во многих местах, и править код
тогда как при правильной архитектуре, такого бы не было
практически всегда в
в этом классе на 4к строк

Google

Alexander
01.04.2018
10:59:21
именно в этом методе на 500 строк?
метрика, кстати, зовётся code churn

Антон
01.04.2018
10:59:38
именно в этом классе из 37 методов
и нескольких по 500 строк
это основная сущность - заявка. много статусов и состояний
до этого я работал на другом проекте, где были мелкие методы, все изолированно. и правки внедрялись быстро, тесты было легко поддерживать

Ilya
01.04.2018
11:01:10

Антон
01.04.2018
11:01:13
а тут и с тестами беда начинается
и много мест где Order::find... дублируется
и я понимаю как можно сделать правильно. выделить скоуп запросы, их назвать по сути бизнеса
в yii вроде это activeQuery
переместить все запросы в модели, очень сильно сократится дублирование. Уже профит. Это позволит реффакторить дальше

Google

Ilya
01.04.2018
11:05:27

Vit
01.04.2018
11:05:42

Ilya
01.04.2018
11:05:53
Всё правильно говоришь

Антон
01.04.2018
11:05:56
в смысле папка?

Alexander
01.04.2018
11:06:58
я просто про то, что начинать надо с подсчёта churn

Vit
01.04.2018
11:07:04

Alexander
01.04.2018
11:07:11
и вычищать самое больное в первую очередь

Антон
01.04.2018
11:07:23
Order (ar модель. анемичная) ->
OrderService (божественный класс где все запросы find и остальная бизнес логика) ->
OrderController (тонкий)

Alexander
01.04.2018
11:07:28
я не уверен, что репозитории — это оно
предпочитаю не гадать, когда есть метрики чёткие

Alexey
01.04.2018
11:07:50
Без тестов вычищать это стрельба в голову

Alexander
01.04.2018
11:08:02
не всегда

Антон
01.04.2018
11:08:05
все покрыто тестами
1000 тестов
в этом плане плюс


Dmitry
01.04.2018
11:08:17
А можно какой то пример, какая задача тяжела в выполнении на yii2, и для каких "легких" целей symphony лучше не использовать?
Элементарно. Если принесли замысловатую вёрстку не на Bootstrap, то ActiveForm и LinkPager не подходит. Если нужны замысловатые таблицы с colspan и rowspan, то выбрасываем GridView. Если проектируем сложные сущности со вложенными объектами-значениями, то сильно перепиливаем ActiveRecord или меняем его на Doctrine. Если подключаем сторонние компоненты, работающие по PSR, то пишем адаптеры PSR. Если хотим делать фреймворконезависимые PSR-7 контроллеры, то нужно самому программировать трансформеры для запроса и ответа и адаптеры для контроллеров. Если хотим делать маршрутизацию по именам маршрутов, а не по именам контроллеров и экшенов, то нужно переписать фреймворковский UrlManager или заменить на другой. Но у него нет интерфейса, поэтому придётся наследоваться. Потом хотим добавить мультиязычность в адресе. Можно было бы просто сдекорировать UrlManager, но он опять без интерфейса. И т.п.


Vano
01.04.2018
11:08:18
@samdark loc phpщный поможет посчитать?

Alexander
01.04.2018
11:08:18
о, ну тогда офигенчик вообще

Alexey
01.04.2018
11:08:24
Я б начал с линтера

Антон
01.04.2018
11:09:12
далее когда уберу все дублирование query. Внедрить машину состояний. Где на каждый статус будет собственный хендлер

Google

Alexander
01.04.2018
11:09:49
@devium нет, он churn не умеет

Vano
01.04.2018
11:09:55
а кто умеет?

Alexander
01.04.2018
11:10:04
но тулз полно, по "git churn" ищи
выбирай на вкус

Антон
01.04.2018
11:10:11
в любом случае если не прибираться, то энтропия кода растет

Vano
01.04.2018
11:10:13
принято
@symbios_zi что-то реальным говнищем пахнет в твоем текущем проекте... ))) Глаза видели, что брали?

Антон
01.04.2018
11:11:06
проект с 2011 года

Alexander
01.04.2018
11:11:07
> уберу все дублирование query
не всё то дубль, что дублем кажется

Антон
01.04.2018
11:11:25

Alexander
01.04.2018
11:11:27
> Внедрить машину состояний. Где на каждый статус будет собственный хендлер
Чую, CRM-ка :)

Антон
01.04.2018
11:11:41
в сфере ЖКХ
да
ну такая система ведения заявок
она интересная, просто нужно прибираться


Vit
01.04.2018
11:12:28
Элементарно. Если принесли замысловатую вёрстку не на Bootstrap, то ActiveForm и LinkPager не подходит. Если нужны замысловатые таблицы с colspan и rowspan, то выбрасываем GridView. Если проектируем сложные сущности со вложенными объектами-значениями, то сильно перепиливаем ActiveRecord или меняем его на Doctrine. Если подключаем сторонние компоненты, работающие по PSR, то пишем адаптеры PSR. Если хотим делать фреймворконезависимые PSR-7 контроллеры, то нужно самому программировать трансформеры для запроса и ответа и адаптеры для контроллеров. Если хотим делать маршрутизацию по именам маршрутов, а не по именам контроллеров и экшенов, то нужно переписать фреймворковский UrlManager или заменить на другой. Но у него нет интерфейса, поэтому придётся наследоваться. Потом хотим добавить мультиязычность в адресе. Можно было бы просто сдекорировать UrlManager, но он опять без интерфейса. И т.п.
Дима, Вы закончили мастер класс, или заканчиваете по Ларавел. Там Eloquent был или доктрина?


Антон
01.04.2018
11:12:32
жду вот технический спринт

Alexander
01.04.2018
11:13:03
https://habrahabr.ru/post/351686/
вот

Антон
01.04.2018
11:13:18
ага читал

Google

Alexander
01.04.2018
11:13:19
это про реальность, а не про идеальные проекты в вакууме
про реально успешные с точки зрения проекты, которые выстрелили частично за счёт того, что не делали идеально

Dmitry
01.04.2018
11:14:03

Alexander
01.04.2018
11:14:23
Надо мастер-класс по Doctrine :)


Alexey
01.04.2018
11:14:24
Элементарно. Если принесли замысловатую вёрстку не на Bootstrap, то ActiveForm и LinkPager не подходит. Если нужны замысловатые таблицы с colspan и rowspan, то выбрасываем GridView. Если проектируем сложные сущности со вложенными объектами-значениями, то сильно перепиливаем ActiveRecord или меняем его на Doctrine. Если подключаем сторонние компоненты, работающие по PSR, то пишем адаптеры PSR. Если хотим делать фреймворконезависимые PSR-7 контроллеры, то нужно самому программировать трансформеры для запроса и ответа и адаптеры для контроллеров. Если хотим делать маршрутизацию по именам маршрутов, а не по именам контроллеров и экшенов, то нужно переписать фреймворковский UrlManager или заменить на другой. Но у него нет интерфейса, поэтому придётся наследоваться. Потом хотим добавить мультиязычность в адресе. Можно было бы просто сдекорировать UrlManager, но он опять без интерфейса. И т.п.
Мультиязычность на стандартном менеджере делается легко


Alexander
01.04.2018
11:14:25
отдельный

Антон
01.04.2018
11:14:31
большинство проектов такие

Alexander
01.04.2018
11:14:43
вот в Skyeng сейчас есть проект на Yii 1.1 с доктриной, например

Alexey
01.04.2018
11:14:53
Если хочется свой роутер, то можно его оформить как URL rule
Странные предъявы короч)

Like
01.04.2018
11:15:34
Ларавель калл, расходимся ?

Alexander
01.04.2018
11:15:40

Vit
01.04.2018
11:16:38

Like
01.04.2018
11:16:42
Их чертовы фасады на все, хелперы в виде функций где под капотом контейнер в одну строчку (не считая модулей аля сессия - передали что либо, значит гет, не передали - просто возвращаем объект) и их чертова магия ?

Alexander
01.04.2018
11:17:14

Vit
01.04.2018
11:17:49

Alexey
01.04.2018
11:17:51

Dmitry
01.04.2018
11:18:37

Alexey
01.04.2018
11:18:50

Google

Alexander
01.04.2018
11:18:58

Dmitry
01.04.2018
11:19:16

Alexander
01.04.2018
11:19:20

Alexey
01.04.2018
11:19:38
Зато рост в 3 раза каждый год

Vit
01.04.2018
11:19:44

Alexey
01.04.2018
11:20:08
Это к тому что бизнес первичен, а технологии и инструменты вторичны

Denis
01.04.2018
11:20:12
А что там со скайенгом? Что за жуть?

Alexander
01.04.2018
11:20:12
По Laravel
А, это да. Я новости почитываю периодически, видел.

Like
01.04.2018
11:20:54

Alexander
01.04.2018
11:21:38
http://www.forbes.ru/tehnologii-photogallery/357559-20-samyh-dorogih-kompaniy-runeta-2018-reyting-forbes?photo=19
растёт как на дрожжах
в слаке 1500 человек чатит
в гите 200 репок, из них около 70 — немаленькие проекты
и эти проекты коммуницируют друг с другом и с внешним миром :)
в общем, адок тот ещё :)

Vit
01.04.2018
11:24:58
И вы там симфонистами командуете

Alexander
01.04.2018
11:25:20
программистами, дизайнерами, аналитиками, да
там нет симфонистов, Yii-стов или кого-то такого
там почти все могут всё
или готовы разбираться