
Сергей
03.11.2016
13:59:07
кто-нибудь юзал DCI паттерн с рельсами?

Igor
03.11.2016
14:07:49
http://dci-in-ruby.info/
це есть пример на рельсе
староват правда

Google

yopp
03.11.2016
14:12:20

I
03.11.2016
14:12:32

yopp
03.11.2016
14:12:38
где пишут-то?

I
03.11.2016
14:12:49
в самой вакансии
а так надо всегда писать свой максимум

Konstantin
03.11.2016
14:23:07
@dd_bb в превью видно

yopp
03.11.2016
14:26:31
из того что я видел, контексты получаются жутко тяжелые и размазанные

Сергей
03.11.2016
14:27:20
в этом и есть исскуство DCI

yopp
03.11.2016
14:27:26
в итоге у тебя есть один класс, в котором один метод

Сергей
03.11.2016
14:27:29
один бизнес-кейс == один контекст

yopp
03.11.2016
14:27:31
в котором 10 объектов
и вся логика в 10 объектах, которые опять куда-то размазаны

Google

Сергей
03.11.2016
14:28:01
так ну ясно)
это из-за того, что многим сложно отказаться от мышления контроллерами и моделями

yopp
03.11.2016
14:28:33
ну вон даже в статье на том сайте
перевод между счетами уже три класса

Сергей
03.11.2016
14:28:54
не три класса
а один класс и 2 модуля

yopp
03.11.2016
14:29:27
вот и я говорю, три класса :)
плюс вот такое: source_account.extend SourceAccount

Сергей
03.11.2016
14:30:40

yopp
03.11.2016
14:30:49
ой всё
модуль сам по себе никакого смысла не имеет, если брать концепцию языка
модуль это разносчик методов

Сергей
03.11.2016
14:31:17
тонкие контроллеры, тонкие модели, и классы-кейсы
по мне отлично
просто нужно учиться работать с этим

Антон
03.11.2016
14:31:32

Sergey
03.11.2016
14:31:53

yopp
03.11.2016
14:31:57
https://www.sitepoint.com/dci-the-evolution-of-the-object-oriented-paradigm/
плюс в этом примере я вижу огромную проблему
в def transfer_out amount спрятали context.destination_account.transfer_in amount
короче никакой проблемы не решили, а создали кучу новых

Сергей
03.11.2016
14:33:41

Sergey
03.11.2016
14:34:06
Я уже благодарен за попытку )

Google

Сергей
03.11.2016
14:35:00
короче никакой проблемы не решили, а создали кучу новых
этому паттерну более 20 лет
То что Вы не умеете его использовать, не работает в Вашу пользу
А всего лишь доказывает, что паттерн не лишен недостатков, как и все остальные.
Использование паттерна в соответствии с рекомендациями, решает проблемы сложных бизнес-кейсов, а также тестирования этих самых кейсов

yopp
03.11.2016
14:35:24
пфф
если мне с первого раза не могут показать нормальный кейс, где паттерн оправдан, то о чём мы тут вообще говорим?
в показаном кейсе, паттерн сделал всё сильно сложнее, чем просто банальный service object

Сергей
03.11.2016
14:36:11
пфф
не вижу смысла дальше переписываться

Антон
03.11.2016
14:36:27
если нет простого примера, то это заумь, маркетинг, ватевар еще

yopp
03.11.2016
14:36:48
ну окей!

Сергей
03.11.2016
14:37:39

yopp
03.11.2016
14:37:41
потому что проблему нормально не смогли сформулировать
идее что земля плоская уже сколько лет?

yopp
03.11.2016
14:38:07
тоже паттерн-же!

Антон
03.11.2016
14:38:26

Сергей
03.11.2016
14:38:38

yopp
03.11.2016
14:39:05
ты тоже не можешь нормально объяснить какую конкретно решает этот паттрен

Сергей
03.11.2016
14:39:23
ок
Огромные и сложные бизнес-кейсы

yopp
03.11.2016
14:39:38
что значит «огромные и сложные»?

Google

Сергей
03.11.2016
14:39:40
размазанная бизнес-логика по куче объектов

yopp
03.11.2016
14:39:52
что значит «размазанная бизнес-логика»?
ты можешь простой пример придумать?
и показать MVC vs DCI
или любой другой паттерн сравнить с DCI
где будет очевидно приемущество DCI?

Сергей
03.11.2016
14:40:56

Admin
ERROR: S client not available

Сергей
03.11.2016
14:41:06
а использовать их вместе

Igor
03.11.2016
14:41:11
https://www.youtube.com/watch?v=4UhESx6vK4c
впринципе это видео хорошо описывает DCI

yopp
03.11.2016
14:42:20

Сергей
03.11.2016
14:42:29
что значит «размазанная бизнес-логика»?
это значит если взять бизнес-кейс, и посмотреть по коду места его реализации и увидеть, что в модели куча методов, в контроллере код который использует кучу моделей.
Нельзя просто взглянуть в одно место и посмотреть как это работает.
В модели есть куча методов и никак нельзя понять где используются методы

yopp
03.11.2016
14:42:41
так и в DCI нельзя!

Сергей
03.11.2016
14:42:55

yopp
03.11.2016
14:42:56
если у тебя будет сложная логика, у тебя будет три ведра контекстов, четыре вагона ролей
и в итоге у тебя всё опять размажется по куче мест

Сергей
03.11.2016
14:43:15

yopp
03.11.2016
14:43:32
ну вот на простой трансфер между счетами уже класс и два модуля

Сергей
03.11.2016
14:43:45
всё в одном файле

Google

yopp
03.11.2016
14:43:48
лол
аргументы один круче другого
там из логики только проверка баланса
теперь давай подумаем о простых вещах, например кредитном лимите, лимите на операции, кешбеке?

Сергей
03.11.2016
14:44:32
так попросили простой пример
польза DCI видна только на сложных кейсах

yopp
03.11.2016
14:44:55
ох

Сергей
03.11.2016
14:45:05
тоже самое как вообще использовать дико сложный фреймворк для очень простых вещей

Sergey
03.11.2016
14:45:06
Можно на правах нуба задам вопрос - а какую архитектуру предпочитаете, Вы, @dd_bb ?

yopp
03.11.2016
14:45:18

Сергей
03.11.2016
14:46:18
отличный ответ, чо

yopp
03.11.2016
14:46:33
какой вопрос, такой ответ, чо!
мне нравится решать конкретные проблемы, а не абстрактные в вакууме

Сергей
03.11.2016
14:47:06
можно было не отвечать

yopp
03.11.2016
14:47:27
по этому мне вот эти абстрактные вещи про «DCI работает только на больших кейсах» полная хуета

Антон
03.11.2016
14:47:27
Можно!
def transfer amount
in_context do
source_account.transfer_out amount
end
end
я не понимаю что это знанчит
читаю: вывести деньги со счета
эмэмэм
куда вывести?

Сергей
03.11.2016
14:47:49
source_account
ну хз
я так-то согласен что пример не очень