@oop_ru

Страница 563 из 785
Mykola
19.03.2018
15:13:46
в зависимости от контекста и говнокод сладок, я знаю

Anton
19.03.2018
15:14:29
Максимализм и поиск серебряной пули... ну-ну

Bohdan
19.03.2018
15:14:30
дык и по фаулеру говнокод писать можно

Google
Mykola
19.03.2018
15:15:33
по фаулеру писать говнокод нельзя, если у вас получается говнокод - принимайте фаулера по 100 ударов толстой книгой по лбу до полного выздоровления)

Bohdan
19.03.2018
15:16:13
не сотвори себе кумира, как говорится...

Anton
19.03.2018
15:16:14
Нужно и то, и то. Да, возможно, with* используется чаще. Хороший пример для without был с findWithoutAdminPriviliges

Хотя в пример с find* я бы вообще использовал спецификацию.

Mykola
19.03.2018
15:17:11
Aleh
19.03.2018
15:17:29
с этой точки зрения разницы немного

Mykola
19.03.2018
15:19:48
осталось обьяснить девеловерам, поему нарушать SRP это плохо...

самая сложная часть

:)

Артур Евгеньевич
19.03.2018
15:30:00
Мы наоборот получаем полезные, многофункциональные модули, которые можно использовать в любой части системы. + оченль легко найти нужный код так как весь проект будет в нескольких файлах

Google
Артур Евгеньевич
19.03.2018
15:31:53
ладно слишком жирно

Maksim
19.03.2018
15:32:14
Где связь между srp и кол-вом файлов?)

И где связь между кол-вом файлов и удобством)

Артур Евгеньевич
19.03.2018
15:32:57
Где связь между srp и кол-вом файлов?)
!srp = меньше классов = меньше файлов))

Alexandr
19.03.2018
15:33:30
один файл отвечает за один проект ... srp соблюдён ... если файлов больше, то одна и та же ответственность размазывается - нарушение )

Maksim
19.03.2018
15:34:05
!srp = меньше классов = меньше файлов))
Чет я даже хз что ответить...) ты прав, толсто слишком)

Артур Евгеньевич
19.03.2018
15:34:42
И где связь между кол-вом файлов и удобством)
ну ты не ловил никогда себя на мысли что очень часто между файлами перключаешься?) а так колесом промотал куда надо, и готово! + копипастить легче в рамках одного файла

Sergey
19.03.2018
15:36:13
вообще никакой корреляции

я могу тебе сделать любой вариант декомпозиции. Много файлов, много классов - мало SRP, мало классов и мало файлов и много SRP

SRP про выделение ролей, кому предназначен функционал и кто может захотеть его менять

оно не про то что бы делать классы в 10 строк

словом... SRP не выражается напрямую в количестве кода. Количество кода МОЖЕТ быть симптомом нарушения SRP но может и не быть)

Артур Евгеньевич
19.03.2018
15:38:37
Но если у тебя 1 класс на проект, то 100% же что то не так?)

Uiiuviiw
19.03.2018
15:47:16
всем трям! существует ли чтиво на русском языке после прочтения которого я стану экспертом в области акторов и всяких там ролей? желательно в очень сжатом формате и с понятными примерами...?

Maksim
19.03.2018
15:48:36
Без смс и регистрации?)

Uiiuviiw
19.03.2018
15:48:37
то есть за годы чтения комментов у меня сложилось представление, но хочется собрать все в кучу

естстн

Google
Maksim
19.03.2018
15:49:49
На русском, вряд ли) на нем ги сиотреть, ни читать особо нечего) посмотри в описании группы. Там много всякого собрано

Артур Евгеньевич
19.03.2018
15:50:28
я вообще не понял чем они от ивентов отличается...

Arky
19.03.2018
15:52:06
srp это про то, чтобы класс имел только одно поведение?)0

Uiiuviiw
19.03.2018
15:52:55
чтоб рулил одним процессом

