
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
ну с ходу конкретный пример не могу дать

Anton
08.08.2018
12:10:58

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

Google

Anton
08.08.2018
12:12:01
Да и можешь написать ещё штуку, которая новую логику под определенный случай сделает

Tim
08.08.2018
12:13:00
вернее можно сказать смешиваешь чтоли
ну и атомарные классы это не всегда жесткий 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

Максим
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

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

Google

Dmitriy
08.08.2018
12:32:20

Tim
08.08.2018
12:32:30

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

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

Anton
08.08.2018
12:33:11

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

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

Admin
ERROR: S client not available

Anton
08.08.2018
12:33:54

Tim
08.08.2018
12:34:14
и верю в принципы ооп
типа методы с кэшированием
вот тогда скорее всего не атомарный

Anton
08.08.2018
12:35:27

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

Anton
08.08.2018
12:36:40

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
ну строку и класс нельзя сравнивать
да, плохой
смотри