
Denis
21.07.2017
20:19:05
Entities\CostCenter, Entities\Surveyor, Entities\User
То, что класс не сущность подскажет неймспейс, а не окончание

Sergei
21.07.2017
20:22:34
Хотя если следовать этому принципу слепо то можно уперется в god object
В таком случае наверное нужно распилить этот обьект на какие то составляющие, но нужно найти из чего он состоит на более низком уровне, к примеру у меня на столе есть настальная лампа, это цельный обьект, но он (допустим) получается слишком сложным и я создаю обьект лампа, выключатель, провода из которого состоит настольная лампа, лампа это композиция этих обьектов составляющих, но при этом я не создаю какой нибудь LampLightManager или что то в этом духе.

Aleh
21.07.2017
20:26:28

Google

Denis
21.07.2017
20:28:36
Куда лучше подхода уровня "красное не надевать, на порог не наступать"

Aleh
21.07.2017
20:29:58
"С чем имеешь дело" слииишком расплывчатое
Фабрика, синглтон, сущность, value object, менеджер. Что из этого ряда описывает "дело"? И каким образом эта информация помогает пользователю кода?

Denis
21.07.2017
20:36:46
Модель, Контролер, Сущность

Aleh
21.07.2017
20:37:45
Что такое модель и что такое сущность, httpclient в этом делении это кто?

Denis
21.07.2017
20:39:11
я скорее имел ввиду "собственные" части проекта. httpclient скорее всего будет внешним сервисом со своим собственным нс, да
кстати было бы интересно почитать, чтонибудь основательное про нейминг. есть что порекомендовать?

Aleh
21.07.2017
20:41:07
https://gist.github.com/fesor/76d39b19b18f7103a7c058301dc6a8fe
By @fes0r

Denis
21.07.2017
20:41:55
вот кстати этот кусок мне спорным кажется:
Для разделения директории на поддиректории должен быть определенный порог. Скажем если у вас в одной директории появляется 7+ файлов, это уже может послужить поводом для того чтобы задуматься и разделить структуру с использованием поддиректорий.
У меня CRM с workflow конфигурируемым "на-лету" за каждый кусочек бизнес-процесса отвечает своя компонента (или несколько если в разных странах этот кусочек реализуется по разному). Компоненты сгруппированы в модули (опять же слелуя бизнес-процессу).
НС этой части выглядит примерно так
App\Modules\{SomeModuleName}\Components\{SomeComponentName}
В итоге в директори компонент крупного модуля может быть 30+ файлов. Но все отлично читается, находится.
Мне кажется делить на директори\подспейсы имеет смысл именно повторяя логику устройства приложения или бизнеспроцесса, а не по количеству


Ivan
21.07.2017
21:02:34
слышал такое, что бросать исключения в конструкторе - плохо

Google

Ivan
21.07.2017
21:02:37
это правда?

James Tiberius Kirk ?
21.07.2017
21:09:06
нет
fail fast как говорится

Sergey
22.07.2017
08:11:55
слышал такое, что бросать исключения в конструкторе - плохо
делать дела в конструкторе плохо, а если ты не можешь инициализировать корректно объект - это нормально уведомить об этом клиентский код исключением. Ну или подумай как сделать так что бы нельзя было добиться такой ситуации, в угоду KISS, просто это далеко не всегда возможно
можешь загуглить доклады на тему functional core, imperative shell
ну и еще момент - очень сложно с таким подходом "дробить" систему. Вообще тема интересная)


Invirtus
22.07.2017
14:55:17
Добрый день. Не совсем по теме, нет ли тут кого-нибудь, кто хорошо разбирается в adodb и загрузке данных из Экселя в экссес? Или может быть кто знает канал.
Спасибо.

Alexey
23.07.2017
12:46:30
https://gist.github.com/fesor/76d39b19b18f7103a7c058301dc6a8fe при таком подходе организации проекта, куда складывать какие то общие сервисы, взаимодействие между модулями. В общем что то общее. Создавать модуль common?

Aleh
23.07.2017
14:20:09

Sergey
23.07.2017
14:48:23
общих модулей быть не должно.
у тебя просто могут быть какие-то модули которые используются несколькими модулями
если у тебя есть модуль от которого зависят все - это называется god object и свидетельствует о том что у тебя что-то не так c декомпозицией и пришло время порефакторить
или если у тебя есть модуль от которого зависят остальные модули, но каждый юзает что-то свое - можно просто этот "общий" модуль разбить на более специализированные
как правило все "общее" больше к инфраструктуре относится
http://rbcs-us.com/documents/Why-Most-Unit-Testing-is-Waste.pdf
http://www.fullstackradio.com/38

Aleh
23.07.2017
17:05:08
Testing does not increase
quality; programming and design do
?

Sergey
23.07.2017
17:07:20
Я таки нашел то о чем ты говорил про internal/external quality

Google

Aleh
23.07.2017
17:08:36

