
Sergey
23.03.2018
20:42:00

Konstantin
23.03.2018
20:42:12
у объекта может быть 20 сеттеров
а внутри может быть 200 разных свойств

Sergey
23.03.2018
20:42:24

Google

Konstantin
23.03.2018
20:43:19
ну так а чем тогда сеттеры нарушили инкапсуляцию

Sergey
23.03.2018
20:43:22
в былые времена инкапсуляцию дополнял такой принцип как information hiding - что мол надо не просто стэйт сделать приватным - но вообще попрятать всю информацию о том как происходит работа с этим стэйтом. А знаешь почему?

Konstantin
23.03.2018
20:43:23
тем что они называются также как поля?

Andrey
23.03.2018
20:43:39

Konstantin
23.03.2018
20:43:43
или тем что можно спокойно написать метод на рефлексии который заполняет объект данными из реквеста?

Sergey
23.03.2018
20:43:54

Konstantin
23.03.2018
20:43:56
просто из "set".ucfirst($method) ?

Sergey
23.03.2018
20:44:31

Konstantin
23.03.2018
20:44:36
ну как мне видится для объекта у которого все методы по своему называются сложноватее собрать вот такой метод который из массива его сам собой наполнит

Sergey
23.03.2018
20:44:58
суть инкапсуляции в том что бы небыло необходимости в доступе к стэйту
потому что поведение по работе с этим стэйтом лежит прям в той же капсуле
формируя хороший такой модуль

Google

Sergey
23.03.2018
20:46:45
в идеале что бы методы все были без аргументов (что конечно же невозможно), что бы все просто дергали методы без рагументов и тд.
что бы методы ничего не возвращали
было бы круто, абсолютный минимум связанности
абсолютный минимум связанности - меньше подгонять когда придется править логику
вообще повторюсь - инкапсуляция это простая штука которая про возможность провести границу между "внутри" и "снаружи". Даже в википедии определение примерно такое же
нарушение инкапсуляции в этом ключе - нахождение чего-то что должно быть "внутри" "снаружи"
помимо этого есть всякие tell-dont-ask, information hiding и прочие штуки которые уступили место в популярности старой доброй "код должен иметь низкую связанность". С этим утверждением ты согласен?

Konstantin
23.03.2018
20:50:03
бля у меня просто отрубился инет на пару минут а тут уже такое

Sergey
23.03.2018
20:50:16
я пока подожду, схожу за кофейком) но ответь на последний вопрос)

Konstantin
23.03.2018
20:51:24
про утверждение что низкая связаность согласен но причем тут количество методов класса которые я использую?
вот я ща слушаю сет девушки одной, видос на ютубе, у нее там панелька с крутилками
куча крутилок
https://www.youtube.com/watch?v=uBm-zXrfdnU&pbjreload=10
ну так чисто для развлекона
каждая крутилка это сеттер, почему бы нет

Sergey
23.03.2018
20:52:25

Konstantin
23.03.2018
20:52:30
а ты говоришь " а почему нет просто 3 крутилок - охуенно, громко, четко" ? )))

Sergey
23.03.2018
20:52:56
ну то есть у тебя есть операция, где связанность ниже, там где вызов 1-ого метода или там где выхов 20-ти?
а в классе своем хоть тысячу методов делай (но там уже поговорим про SRP которое сложно определять и никак не выражается в количестве методов, это скорее как симптом возможный)

Alan
23.03.2018
20:54:19

Google

Konstantin
23.03.2018
20:54:21
мне видится так - писать надо так как удобнее. удобно иметь 20 сеттеров - ок делай 20 сеттеров, удобно иметь 1 ::fromBlabla($blabla) - ок

Alan
23.03.2018
20:54:31
или дадим 5 девушкам 2 крутилки)))

Denys
23.03.2018
20:55:01
каждой из пяти по две крутилки

Konstantin
23.03.2018
20:55:34

Sergey
23.03.2018
20:56:02

Konstantin
23.03.2018
20:56:08
ну вот я например обновляю сущность и фотки не догрузились, мне вот прям выдать косяк на весь экран что "сорян там твои 20 полей слетели, потому что ты кривую фотку закинул" или лучше обновить все кроме фоток?

Sergey
23.03.2018
20:56:14

Konstantin
23.03.2018
20:56:22
выше )

Sergey
23.03.2018
20:56:48