Артур Евгеньевич
19.03.2018
15:53:02
Arky
19.03.2018
15:56:01
Одну причину для изменения
изменения класса? ocp говорит не изменять класс, как жи сложна(9

Артур Евгеньевич
19.03.2018
16:19:37
изменения класса? ocp говорит не изменять класс, как жи сложна(9
OCP говорит тебе о том, что код класса нельзя нельзя изменять при егорасширении. А SRP об изменениях связанных с конкретнйо бизнесс логикой

как то я хервоо сказал

Короче если меняется какая то логика, для исполнения которой класс создавался, то код можно менять(но причина для этого должна быть одна, в рамках выделеннйо ответственности). А если ты хочешь изенить какие-то детали реализации этой логики, то должен был предусмотерть точки расширения для этого. Самый простой пример отправка уведомления. У тебя есть сервис который проверяет что пользователь должник и отсылает ему уведомление например Емайлом. Если у тебя меняется определение того что считать должником, и ты полез менять код - этонорм. А вот если поменялось метод отправления с емайла на смс, и тебе пришлось лезть в код то это хреново, т.к должно меняться с помощью передачи нужного объекта отправителя.

F01134H
19.03.2018
16:28:04
Артур, пздц ты сложно глаголишь

Артур Евгеньевич
19.03.2018
16:28:26
Хотя бля определение кто такой должник тоже можно вынести в интерфейс DebtorDetectorStrategy и подсовывать ее реализации в класс проверяльщика

Like
19.03.2018
16:45:14
Теперь все ясно, пасиба
Ты ж ничо не понял

Arky
19.03.2018
16:47:44
Ты ж ничо не понял
Ну здесь ясно все, а ты ток "забей" отвечаешь

Артур Евгеньевич
19.03.2018
17:25:41
в OCP нет ничего про "код класса"
Да я соглассен. Но это прискреб к словам) ну и я потом сразу же признал что хуево сформулировал

Mykola
19.03.2018
17:30:54
ну изначально OCP был типа придуман потому, что ты можешь скомпилить кусок кода, и этим его как-бы закрыть, но у тебя есть возможности его использовать и расширять

то есть, он "открытый"

но оказалось, что надо как-то более по умному подойти к этому вопросу, там появилось полиморфическое понимание OCP, типа что код не имеет значения, а интерфейсы имеют

Google
Mykola
19.03.2018
17:34:50
ну и типа интерфейсы ты "закрыл" (на самом деле "closed"- стоит переводить как "замкнул", для точности) , но можешь расширять всякими композиционными способами

Maksim
19.03.2018
17:54:23
эрланг - порождение дьявола) во имя добра его не изучают)

Igor
19.03.2018
17:57:44
эрланг - порождение дьявола) во имя добра его не изучают)
Можно услышать что-нибудь в подтверждение столь громкого заявления?

Maksim
19.03.2018
17:58:49
Можно услышать что-нибудь в подтверждение столь громкого заявления?
что ты хочешь услышать?) что его синтаксис - не письмена для призыва дьявола?)

Igor
19.03.2018
18:07:18
Он достаточно приятен как мне показалось, сразу понятно что возвращается и какие инварианты у функции есть, паттернматчинг из коробки, акторы посылка и прием сообщений. А что не так с его синтаксисом?

Bohdan
19.03.2018
18:34:21
книжка годная?

и свежая?)

Moz
19.03.2018
18:35:49
А эрланг не перетек в эликсир?

Bohdan
19.03.2018
18:38:57
вроде ещё отдельно @clever_cat?)

Igor
19.03.2018
18:52:30
Если что я не специалист. Элексир отдельный язык на базе виртуальной машины эрланга. Книга 3 х годичной давности. Мне понравилась. Все концепции объясняются доступно и просто.

Uiiuviiw
20.03.2018
06:52:59
а есть правильное название у архитектуры с акторами?

я так и не смог по эрланг открыть.. я пока только на планшете,так он не открывает именно этот пдф

может есть статьи по основным принципам без привязки к яп на английском написанные не индусами?

Sergey
20.03.2018
06:58:52
https://en.wikipedia.org/wiki/History_of_the_Actor_model