Sergey
23.07.2017
17:08:38
но там не про кохижен - наоборот юнит тесты кохижены/коуплинги улучшают. Другое дело что концентрация только на внутреннем качестве негативно сказывается на внешнем, а если мы забьем на внутренее то как бы и фичи новые не сможем быстро выкатывать, что само собой снижает внешнее качество

Alexey
23.07.2017
17:08:54
как правило все "общее" больше к инфраструктуре относится
Ну например есть модуль нотификаций, который так или иначе используется остальными. Межмодульное взаимодействие в таком случае будет основано на генерации событий и их обработке в модуле нотификаций? Не слишком ли повышается зависимость модуля нотификаций от других или это нормально?

Sergey
23.07.2017
17:08:54
Где?
Growing object oriented software driven by tests вроде

Aleh
23.07.2017
17:09:32

Sergey
23.07.2017
17:10:06
ну то есть мне нравится второстепенную логику типа отправки нотификаций выносить на доменные ивенты
но это все будет происходить в рамках того же модуля где происходит магия, и просто относится к инфраструктуре модуля.
там уже могут быть зависимости от модуля нотификаций

Aleh
23.07.2017
17:11:14

Sergey
23.07.2017
17:11:16
почему нравится - потому что для вещей вроде нотификашен это идеально - у тебя есть четко прописанные тригеры и четко прописанные нотификации. Есть детальная связь какие нотификации по каким тригерам запускаются
и если у тебя добавляются дополнительные этапы жизненного цикла которые "смещают" тригер - это никак не аффектит код нотификаций

Sergey
23.07.2017
17:11:59
ну то есть почти никак
и тестить такое удобно
p.s. доменные ивенты не совсем тоже самое что и просто ивенты

Alexey
23.07.2017
17:17:38
В отдельном модуле?

Sergey
23.07.2017
17:19:13
что сущности новости нужно от юзера?
аналогично для комментария
по хорошему - только айдишки оных

Google

Sergey
23.07.2017
17:21:21
по сути тебе тут даже не нужно их между собой связывать.
пусть себе независимо живут
тут весь косяк и проблемы только с репрезентацией данных, когда тебе на одном скрине надо показать статью + все комменты + коротко профиль автора статьи + аватарки и никнеймы со ссылками на профили авторов комментов
то есть UI может жить в отдельном модуле и просто "собирать" нужную инфу у других

Alexey
23.07.2017
17:23:11

Sergey
23.07.2017
17:23:50
тут тебе придется выбирать что тебе важнее, что бы база данных отвечала за целостность связей или связанность между модулями

Admin
ERROR: S client not available

Sergey
23.07.2017
17:24:06
хочешь ты делать джойны в базе на уровне SQL или делать application-level join-ы
тут "правильного" способа нет
везде свои плюсы и минусы
если брать хипстерские подходы, то у меня было бы 3 независимых модуля никак не связанных между собой на уровне базы данных, graphql сервер который бы собирал для меня все воедино, и SPA на каком-нибудь ангуляре
или модуль который бы рендрил html срдствами сервера по той же абсолютно схеме
но если проект небольшой и комменты есть только у статей - не вижу никакого кримитала в том что бы ложить их в тотже модуль что и новости
очень редко необходимо комменты "общие" для нескольких модулей, хотя такое бывает

Alexey
23.07.2017
17:26:58
Но все равно в посте и комменте нужно хранить какую то ссылку на пользователя. Так или иначе связь есть

Sergey
23.07.2017
17:27:18
ну или просто смерись что на 100% устранить зависимости между модулями не выйдет или выходит слишком дорого и пихай юзера)
но тогда просто сделай сущность юзера "легкой"
что бы там был только сферический юзер профайл
я например так такие вещи как креды и т.д. выношу в отдельную сущность Credentials

Google

Evgeniy
23.07.2017
17:28:39
зачем при всем таком раскладе тогда надо application ?
если все так будет "НЕЗАВИСИМО" ?

Alexey
23.07.2017
17:28:52
А если взять выше и объединить это все под модулем блог?)

Sergey
23.07.2017
17:29:00

Evgeniy
23.07.2017
17:29:21
так вот это сверху в виде фронтенда
говорит
мне надо ответ в таком формате

Sergey
23.07.2017
17:29:38

Evgeniy
23.07.2017
17:29:39
и там и детали по новости, коментарию и пользователю
бэкенд говорит НЕТ мы так не делать это не канонично?

Sergey
23.07.2017
17:30:08
просто между "бэкэндом" и "фронтэндом" садишь агрегатор и все довольны

Evgeniy
23.07.2017
17:30:23
удобный и гибкий вариант это как раз в случае если что то понадобилось ты можешь получить

Sergey
23.07.2017
17:30:52
смотри, у тебя есть приложение, ты можешь его разбить на модули

Evgeniy
23.07.2017
17:31:19
получается у тебя фронт 1->1 бэкэнд 1->N бэкэнд-> база

Sergey
23.07.2017
17:31:24
и можешь сделать отдельный модуль который является точкой доступа

Evgeniy
23.07.2017
17:31:30
нахера в этой цепочке 2 бэкенда и прослойка эта?