SOLID - набор из пяти принципов проектирования приложения.
Single Responsibility - речь про то что конкретная ответственность
закреплена за конкретной сущностью, будь то метод, или класс, или некая бизнес логика.
То есть, если у нас есть например класс отвечающий за реализацию логики работы с данными,
и реализован функционал который позволяет общаться с БД,
то логики не связанной с общением с БД для данного примера, там не должно быть,
не должно быть бизнес логики, логики контроллера, и т.д.
Если реализуется какой то метод который отвечает за сортировку массива,
то реализации логики связанной с чем то другим в методе не должно быть.
Open Close - этот принцип говорит про то что если мы хотим
в компонент добавить какую нибудь новую фишку, то мы должны дизайнить
этот компонент так, что бы была возможность добавить фишку добавлением кода,
а не изменением старого.
Liskov's Subtitution - принцип подстановки, насколько я понял речь идет про то что,
например, если есть компонент А, который зависит от интерфейса(B),
есть реализация интерфейса Bimpl, то если заменить(подставить)
другую реализацию, это не должно повлиять на компонент A.
Если такое происходит, то можно создать новую реализацию для интерфейса B,
но она уже не будет подходить под старые критерии, и тогда в коде начинается такая штука:
if get class 1 то делай то то, else делай другое, в таком случае будет нарушение
принципа.
Если выразить идею принципа, то озвучил бы я ее так: создание и использование любой другой
имплементации интерфейса не должна приводить к изменению в компоненте зависимом от
этого интерфейса.
Interface Segregation - разделение интерфейса, где несколько интерфейсов
лучше чем один большой. Почему так, потому что если есть один большой интерфейс, то тот
компонент который от него зависит, будет зависеть от кода который ему не нужен, чем больше
будут изменяться, дописываться реализации интерфейса, тем больше вероятность что, что то
изменится в компоненте зависимом от интерфейса, поэтому важно зависеть как можно сильнее
от меньшего количества логики.
Dependency Inversion - инверсия зависимостей, эта та вещь которую я описывал
когда писал о полиморфизме, то есть возможность за счет полиморфизма развернуть зависимость
compile time в другую сторону.
Далее насчет DI, где зависеть должны от абстракции, а не от конкретной реализации, не всегда, но
в определенных моментах, идея в чем, если конкретная реализация стабильная, то есть она не
меняется постоянно, мы можем от нее зависеть, если она постоянно меняется, мы не можем
от нее зависеть.
Для реализации нормального дизайна, насколько мне известно, еще дополнительно нужно разобрать
Абстрактную фабрику(паттерн), его я еще буду разбирать и потому много сказать об этом не могу.
sectumsempra
21 уровень
№4. SOLID
Комментарии (19)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Сергей Я Java Developer в DXC/Luxoft Expert
27 ноября, 19:39
Более правильно читать про принципы из следующих статей и видео:
- Принципы SOLID, которые сделают код чище
- Как применять принципы SOLID на практике, стрим о проблемах на собеседовании, как в Java эффективно работать с файлами и как найти работу в США, живя в другой стране
- Решаем задачу с собеседования на Java-разработчика, разбираем принципы SOLID, учимся на конкурсах по кодированию и повторяем быструю сортировку в Java
0
sectumsempra
27 ноября, 19:44
хорошие статьи, спасибо Сергей)
0
Сергей Я Java Developer в DXC/Luxoft Expert
26 ноября, 18:50
SOLID - не имеет отношения к проектированию ПО.
-10
sectumsempra
27 ноября, 08:25
Конкретнее и с аргументами, пожалуйста, почему ты так считаешь?
Когда речь идет о принципах на подобие солид, ооп и т.п. я руководствуюсь идеями и мыслями гораздо более опытных разработчиков чем я, это не просто мои слова)
0
Денис Enterprise Java Developer
27 ноября, 10:05
Вот мне тоже стало любопытно послушать к чему имеет отношение SOLID.
Я безусловно могу ошибаться, но набор из пяти принципов призванный улучшить расширяемость, поддерживаемость и читабильность приложения имеет некоторое влияние на финальный вид этого самого приложения... если этими принципами конечно пользоваться.
Другой вопрос что формулировочка у автора правда спорная.... как говорится не хлебом единым... а рекомендация не догма.
+4
sectumsempra
27 ноября, 10:37
Я вижу это холиварная тема)))
Есть ли у нее точное определение? в Википедии подойдет?)
Вот да, поддерживаю эту мысль..
Ребята, вот я читал ваши статьи, посты, комментарии, они очень полезные, много нового позволяют узнать.
Но со своей стороны прошу объяснять свои мысли, почему так считаете, даже так, какая конкретно формулировка Денис тебе кажется более приемлемой, вместо моей тоже какой именно??
Потому что я делаю посты, как раз для таких моментов, как я писал в посте про ООП, где я объяснял что бы если я где то не так понял того человека который мне рассказывал про это, то подкорректировать мысль, что бы я смог собрать до кучи информацию и донести верно идею, тому же собеседующему меня человеку.
Если он мне скажет - "Ну спорная у тебя формулировка" и задаст следующий вопрос, это будет странно, как минимум.
Или если скажет мне - "Solid не имеет отношения к проектированию ПО" и точка, а я распинался пол часа, тоже странно, зачем вообще так отвечать)))))
Насчет Сергея, я вообще не пойму к чему комментировать одной строкой, сомнительной формулировки, в том плане что очень абстрактно без пояснений, тк то что я писал в посте я хотя бы расписал, и от нее вы отталкиваетесь, а вбросить одну строку, и не как не объяснить свою мысль на этот счет, ну такое...
0
Денис Enterprise Java Developer
27 ноября, 11:54
В твоём случае формулировка звучит слишком... абсолютной я бы сказал. Более корректно было бы сказать что приложения написанные на объектных языках или использующие концепции ООП проектируются (могут проектироваться) в том числе с использованием всех или части принципов SOLID, но не руководствуясь исключительно ими.
Вообще многие темы в программировании холиварные, думаю ноги у этого растут из того что каждая задача имеет свой контекст, даже самая типовая. И именно от контекста зависит будут задачу делать "качественно", "быстро" или "дешево" (нужные два подчеркнуть).
+3
sectumsempra
27 ноября, 12:23
Угу, понял, вот спасибо, теперь я буду уточнять, что, я так понял не всегда соблюдается солид даже на реальных коммерческих проектах, и не им единым так сказать..
Вероятно так, собственно потому я и старался расписать каждый принцип, что бы в какой то степени можно было прикопаться(аргументированно) =)
0
Сергей Я Java Developer в DXC/Luxoft Expert
27 ноября, 17:31
потому что, при проектировании ПО ты руководствуешься паттернами проектирования, исходя из своих интеграций, методологий, да даже составе команды. SOLID тебе же подсказывает
как писать код, чтобы его можно было поддерживать. Это методика, советы, но не правило которому можно следовать, а можно и нет. Не зря бытует выражение "solid головного мозга". И да, все крайности приводят к тому, что можно превратиться в подобие Бугаенко Е.. p.s. Отвечать же человеку, который на площадке с набором точных статей пишет на форуме их своеобразную интерпретацию, часто не верную (на что ему не раз уже указывали), не горю желанием.
0
sectumsempra
27 ноября, 19:01
Вот я такого и не говорил, что солид это панацея, не нужно придумывать, мол я такое утверждаю, а потом опровергать, по сути уже свою придуманную строку, очень удобно)
Не зря бытует выражение "solid головного мозга"
Первый раз такое слышу
Кхм, писать код.. а также проектировать архитектуру приложения, разве не так?
разве не про это говорит например DI, или IS, или Liskov s. и т.д.
Т.к. речь идет не только о коде но и о модулях, структуре, и т.д.
Открывая да туже википедию, там так и пишется
А можешь допустить мысль, что именно ты запутался?? или это исключено?
Отвечать же человеку, который на площадке с набором точных статей пишет на форуме их своеобразную интерпретацию
- Прочитай мой первый пост, я там объяснил цели и смысл того почему я делаю эти посты.
- Ну и раз не имеешь желания отвечать,то не отвечай =) все просто, ну и не комментируй, потому что тогда это уже тупо) 0
Денис Enterprise Java Developer
27 ноября, 19:03
Ну в целом я так и подумал, рекомендация не есть требование :)
0
sectumsempra
27 ноября, 19:07
Отвечая всем сразу, я ни где не написал что солид это требования,
однако далее всегда буду уточнять что это рекомендации, что бы не возникали вопросы)
0
Сергей Я Java Developer в DXC/Luxoft Expert
27 ноября, 19:12
Можешь распечатать и в рамку поставить, и не забывай, что есть теоретики, а есть практики. И правда не понимаю зачем тут тонна агрессивного копипаста с комментариями часто из чуши, потому что ты не понимаешь темы хотя бы в рамках того, что не применяешь эти темы ежедневно изо дня в день в работе, да еще и не прислушиваешься к тем кто комментирует это хозяйство, хотя уже прошло полтора года как ты занимаешь на платформе, но за это время дело дошло по интерпретации статей на форум. Ок, что уж там
0
sectumsempra
27 ноября, 19:22
Так ты и не комментировал ничего, из тебя пришлось вытягивать хоть какие то ответы,
ты тупа написал что солид не принципы ПО и ливнул из чата)
Тебе Денис даже отписал что хотел бы послушать твою интерпретацию.
Действительно я же каждый день захожу на платформу и часами занимаюсь,
а не сижу без света часами из за войны, как например сегодня пол дня...
Сергей ты очень агрессивный человек, не добрый и не культурный, и хорошего объяснения от тебя не дождаться, только критику в формате "ты тупой потому не знаешь, а я умный но пруфать не обязан".
Просто перестань делать комменты под моими постами, не трать свое драгоценное время..
0
Сергей Я Java Developer в DXC/Luxoft Expert
27 ноября, 19:26
я тебе написал ране, что на платформе по этим темам находятся полные и правильные статьи с примерами и твоя интерпретация не требуется так как в ней ошибочные выражения, которые могут другим людям навредить.
0
sectumsempra
27 ноября, 19:31
Я указывал что мои посты это не статьи, и это не спецификация, хочешь дополнить, или объяснить что не так, делай это, а просто рассказывать мне что я жутко не догоняю используя какую то пассивную агрессию это больше вредит и засоряет чат...
0
Сергей Я Java Developer в DXC/Luxoft Expert
27 ноября, 19:37
так я и дополнил, что ерунда, опасная для начинающих, вот только тебе это не нравиться.
0
sectumsempra
27 ноября, 19:41
Все окей, я тебя услышал, хочешь верь хочешь нет, я возьму твои мысли по поводу солид к сведению.
0
sectumsempra
21 ноября, 10:56
interesting cases
Денис
"Более корректно было бы сказать что приложения написанные на объектных языках или использующие концепции ООП проектируются (могут проектироваться) в том числе с использованием всех или части принципов SOLID, но не руководствуясь исключительно ими."
Сергей Я
"при проектировании ПО ты руководствуешься паттернами проектирования, исходя из своих интеграций, методологий, да даже составе команды. SOLID тебе же подсказывает
как писать код, чтобы его можно было поддерживать. Это методика, советы, но не правило которому можно следовать, а можно и нет. Не зря бытует выражение "solid головного мозга"."
+8