
Sergey
17.12.2016
13:39:52

Sergey
17.12.2016
13:40:04
там где юзеры водятся)

Sergey
17.12.2016
13:40:09
"публичная" и "приватная" часть у тебя называются frontend и backend?

Mihail
17.12.2016
13:40:09
дл я не авторизированного юзера

Google

Sergey
17.12.2016
13:40:20
так себе)

Sergey
17.12.2016
13:40:29
yii напоминает

Mihail
17.12.2016
13:40:31
ну бекенд наверно лучше на админ переименовать

Sergey
17.12.2016
13:40:32
угу

Sergey
17.12.2016
13:40:43
никогда не понимал названия эти на бекнде "фронтэнд и бекенд"
у меня фронтэнд - это жс и браузер)

Sergey
17.12.2016
13:41:00

Mihail
17.12.2016
13:41:23
ну ок у меня есть 3 состояния

Sergey
17.12.2016
13:41:26

Mihail
17.12.2016
13:41:43
не авторизирова, авторизирован и админка

Sergey
17.12.2016
13:41:52
у нас как-то был inside out, когда в админку мы должны были пускать обычных юзеров
но с обрезанными правами

Sergey
17.12.2016
13:42:02

Google

Sergey
17.12.2016
13:42:25

Sergey
17.12.2016
13:42:37
или он обычный пользователь но ему почему-то можно еще и модерировать что-то
так что нельзя говорить "у меня есть три состояния"
у тебя есть роли - возможно

Sergey
17.12.2016
13:43:25
суровые реалии

Mihail
17.12.2016
13:43:31
есть )

Sergey
17.12.2016
13:43:40
ну короч... я опять же повторюсь
группировать прикольнее по функционалу а не по "ролям"
да и блин
это контроллеры
я не знаю как у вас
а у меня контроллеры нужны только что бы связать http роуты и хэндлеры конкретные

Sergey
17.12.2016
13:45:01
зачем тебе тогда контроллеры?)
меня только в заблуждение вводит момент когда сервис возвращает результат и контроллеру его нужно отдать дальше(шаблон или жсон)
то ли нужно лепить отдельные форматтеры/принтеры, то ли сервисный слой сам этим должен заниматься в отдельной прослойке

Sergey
17.12.2016
14:01:46
ну у меня обычно за запись отвечают хэндлеры, и они частенько ничего не возвращают (могут исключение кинуть)
а для чтения у меня отдельные сервисы.
хотя честно - сейчас на большинстве проектов легкая каша... иногда мне лень заводить сервисы новые и я просто в контроллерах делаю какие-то вещи
еще я не очень правильно юзал фрактал.... до недавнего времени

Google

Sergey
17.12.2016
14:03:07
сейчас борюсь с последствиями

Sergey
17.12.2016
14:03:14

Sergey
17.12.2016
14:03:23
есть такое

Sergey
17.12.2016
14:03:23
а че с фракталом не так?

Sergey
17.12.2016
14:03:36
а я чет думал что "инджектить сервисы в трансформеры збс идея"
по факту - нифига
лучше так не делать
очень провоцирует нарушать SRP
ну тоесть делать трансформеры как сервисы - идея дрянь
если очень надо лучше сделать фабрику, но это опять же в очень редких случаях надо. Лучше что бы трансформеры оставались просто трансформерами. Данные на вход - данные на выход. Никакой магии. Чистота

Sergey
17.12.2016
14:06:40

Sergey
17.12.2016
14:06:52
я могу описать последствия)
трансформеры занимаются не тем чем надо, они начинают узнавать контекст своей работы самостоятельно, а не ожидать что ему его зададут
например появляются проверки вида "если текущий юзер может видеть email-ы юзеров покажи их"
а надо просто сказать трансформеру "и да показывай email-ы"
в этом заключается суть SRP - контект может захотеть поменять тот, кто юзает трансформер
и сделать это уже непросто потому что трансформер шибко умный

Sergey
17.12.2016
14:08:43
самый мутный принцип
жирная модель с сотней методов - это не нарушие SRP, это "доменный язык"
а всякие сериалайзеры/десериалайзеры - это уже нарушение SRP ?

Sergey
17.12.2016
14:09:10
делигируй унижай

Google

Sergey
17.12.2016
14:09:16
передавай задачи другим сервисам

Sergey
17.12.2016
14:09:23
а вот нехера

Sergey
17.12.2016
14:09:29
просто нюанс
ты можешь передавать сервисы как зависимости операций, как аргументы
дабл диспатч и все такое

Sergey
17.12.2016
14:10:38

Sergey
17.12.2016
14:11:00

Sergey
17.12.2016
14:11:17
ну SRP может быть то с разным скоупом

Sergey
17.12.2016
14:11:25
в смысле "скоупом"?
SRP - single reason to change. И все. у тебя поменялась логика подсчета скидок - должен поменяться один файл (или один компонент)

Sergey
17.12.2016
14:12:12

Sergey
17.12.2016
14:12:32
баг - исправление функционала
рефакторинг - изменение реализации без изменений в функционале
оптимизации = рефакторинг
а вот когда тебе надо поменять функционал, именно логику работы

Sergey
17.12.2016
14:13:01
и они могут задевать сразу много всего

Sergey
17.12.2016
14:13:28
от багов ты не застрахуешься)
вообще принципы SOLID это гадание, то есть ты никогда не сможешь знать всего наперед и не должен этого знать

Google

Sergey
17.12.2016
14:13:52

Sergey
17.12.2016
14:13:53
НО ты можешь хорошенько подумать

Sergey
17.12.2016
14:14:32
>у тебя поменялась логика подсчета скидок
у тебя еще нет логики вообще, только требования и ты проектируешь систему

Sergey
17.12.2016
14:14:41
эм... ты так делаешь?
ну ладно, не суть
давай как ты описываешь
мой типичный день)
понедельник - пришел новый проект
кода нет
требования непонятны
так?

Sergey
17.12.2016
14:15:19
допустим они понятны)

Sergey
17.12.2016
14:15:28
ой да ладно, они никогда не понятны

Sergey
17.12.2016
14:15:36
давай конкретный кейс. подсчет скидок

Sergey
17.12.2016
14:15:55
тип "а давайте добавим подсчет скидок"?
или "а давайте поменяем алгоритм подсчета скидок"?

Sergey
17.12.2016
14:16:06
ну у тебя к примеру есть уже онлайн шоп

Sergey
17.12.2016
14:16:10
есть

Sergey
17.12.2016
14:16:24
а тут приходят и говорят - если чувак покупает 2 одинаковые книги, делаем ему скидку в 10 процентов

Sergey
17.12.2016
14:16:40
а если 3?

Sergey
17.12.2016
14:16:47
похер, 10%