
Андрей
28.06.2018
12:10:20
и это не вещь в себе
это тупо набор правил, которые помогают поддерживать enterprise проекты
которые появились в результате познания боли от их невыполнения

Диоген
28.06.2018
12:11:14

Google

Tolegen
28.06.2018
12:11:28
Это о том, что писать надо вдумчиво. Нужно уметь видеть, где какой принцип нарушается и осознавать ради чего. Хорошо ещё коммент добавлять, что сделано именно таким образом потому, что так выгоднее в производительности или есть такое-то ограничение в текущей архитектуре.


Sergey
28.06.2018
12:12:02
не нужно доводить до абсурда эти понятия
Не нужно врать. SOLID по "Clean architecture" описан совершенно не так как его описывают левые люди цитируя википедию. В википедии эти пять букв оторваны от реальности и перевраны сообществом, в книге четко изложено что такое SOLID и почему неследование SOLIDу ведет к болям в поддержке. Иньекции через autowired - не SOLID. В итоге мы и лабаем не солид - редко когда контракт сервиса имеет более одной имплементации. Редко когда сервис действительно сингл-респонсибл. Со временем это почти всегда вырождается в говнище по 100500 строк, когда заказчики начинают менять требования и внезапно абстракции теряют стабильность. И я бы рад увидеть исключение из правил, но не вижу нигде.

Диоген
28.06.2018
12:14:12
Почему?
Ну это была полушутка, но с долей правды.
Вот если бы чел щас привел пример, где сприговское нарушение солида усадиживает людей на бутылку, было бы другое дело

Cargeh
28.06.2018
12:15:39


Tolegen
28.06.2018
12:16:04
Ну и не нужно воспринимать эти рекомендации как абсолют. Всегда будут трейдоффы. Где какой трейдофф делать и когда приходит с опытом. В любом случае полезно прикидывать свой код на эти принципы и понимать, почему делается именно так и почему делать так не стоит и какие последствия каждое решение будет иметь.

Sergey
28.06.2018
12:16:13

Диоген
28.06.2018
12:16:56
s o l i d

Tolegen
28.06.2018
12:17:27

Sergey
28.06.2018
12:17:29

Tolegen
28.06.2018
12:18:13
По моему опыту класс с именем Service в том или ином виде обычно превращается в солянку из процедур.

Google

Tolegen
28.06.2018
12:18:29
С ифами и запутанной логикой

Sergey
28.06.2018
12:18:53

Sergey
28.06.2018
12:18:58

Таир
28.06.2018
12:19:20
вообще, этот СОЛИД и понимание его вызывают много споров, что уже само по себе вызывает сомнения

Sergey
28.06.2018
12:19:33
If-метрика тут отлично работает кстати

Таир
28.06.2018
12:20:14
пока СОЛИДность нельзя оценить программно, споры не прекратятся

Tolegen
28.06.2018
12:20:21

Диоген
28.06.2018
12:20:27

Таир
28.06.2018
12:21:03

Sergey
28.06.2018
12:21:19

Sergey
28.06.2018
12:21:28
ты написал 79 символов, а мог бы написать 1.
В исходном мессаге я писал 3 буквы - редко вообще можно увидеть наршения солид поодиночке. Без аргументации эти буквы не значат ничего, поэтому ответ прежний - повторяться не буду

Sergey
28.06.2018
12:21:53
Слава богу у нас покрытие позволяет и никто не рвет глотку в погоне за скоростью.

Диоген
28.06.2018
12:22:56

Митко Соловец?
28.06.2018
12:23:00
ребят
срач ни о чем
@skapral тебе бан в следующий раз за разжигание на пустом месте

Shumilin
28.06.2018
12:23:32
Больше 1к сообщений за сутки не прочитанных)) =

Vit
28.06.2018
12:24:00
Вчера эклипс фотон выпустили

Oleksandr
28.06.2018
12:25:04
а обсудили уже, с какого конца яйца разбивать?

1337
28.06.2018
12:25:26

Google

Tolegen
28.06.2018
12:26:23


Sergey
28.06.2018
12:26:28
Хайлатни сообщение, про нарушение LSP.
Я ваш срач пропустил, но мне правда интересно прочитать.
Ладно, хрен с ним. LSP утверждает что если компонент использует базовый тип S, то он должен работать as-designed со всеми подтипами T от S. Но так как autowiredу у спринга надо знать что конкрентно нужно инжектить в конструктор, просто оставить аргумент базового типа в конструкторе не получится. Это агитирует к двум вещам - либо завязать конструктор на имплементацию и/или дав ему конкретное имя и тип - что херит LSP (мы не можем больше реюзать сервис с произвольными подтипами), либо держать в контексте всегда одну имплементацию, чтоб уж спринг точно ничего не попутал. Доходит до того что некоторые блоггеры утверждают что интерфейсы не нужны. Один хер - больше одной имплементации никогда не будет

