
andretshurotshka?❄️кде
06.12.2017
21:05:37
@kanaflow

Bohdan
06.12.2017
21:25:38
в таком варианте теряется удобство обсуждений
хоть и есть группа, но в ней меньше контекста

Andrew
06.12.2017
23:21:54
Привет всем, пара вопросов по закону Деметры)
1. Он про сокрытие структуры, т.е. про то как правильно готовить инкапсуляцию?)
2. Сокрытие данных - это НЕ про инкапсуляцию, а про грамотное расширение объекта, т.е. про Open-Close принцип, по сути?

f4rt~
07.12.2017
00:04:05

Google

f4rt~
07.12.2017
00:04:19
и да инкапсуляция не только про information hidding

da horsie
07.12.2017
00:35:33
я бы сказал, что деметра про information expert, дескать держи логику поближе к данным. много точек - признак того, что от логики до данных далеко тянуться

f4rt~
07.12.2017
00:38:32
да,прости, ты прав

da horsie
07.12.2017
00:38:46
данные можно скрывать и без соблюдения OCP
у тебя будет штука, которая не показывает свои кишки, которую можно использовать, но нельзя расширить

Pavel
07.12.2017
05:11:49
Инкапсуляция это лишь один из способов достижения сокрытия инф.

Sergey
07.12.2017
06:50:51
информации в том плане "как оно чего там внутри устроено"
open/close = protected variations = information hiding
есть заметка Алистера кокберна (вроде его) где он делился что когда выдумывал protected variations из grasp он просто не знал про open/close и в целом это одно и то же и суть information hiding

Mykola
07.12.2017
07:41:24
закон деметры это не совсем про сокрытие, это про упрощение модулей

Google

Mykola
07.12.2017
07:41:52
каждый модуль должен знать об ограниченом количестве других модулей

Sergey
07.12.2017
08:20:47
Но по каким критериям ты ограничиваешь знания модуля о других модулях?
мне всегда казалось что LoD это следствие information hiding.

Mykola
07.12.2017
08:21:31
в самом законе не упоминается методология)
тут уже здравый смысл работает

Sergey
07.12.2017
08:22:28
"don't talk to strangers". и пример про собаку и ее лапы
то есть как по мне LoD это хороший способ трекать недостатки в сокрытии информации

Mykola
07.12.2017
08:24:43
закон деметры опять же, не про сокрытие, его можно и в другом смысле применять: строить архитектуру для уменьшения связности между модулями
т.е. архитектурно решать проблему связности и уменьшать количество знания одного о другом, а не просто скрывать

Sergey
07.12.2017
08:26:46
что значит "просто скрывать"?)

Mykola
07.12.2017
08:32:27
ну смотри, у тебя может быть архитектыра "солнышко", где один модуль знает про все другие, как тут что-то скрыть? :)
скрыл - потерял модуль

Andrew
07.12.2017
08:43:07
Оооо..спасибо, парни) будет над чем подумать

Sergey
07.12.2017
08:46:36

Борис
07.12.2017
09:57:40

Sergey
07.12.2017
10:00:33
да и потом, бизнес логика на ивентах не больно если у тебя нормально выстроены взаимоотношения и разделение ответственности)
+ есть возможность трекать что в какой последовательности происходит
и это не влияет на консистентность

Google

Борис
07.12.2017
10:01:38
угу, расскажи это проекту DST

Anton
07.12.2017
10:01:41

Sergey
07.12.2017
10:02:23
угу, расскажи это проекту DST
там была проблема с кохижен, разделением ответственности, дублированием логики, и вообще мы там нехило так наговнокодили с тобой)
а ну да, кохижен - связность, кауплинг - связанность
или внутренняя и внешняя связанонсть модуля

Борис
07.12.2017
10:03:10

Sergey
07.12.2017
10:03:47
ну и да, мы потом знатно айдишки переделывали)

Борис
07.12.2017
10:04:10
да... может быть и такое

Sergey
07.12.2017
10:04:20
но это мы уже вместе делали если ты помнишь)
я не могу сказать что там ивенты это было самое страшное - скорее хуки эктив рекорд

Mykola
07.12.2017
10:05:06
модули - это что угодно, куски приложения

Sergey
07.12.2017
10:05:22

Mykola
07.12.2017
10:05:44
обьекты, плагины, сервисы в контейнере, микросервисы в облаке, все подряд
акторы там

Sergey
07.12.2017
10:06:20
ну да, и ивенты между модулями побольше - норм тема

Mykola
07.12.2017
10:06:37
чтоб они взаимодействовали им нужно знать друг о друге, не важно ивенты или что

Sergey
07.12.2017
10:06:44
а ивенты в пределах модуля поменьше масштабом уже вызывает сомнения

Google

Sergey
07.12.2017
10:07:11
ему не важно будет кто его обрабатывать или нет
а потому прямой зависимости нет. Это просто часть его контракта
кинуть ивент
иначе у тебя будут появляться циклические зависимости между модулями, что плохо

Mykola
07.12.2017
10:08:14
ну тогда да, но модуль будет знать о диспетчере, которому он будет слать ивент
а если у тебя сабмодуль, т.е. часть твоего модуля, то возможно диспетчер тут лишний

Sergey
07.12.2017
10:09:08
не обязательно, диспетчер может быть сверху
(доменные ивенты типа))
но на определенном масштабе да, надо будет знать о диспетчере
вот только это может быть не общий диспетчер и между модулями может быть еще кто-то/что-то
короч хз о чеммы если честно
мне ивенты нравятся)

Mykola
07.12.2017
10:10:46
ивенты - это магия
с одной стороны все хорошо, бросил и забыл

Sergey
07.12.2017
10:11:12

Mykola
07.12.2017
10:11:14
коуплинг и кохижн победил
в смысле никакой? а консистентность кто будет делать?

Aleh
07.12.2017
10:11:37

Sergey
07.12.2017
10:11:51

Google

Mykola
07.12.2017
10:12:10
вызовы методов - это вызовы методов конкретного обьекта, ты про него знаешь и контролируешь
а ивенты - это бросил и забыл

Aleh
07.12.2017
10:12:21
про ивент ты знаешь столько же)

Sergey
07.12.2017
10:12:27

Mykola
07.12.2017
10:12:44
если это мой модуль - то я

Sergey
07.12.2017
10:12:47

Aleh
07.12.2017
10:12:55

Sergey
07.12.2017
10:12:59

Mykola
07.12.2017
10:14:27
окей, давайте реальную проблему решим: есть сервис создания юзера, есть куча внешних сервисов, на которых этого юзера надо зарегистрировать, юзер считается созданым, если он зарегистрирован на всех внешних сервисах
решаем ивентами ;)

Aleh
07.12.2017
10:15:01
ивенты имеют отношения к решению задачи столько же, сколько и вызовы методов
тут проблема не в ивентах, а в работе с внешними источниками

Mykola
07.12.2017
10:15:26
методы - все твои
нене, если ты вызываешь метод, ты его вызываешь у кого-то конкретного
ты контролируешь вызов каждого метода

Jan
07.12.2017
10:16:05
А некоторые заявляют, что с «этими событиями не разберешься, что и где вызывается и как обрабатывается».

Mykola
07.12.2017
10:16:09
а если ты послал ивент в диспетчер, то ты не знаешь что с ним дальше происходит

Aleh
07.12.2017
10:16:22

Jan
07.12.2017
10:16:28
Поэтому типа ну их нах