@proRuby

Страница 1340 из 1594
Tim
08.08.2018
12:01:08
самый плохой способ - пилить её хер знает где, контроллер, модель и т.д., при чем в процедурном стиле

сёрвис обжект позволяет вычленить эту логику под лозунгом "а, ну это сёрвис, давайте вынесем в отдельный класс"

и часто, как мне кажется, эта логика в последствии выносится сразу целым куском

вот. это лучше, чем прошлый вариант, но все равно антипаттерн имхо правильным путём было бы обозначить все атомарные (ну или около-атомарные, не суть) сущности, участвующие в логике, и описать как они между собой взаимодействуют

Google
Tim
08.08.2018
12:04:43
и дальше из этого, как из конструктора лего, пилить логику. Можно это всё обрамить сёрвис обжектом, но не суть, подача не так важна

вот. а "паттерн" сёрвис обжект, как мне кажется, он говорит: "братан, возьми этот кусок логики (и обмажься им), и вынеси в отдельный класс (или модуль, но это ещё хуже), в СЕРВИС"

фух, я выговорился

ну то есть происходит по сути кидание говна под ковёр. и к тому же мельчайшая частица взаимодействия в этом "паттерне" – это сервис. надо ли говорить, что это не может быть гибким?

Максим
08.08.2018
12:09:41
можешь пример дать как тебе кажется правильно и тот же функционал но не правильно?

я думаю тем кто допускает такие ошибки легче было бы на примере понять "что не так"

мне например было бы

Tim
08.08.2018
12:10:57
ну с ходу конкретный пример не могу дать

Tim
08.08.2018
12:11:08
может придумаю чуть позже

Anton
08.08.2018
12:11:34
Так это рейлсвей обычный
И проблема тут глубже чем кажется

Tim
08.08.2018
12:11:40
Так это рейлсвей обычный
>мельчайшая частица взаимодействия в этом "паттерне" – это сервис ?

Dmitriy
08.08.2018
12:11:49
и дальше из этого, как из конструктора лего, пилить логику. Можно это всё обрамить сёрвис обжектом, но не суть, подача не так важна
сложно поддерживаемый подход имхо. Вносит много зависимостей. Вот есть какой-то сервис обджект, в нем инкансулирован код конкретного бизнес процесса. Он изолирован и это хорошо. Нежели изменил в какой-то детальке код, в 10 местах все сломалось

Google
Tim
08.08.2018
12:13:00
вернее можно сказать смешиваешь чтоли

ну и атомарные классы это не всегда жесткий coupling

в общем когда он есть наоборот что-то сделано плохо, и классы пилятся атомарными, как мне кажется, в том числе чтобы уменьшить coupling

ну я ещё не пришёл к определённому мнению по этому поводу пока

Так зачем писать такой переиспользуемый код?
ну да, наверное частое переиспользование вносит coupling

можешь пример дать как тебе кажется правильно и тот же функционал но не правильно?
я не знаю насколько это верно, но у меня в последнее время сложилось такое мнение, что: если в классе есть приватные методы, которые принимают параметры, то класс не атомарный

Максим
08.08.2018
12:24:43
хм

интересная мысль

Tim
08.08.2018
12:24:54
ну то есть private def a(b) ... end

Максим
08.08.2018
12:24:56
попробую сегодня посмотреть свои сервисы в которых есть

Alexander
08.08.2018
12:24:56
ну да, наверное частое переиспользование вносит coupling
какие из сервис обжектов ты использовал? например - трейлблейзер оперейшен, драй транзакшен, интерактор, лайт сервис. вот что на память вспомнил

Максим
08.08.2018
12:25:01
и сделать чтоб без них

Tim
08.08.2018
12:25:38
это скорее всего означает что класс 1) сложный 2) может быть разделён на меньшие сущности

Максим
08.08.2018
12:25:52
ребят что думаете?

мне кажется в этом есть доля истины

Google
Tim
08.08.2018
12:26:07
ну это моя эвристика

да, мне тоже интересно было бы услышать что другие думают

собственно ради этого я и озвучил эту мысль

Alexander
08.08.2018
12:27:38
не, я про обычный PORO
скорее всего ты придешь к какому нибудь сервис обжекту. но самописному, что будет по определению хуже чем те, что я перечислял

потому что эту проблему уже решили умные дядьки + сообщество

Dmitriy
08.08.2018
12:28:29
тебе ничего не мешает так же изолировать логику "бизнес процесса" используя атомарные (или около-атомарные классы)
а где ты хранишь атомарные классы бизнес-логики, на основе которых делаются сервис обджекты?