Konstantin
23.03.2018
20:57:33
а если дело не доходит до создания элемента? фотки на хостинге лежат или удаляются как то?
а то я тож сегодня так подумал но меня этот момент с мусором на диске смущает

Sergey
23.03.2018
20:57:53

Sergey
23.03.2018
20:58:13
но нет никаких проблем сделать что-то типа очереди на чистку
что мол через 5 минут после заливки удалять
и после создания поста юзающего эти фотки для этих фоток удалять задачу
+ можно лить напрямую на s3 через подписанные ссылки)
ну и еще важный момент
это то как ты дробишь систему на сущности, очень часто мы ложим данные в одну табличку потому что "не ну эти данные относятся к юзерам например"

Konstantin
23.03.2018
21:02:29
я тоже думаю что никакого отношения к инкапсуляции не имеет. я просто сделаю 20 сеттеров и буду каждый по отдельности вызывать даже без цепочки. да, я мазохист

Google

Sergey
23.03.2018
21:02:44

Konstantin
23.03.2018
21:02:48
если меня будет искать маньяк который станет это дело поддерживать - ок, а то даже бухнуть не с кем
потомушта картинка основная одна. addPhoto Это если в галерею, ну да может быть и так. однако может быть и сразу setGallery(array $gallery)

Sergey
23.03.2018
21:04:03
хз, я могу лишь посоветовать тебе попробовать маленькую задачку решить без сеттеров вообще (и без геттеров). Просто так, как упражнение. Повторюсь что в реальной жизни предсказать всего нельзя и приходится идти на компромисы но не рассматривать других подходов и других идей - это как-то глупо как по мне
или комментарии.... комментариям пофигу к чему они а продукту тому же плевать есть ли у него комменты

Елнур
23.03.2018
21:05:18
Народ, вы же не пробовали такой подход в реальном долгоживущем проекте, так зачем сопротивляться =)

Sergey
23.03.2018
21:05:21
а релейшен мы часто делаем просто так по факту

Admin
ERROR: S client not available

Елнур
23.03.2018
21:06:07

Sergey
23.03.2018
21:06:23
хотя и то тоже....

Елнур
23.03.2018
21:06:36
почему?

Sergey
23.03.2018
21:06:49
микросервисы это боль и страдания.... это не что-то такое что прям ух
это еще более чувствительная к факапам декомпозиции штука чем то о чем я вещаю
это как вынужденная мера а не клевая штука
но принципы те же да

Google

Елнур
23.03.2018
21:08:04
я не говорю что микросервисы - это хорошо... но когда нужно чтобы система обслуживала большие нагрузки, то вынуждены так делать

Alan
23.03.2018
21:08:22
ну в хайлоаде че только не делают)

Sergey
23.03.2018
21:09:18

Елнур
23.03.2018
21:12:27
и вот, по классике, в начале я линковал сущности "Договор" - с "Комментарием", с "Вложением"...
а потом таких документов стало очень много, Доп соглашение, Заявка на оплату и т.д.
а в сущности Вложение стали появляться такие поля как contract, agreement, payment и т,д,... Если файл связан с платежом, то остальные поля - null
в конце отказался от такого подхода...

Konstantin
23.03.2018
21:14:53
и как сделал в итоге то?

Елнур
23.03.2018
21:15:04
комментарии - не знают про документы, а документы не знают про файлы и комменты
только в ui получаю связанные сущности
а если нужно строить какие то отчеты, то это делаю совсем другими способами

Konstantin
23.03.2018
21:16:29
не знают это в плане что прямого релейшна нет но есть какая то таблица в базе где всеравно хранится что у документа такого то есть такой то комментарий?
сорян я уже деградирую но все же

Sergey
23.03.2018
21:18:55
в конце отказался от такого подхода...
похожая история - только у меня был ecom и вайтлэйблы для которых нужна была возможность переопределять модули (бронирование товаров, сами модули каталогов различались и т.д.)

Елнур
23.03.2018
21:19:17
например так:
(не скажу что это идеальное решение, но от многих проблем избавился)
contract:
id: 1
name: "Договор"
comment_thread:
type: "contract"
id: 1
comment:
id: 1
thread_id: 1
body: "Коммент"

Sergey
23.03.2018
21:19:49
а для UI - композиция данных
абсолютно независимые модули

Елнур
23.03.2018
21:20:30
есть две таблицы: comment_thread и comment... они могут интегрироваться в любой документ, и ничего не будут знать про сам документ
а в документе нет никаких связей с комментом
для каждого документа создается thread