Oleksandr
28.06.2018
12:26:54

Берял
28.06.2018
12:27:27

Денис
28.06.2018
12:27:53

Берял
28.06.2018
12:28:13

1337
28.06.2018
12:28:47

Берял
28.06.2018
12:29:22

Oleksandr
28.06.2018
12:29:26

Vit
28.06.2018
12:29:40

Cargeh
28.06.2018
12:30:36

Денис
28.06.2018
12:31:00

Konstantin
28.06.2018
12:31:21
вам за это наверное еще по 5+к бачей в месяц платят
)))

Денис
28.06.2018
12:31:40
)))
Лиспер в чате, расходимся.

Берял
28.06.2018
12:31:42

Oleksandr
28.06.2018
12:31:57

Sergey
28.06.2018
12:31:58
Интерфейс же Boilable

Берял
28.06.2018
12:32:07

Oleksandr
28.06.2018
12:32:17

Google

Tolegen
28.06.2018
12:32:42


Диоген
28.06.2018
12:32:46
Ладно, хрен с ним. LSP утверждает что если компонент использует базовый тип S, то он должен работать as-designed со всеми подтипами T от S. Но так как autowiredу у спринга надо знать что конкрентно нужно инжектить в конструктор, просто оставить аргумент базового типа в конструкторе не получится. Это агитирует к двум вещам - либо завязать конструктор на имплементацию и/или дав ему конкретное имя и тип - что херит LSP (мы не можем больше реюзать сервис с произвольными подтипами), либо держать в контексте всегда одну имплементацию, чтоб уж спринг точно ничего не попутал. Доходит до того что некоторые блоггеры утверждают что интерфейсы не нужны. Один хер - больше одной имплементации никогда не будет
Лан, я мб тупой, но принцип говорит только о том, шо везде где ждут батю, можно отправить сыну-корзину.
И вы действительно можете подсунуть туда любую имплементацию.
А то как спринг уже их подсовывает туда и то шо их там больше, чем один - это уже другое дело.
Не увидел нарушения принципа, в общем, соре.


Берял
28.06.2018
12:34:14
а аннотации это просто метаинформация

Sergey
28.06.2018
12:36:38

Tolegen
28.06.2018
12:37:17

Cargeh
28.06.2018
12:37:21

Admin
ERROR: S client not available

Oleg
28.06.2018
12:37:57
Отец - сын - это не очень метафора, потмоу что class Batja extends Son, а интуитивно кажется по-другому

Tolegen
28.06.2018
12:38:15
То есть тот факт, что вы объявили интерфейс и зависите от него не значит, что вы уменьшили связность.

Диоген
28.06.2018
12:38:18

Sergey
28.06.2018
12:38:23

Oleg
28.06.2018
12:38:43

Диоген
28.06.2018
12:39:10

Sergey
28.06.2018
12:40:24

Sergey
28.06.2018
12:40:48

Vit
28.06.2018
12:41:41
Почему молчат спрингосиляторы ?

Диоген
28.06.2018
12:42:11

Sergey
28.06.2018
12:42:19

Google

Диоген
28.06.2018
12:42:39
О чем молчат спрингоосиляторы?

1337
28.06.2018
12:43:10

Sergey
28.06.2018
12:43:21

1337
28.06.2018
12:43:59
пропустишь аннотацию, бин не провалидируется – лишат дневного пайка

Диоген
28.06.2018
12:44:11
Просто по вашей же логике, Сергей, явная передача любого настоящего аргумента в любой конструктор это нарушение ЛСП, так как туда в конечном итоге передается какая-то конкретная сущность.
>И говорить, что это вовсе не каплинг одной конкретики (сервиса куда инжектят) на другую (сыновей) - врать самому себе.
Собственно, чтобы не нарушать ЛСП, лучше не использовать.. конструкторы?

Quantum Harmonizer
28.06.2018
12:44:40

Диоген
28.06.2018
12:44:41
Или джява? Или ди?

Sergey
28.06.2018
12:44:42

Денис
28.06.2018
12:44:46

Quantum Harmonizer
28.06.2018
12:45:17

Sergey
28.06.2018
12:45:20

Диоген
28.06.2018
12:45:46

Денис
28.06.2018
12:46:03

Диоген
28.06.2018
12:46:06
Вы в любом случае хоть спрингом, хоть еще как будете эти сущности создавать.

Sergey
28.06.2018
12:47:15

Ilia
28.06.2018
12:47:20
я думал этот спор вчера угас...

Sergey
28.06.2018
12:47:54

Денис
28.06.2018
12:48:23

Tolegen
28.06.2018
12:50:01