можешь с этого начать

там куча отсылок на публикации

изучение идей стоит все же начинать с первоисточников

хотя бы мельком по ним пробежаться

Google
Sergey
20.03.2018
06:59:50
там и идея обоснована. и описана...

Uiiuviiw
20.03.2018
06:59:51
всетаки модель акторов..

Sergey
20.03.2018
06:59:55
и без привязки к ЯП

Bohdan
20.03.2018
07:00:28
Sergey
20.03.2018
07:00:39
всетаки модель акторов..
да, ты можешь воспринимать все эти SOA и микросервисы как развитие этих идей. Что есть у тебя какие-то "штуки" которые "обмениваются сообщениями" и "не делят данные между собой"

Sergey
20.03.2018
07:10:12
по поводу архитектуры - архитектура это всегда наличие ограничений, которые призваны дать какую-то характеристику. Гексагональная архитектура - про направление зависимостей и инверсию зависимости. Это дает тебе гибкость в плане изоляции бизнес правил от инфраструктуры. Если тебе это надо - можешь туда смотреть. Если тебе надо организовать какую-то децентрализацию - можно другие ограничения рассматривать. Ну и т.д. Если мы попробуем выстроить аналогию между знакомыми тебе ООП штуками и экторами.... представь себе систему, простенькую... есть объект представляющий какую-то сущность. Например сделаем простенький todo список. В языках типа Java и в целом наследующих объектную модель всяких там симмул и C++, у тебя будут объекты на каждый список, будут объекты для каждого элемента списка и ты будешь работать как бы с ними. Будешь просить добавить новую тудушку в список, можешь просить "Завершить" конкретный элемент списка и т.д. В этом примере "объект" является не более чем границей зоны ответственности на уровне рантайма. То есть у тебя есть "внутри" и "снаружи", есть другие объекты с которыми нам надо взаимодействовать. В языках типа Erlang за "границы" отвечают микротреды. То есть это такие вот штуки на уровне рантайма которые позволяют тебе изолировать состояние. На каждый список будет тред, который отвечает только за список. Для работы отдельными элементами и их деталями мы можем сделать свои треды.... по треду на каждый агрегат (штуки учавствующие в бизнес транзакции). Ну и все это обменивается сообщениями. Теперь важный момент отличающий "вызов метода объекта" от "отправки сообщений" - наличие мэйлбоксов. То есть наш "эктор" отправляет сообщение другому, и все сообщения являются асинхронными по своей природе. Отправил сообщение и все. Положил его в мэйлбокс эктору а эктор как освободится почитает. Он может тебе прислать какой-то результат и положить уже в мэйлбокс первого эктора и т.д. Это решает вопрос синхронизации действий. Ну и так как "общих данных между экторами нет" - нет необходимости хоть что-то лочить (мэйлбоксы можно тоже лок-фри сделать). У тебя в целом получается полностью неблокируемая система. Для телекомов это вообще было смертельно важно потому именно в этом контексте эрланг и развивался.

вот.... как-то так если кратенько суть....

Uiiuviiw
20.03.2018
07:19:50
по последнему абзацу... то есть методоа у акторов нет? двухсторонние сообщения?

Sergey
20.03.2018
07:22:55
по последнему абзацу... то есть методоа у акторов нет? двухсторонние сообщения?
насколько я помню там выделяют просто два типа сообщений - что-то типа команды и что-то типа запросов. Команда ничего тебе не возвращает потому что нет гарантии когда она будет выполнена. Запрос (ask) - ты можешь спросить что-то у эктора и тогда твой эктор задавший вопрос будет ждать ответа.

как ты понимаешь - все упирается как раз таки в рантайм который все это разруливает. В языках типа java/scala для этого нужны жуткие вещи вроде akka, а для эрланг это все есть на уровне виртуальной машины самого языка, родная фича для платформы.

https://arxiv.org/vc/arxiv/papers/1008/1008.1459v8.pdf

можешь еще вот с этой публикацией ознакомиться

Страница 563 из 785