Максим
08.08.2018
12:29:17
типа они же не могут знать какая у тебя бизнесслогика

ну в плане да они дают dsl

Tim
08.08.2018
12:29:47
а где ты хранишь атомарные классы бизнес-логики, на основе которых делаются сервис обджекты?
ты хочешь сказать, что если эти классы можно увидеть, то это не изоляция логики?

Максим
08.08.2018
12:29:48
но речь то тут о другом как я понял

Tim
08.08.2018
12:30:08
изоляция логики происходит в твоем например сервис обжекте который ты дёргаешь снаружи

ну понятно что можно реюзнуть те классы и всё такое

ну не реюзай тогда

Максим
08.08.2018
12:31:35
а что плохого в реюзабельности атомарных классов

ониж для того и атомарные

чтоб ими пользоваться

Alexander
08.08.2018
12:31:51
как решение из гема отличается от poro?
получился неподдерживаемый монстр из классов, который ты назовешь вершиной ООП, но любой кто придет после тебя охуеет

Tim
08.08.2018
12:32:13
ну типа ну хз как бы да и как бы нет

Google
Dmitriy
08.08.2018
12:32:20
ты хочешь сказать, что если эти классы можно увидеть, то это не изоляция логики?
у меня возникло подозрение, что код будет сильно разбросан по проекту в этом случае

Alexander
08.08.2018
12:32:39
это как раньше в эпоху пхп все писали свой "фреймворк", теперь ты так же хочешь написать свой сервис обжект

Tim
08.08.2018
12:32:44
ну я не хочу, я говорю, что это говно

и антипаттерн

Anton
08.08.2018
12:33:11
ну да, наверное частое переиспользование вносит coupling
Жду когда разочаруешься в паттернах и ООП (без агрессии и чего-то ещё)

Tim
08.08.2018
12:33:46
ну я не верю в паттерны на самом деле

верю в антипаттерны

Roman
08.08.2018
12:33:52
жду когда разочаруешься в жизни

Admin
ERROR: S client not available

Tim
08.08.2018
12:34:14
и верю в принципы ооп

Вот тут не согласен
с поправкой, ещё нельзя эти параметры вынести в переменные или методы

типа методы с кэшированием

вот тогда скорее всего не атомарный

Alexander
08.08.2018
12:35:27
Да это все фигня и просто сахар к
ну он дает тебе и другим тиммейтам конвеншен как писать

Tim
08.08.2018
12:36:04
хотя бы потому что присутствует логика, которая не разрешается внутренним состоянием класса

Google
Anton
08.08.2018
12:36:18
и верю в принципы ооп
Уже год не пишу по принципам ооп, брат жив

Dmitriy
08.08.2018
12:36:25
нет, почему?
мне понравился подход в ТБ, где все скомпоновано по концептам. Концепт - область бизнес-логики, в ней лежат операции (сервис обджекты), политики, вьюхи-объекты. Там же можно модули-хелперы складывать, например, с атомарными вещами, что ты описываешь. В этом случае код в одном месте, не прыгаешь по всему проекту

Tim
08.08.2018
12:36:34
Уже год не пишу по принципам ооп, брат жив
а батя говорит, молоца, хорошо сделал?

Tim
08.08.2018
12:36:56
Alexander
08.08.2018
12:38:23
Да ее и руками сделать можно быстро
зависит от опыта, как в итоге получится

Tim
08.08.2018
12:39:06
зависит от опыта, как в итоге получится
ну все вообще зависит от людей которые пилят продукт

idiot-proof процесс нельзя придумать

Anton
08.08.2018
12:39:37
Уже год не пишу по принципам ооп, брат жив
ну и не стоит на меня ровняться, я живу в другом мире на самом деле

Tim
08.08.2018
12:39:41
потому что свойство идиотов в том, что они умеют обходить идиот-пруф процессы

Вот тут не согласен
контр-пример?

Anton
08.08.2018
12:44:38
если атомарность - 1 строка, то да, не атомарный

если атомарный == одна функция, то тут могут возникнуть моменты, когда логика большая (например кондишен) и для понимания его лучше обернуть в метод

Tim
08.08.2018
12:46:32
можем принять что атомарный значит неделимый

Anton
08.08.2018
12:47:08
можем принять что атомарный значит неделимый
так не делимый - субъективное значение

Tim
08.08.2018
12:47:22
вероятно

Anton
08.08.2018
12:47:50
вот пример user && (user.admin? || user.manager?) - делимая строка?

(плохой пример на самом деле)

Tim
08.08.2018
12:48:16
ну строку и класс нельзя сравнивать

да, плохой

смотри

Страница 1340 из 1594