|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
mayton Идея овер-инжинернига описана в статье на хабре https://habr.com/en/post/113128/ К сожалению в Spring заходят новички которых сразу учат длинным реализациям. Думаю что через лет 5 такого учения они будут уже не в состоянии написать простой код. Такая проф-деформация специфичная именно для Spring-сегмента . По-сути в этом и был мой вопрос. Излишняя привязанность к spring, ктр. накладывает определенные ограничения (одиночка, stateless,.... ). В результате появляется связАнность компонентов, т.к. очень просто воткнуть бин спринга, тем самым опять привязаться к спрингу. Вижу конструкторы с 5-ю и более аргументов. Максимальное размещение логики в в бинах спринга, отсюда процедурщина в полный рост. Всякие там паттерны и прочие SOLID идут лесом. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2020, 10:15 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
bob1970 По-сути в этом и был мой вопрос. Излишняя привязанность к spring, ктр. накладывает определенные ограничения (одиночка, stateless,.... ). В результате появляется связАнность компонентов, т.к. очень просто воткнуть бин спринга, тем самым опять привязаться к спрингу. Вижу конструкторы с 5-ю и более аргументов. Максимальное размещение логики в в бинах спринга, отсюда процедурщина в полный рост. Всякие там паттерны и прочие SOLID идут лесом. Тут вчера был ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 05:57 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
bob1970 Максимальное размещение логики в в бинах спринга, отсюда процедурщина в полный рост. Всякие там паттерны и прочие SOLID идут лесом. На самом деле область применения ООП достаточно узкая. Объекты хороши когда есть один "изолированный" объект с состоянием и своим поведением. Обычно ООП хорош для описание объектов операционной системы: окно, принтер, кнопка и пр. Для многих бизнес-приложений больше характерна модель с множеством взаимодействующих объектов, где сложно выделить главный. В этом случае более подходящей моделью является Multiple Dispatch , которая, правда, очень плохо реализована в языках программирования. Обычно диспетчеризация идёт по одному типу, что и является ООП (правда, ООП ещё подразумевает инкапсуляцию). Так что "процедурщина" в бизнес-приложениях это не маргинальщина, а вполне естественное отображение предметной области. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 06:24 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
unregestered На самом деле область применения ООП достаточно узкая. Объекты хороши когда есть один "изолированный" объект с состоянием и своим поведением. Обычно ООП хорош для описание объектов операционной системы: окно, принтер, кнопка и пр. Для многих бизнес-приложений больше характерна модель с множеством взаимодействующих объектов, где сложно выделить главный. Спорное место. Но главное ниже. unregestered В этом случае более подходящей моделью является Multiple Dispatch , которая, правда, очень плохо реализована в языках программирования. Обычно диспетчеризация идёт по одному типу , что и является ООП (правда, ООП ещё подразумевает инкапсуляцию). Так что "процедурщина" в бизнес-приложениях это не маргинальщина, а вполне естественное отображение предметной области . Как-то революционно выглядит. Можешь подробнее раскрыть мысль. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 08:46 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
unregestered На самом деле область применения ООП достаточно узкая. Объекты хороши когда есть один "изолированный" объект с состоянием и своим поведением. Обычно ООП хорош для описание объектов операционной системы: окно, принтер, кнопка и пр. С чего вы взяли, что ООП подходит для описание объектов GUI? ;-) Вы писали свой GUI? unregestered Для многих бизнес-приложений больше характерна модель с множеством взаимодействующих объектов, где сложно выделить главный. В этом случае более подходящей моделью является Multiple Dispatch , которая, правда, очень плохо реализована в языках программирования. Обычно диспетчеризация идёт по одному типу, что и является ООП (правда, ООП ещё подразумевает инкапсуляцию). Как минимум видел реализацию, где взаимодействие между объектами реализовано через "сообщения" (не используя очереди сообщений) Т.е. "главным объектом" был инфраструктурный объект, который перенаправлял сообщения. unregestered Так что "процедурщина" в бизнес-приложениях это не маргинальщина, а вполне естественное отображение предметной области. Именно, что маргинальщина, по принципу сделать быстро сейчас. Потом долго и мучительно переделывать потом. Ну и обычно для бакендеров формулируют задачу по реалиазции бизнес-процессов в процедурном стиле, ещё в виде веселых картинок. Вот они как настоящие акыны делают "что вижу, то пою". :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 10:52 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
chpasha ну например ты переписываешь легаси на спринг, но частями, т.е. есть уже новые вещи и есть еще куча старья и вот надо в старье уже заюзать нечто из нового, что уже мигрировали. по-крайней мере я подобной фигней тоже разродился лет 10 назад. Бгг, когда коту делать нечего он яйца лижет. А современный программист переписывает проект с одного фреймворка на другой точно такой же но модный в этом сезоне. А когда придет новый сезон и новый фреймворк - примется переписывать то же самое, но уже на него. Ну ничего, главное что денежка капает. А то, что занят абсолютно бессмысленной работой - ну так смысл на хлеб не намажешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 13:20 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
Ржавый гвоздь Бгг, когда коту делать нечего он яйца лижет [конспектирует, высунув язык] Ржавый гвоздь переписывает проект с одного фреймворка на другой точно такой же но модный в этом сезоне. А когда придет новый сезон и новый фреймворк - примется переписывать то же самое, но уже на него. Ну ничего, главное что денежка капает. А то, что занят абсолютно бессмысленной работой - ну так смысл на хлеб не намажешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 13:49 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
Ржавый гвоздь Бгг, когда коту делать нечего он яйца лижет. А современный программист переписывает проект с одного фреймворка на другой точно такой же но модный в этом сезоне. А когда придет новый сезон и новый фреймворк - примется переписывать то же самое, но уже на него. Ну ничего, главное что денежка капает. А то, что занят абсолютно бессмысленной работой - ну так смысл на хлеб не намажешь. Ну бывает надо переписывать на стильномодномолодежный фреймворк. Вот например щас у меня проект на jBoss seam, который лет пять как "сдох". Переводить его на JSF - ну такое. Так что сейчас переписывают на React + SpringBoot. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 13:49 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
mad_nazgul С чего вы взяли, что ООП подходит для описание объектов GUI? ;-) Вы писали свой GUI? :-) Конечно писал лол mad_nazgul Как минимум видел реализацию, где взаимодействие между объектами реализовано через "сообщения" (не используя очереди сообщений) Т.е. "главным объектом" был инфраструктурный объект, который перенаправлял сообщения. :-) "Сообщение" (например в Object C) это всего лишь навсего вызов метода. mad_nazgul Именно, что маргинальщина, по принципу сделать быстро сейчас. Потом долго и мучительно переделывать потом. Ну и обычно для бакендеров формулируют задачу по реалиазции бизнес-процессов в процедурном стиле, ещё в виде веселых картинок. Вот они как настоящие акыны делают "что вижу, то пою". :-) "Переделывание", как вы выражаетесь, это неотъемлемая часть процесса разработки в принципе, и никак не связана со стилем программирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 14:25 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
bob1970 Как-то революционно выглядит. Можешь подробнее раскрыть мысль. Коротко: ООП это частный случай Dynamic dispatch, когда выбор метода идёт только на основе одного типа. Однако в бизнес-приложениях (и многих других) обычно взаимодействуют 2-3 объекта и невозможно выделить главный. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 14:30 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
unregestered bob1970 Как-то революционно выглядит. Можешь подробнее раскрыть мысль. Коротко: ООП это частный случай Dynamic dispatch, когда выбор метода идёт только на основе одного типа. Однако в бизнес-приложениях (и многих других) обычно взаимодействуют 2-3 объекта и невозможно выделить главный. Есть мнение что все немного наоборот, что multimethods это разновидность ООП, как и prototype-based languages, а не наоборот. Хотя и то и то мнение мне кажется немного натянутым. Ну и в любом случае мне кажется что ФП уделывает все эти парадигмы на раз-два ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 15:00 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
забыл ник Ну и в любом случае мне кажется что ФП уделывает все эти парадигмы на раз-два Программер должен знать разные парадигмы и архитектурные паттерны и понимать где что применимо. Я уже давно оцениваю языки с сугубо практической точки зрения: поддержка IDE, билд тулов, стат-анализаторов, библиотек, фреймворков, дебагеров, мониторинговых тулов, удобство рефакторинга, быстрота компиляции и работы итд итп Всё остальное это свистелки и перделки, как выражался товарищ Дейкстра. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 04:01 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
unregestered Конечно писал лол Вот прям API для рисования окошек, менюшечек и прочего? unregestered "Сообщение" (например в Object C) это всего лишь навсего вызов метода. Не только, там еще определенная иерархия классов. unregestered "Переделывание", как вы выражаетесь, это неотъемлемая часть процесса разработки в принципе, и никак не связана со стилем программирования. Ещё как связана. Переделать можно всё, вопрос в цене. Стоимость каждого последующего изменения процедурно написанной программы стремиться к бесконечности. ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 06:55 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
mad_nazgul Вот прям API для рисования окошек, менюшечек и прочего? API - это не GUI. mad_nazgul Не только, там еще определенная иерархия классов. Я не понимаю, про что вы. При чём тут иерархия. Речь шла про то что [receiver message] в Objective-C эквивалентно receiver.message() в других языках программирования mad_nazgul Ещё как связана. Переделать можно всё, вопрос в цене. Стоимость каждого последующего изменения процедурно написанной программы стремиться к бесконечности. ;-) Сколько вы программ переделали? Я - миллион, включая свои собственные (хотя казалось бы уж тут-то качество должно быть на высоте). И я вас уверяю, что это: 1) неизбежно, 2) не является чем-то запредельным для нормального разработчика в большинстве случаев. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 12:03 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
unregestered bob1970 Как-то революционно выглядит. Можешь подробнее раскрыть мысль. Коротко: ООП это частный случай Dynamic dispatch, когда выбор метода идёт только на основе одного типа. Однако в бизнес-приложениях (и многих других) обычно взаимодействуют 2-3 объекта и невозможно выделить главный. В одном из семинаров по Haskell (кажется Виталия Брагилевского) докладчик сказал интересную вещь. Вобщем по его мнению ООП и ФП подход похожи примерно как разворот на 90 градусов всех абстракций. В одном случае ты вкладываешся в базовые классы. Реализуешь их. А в другом - в функции и типы. Стоимость поддержки и внесения изменений - примерно одинакова. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 12:27 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
unregestered API - это не GUI. Ок. Значит не делали. unregestered Я не понимаю, про что вы. При чём тут иерархия. Речь шла про то что [receiver message] в Objective-C эквивалентно receiver.message() в других языках программирования Не совсем. Т.к. обычно Код: java 1. 2. 3. 4. 5.
unregestered Сколько вы программ переделали? Я - миллион, включая свои собственные (хотя казалось бы уж тут-то качество должно быть на высоте). И я вас уверяю, что это: 1) неизбежно, 2) не является чем-то запредельным для нормального разработчика в большинстве случаев. Судя по вашим тезисам вы не работали с "кровавым Ынытрпрайзом" и дремучим легаси кодом. Который переписывать очень дорого, а нужно "тут немножко поправить". И как бы мне приходилось "немного править" в dBase-подобных ЯП. Где кроме процедурного программирования ничего в принципе нет. Скажем так, это было познавательно. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 12:53 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
mayton докладчик сказал интересную вещь. Вобщем по его мнению ООП и ФП подход похожи примерно как разворот на 90 градусов всех абстракций. В целом мысль правильная,но в том то и дело что не всех, он немного лукавит. mayton В одном случае ты вкладываешся в базовые классы. Реализуешь их. А в другом - в функции и типы. Суть ты уловил, но неправильно формулируешь. Имеется ввиду решение так называемой expression problem(она заключается в том, что надо найти способ добавить новые функции и новые типы максимально используя уже дотупные и так, чтобы не сломать уже реализованный функционал) И тут действительно, ФП и ООП перпендикулярны. Так как в ФП данные и поведение разделены, то в нем легко добавить новую функцию, но невозможно добавить новый тип, не сломав уже реализованные функции. В ООп наоборот - легко добавить еще одну реализацию, но невозможно добавить метод в интерфейс не сломав все предыдущие реализации. В принципе это все решаемо,в ФП через typeclass, в ООП - object algebras. Разница же между ФП и ООП всего лишь в том что под ФП подведена математическая основа, а ООП - это скорее сбор эмпирических практик, которые все вольны трактовать по своему. По факту immutability, отсутсвие side-effects. pure функции, lambdas, streams etc - это все совершенно легко можно использовать и в ООП(на математической основе, а не следуя всяким высосаным SOLID). И мир к этому и идет. По сути, если убрать из ООП subtype polymorphism и наследование - то мы и придем к ФП. Все беды ООП именно из-за них. Наследование нарушает инкапсуляцию. точка. mayton Стоимость поддержки и внесения изменений - примерно одинакова. Поэтому это не правда ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 15:06 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
забыл ник mayton Стоимость поддержки и внесения изменений - примерно одинакова. Поэтому это не правда Да. Она неодинакова хотя-бы потому что мы никогда не найдем двух специалистов одинакового левла ФП и ООП чтоб задать им одну и ту-же задачу и сравнить перформанс. Не сможем зайти в одну и туже воду дважды. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 15:27 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
Я бы назвал столпами ФП: иммутабельность, ленивость и хвостовая рекурсия. Всякие операции с коллекциями, а-ля стримы, мапперы, редусеры ни в коем мере не является функциональной спецификой, ни с теоретической, ни с практической точки зрения. Операции с коллекциями есть чуть ли не во всех языках. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 17:39 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
Вчера рассеянно просматривал лекции Юрия Жлобы по Эрланг. Меня не столько язык итересовал сколько брокер Rabbit-Mq и архитектура его устойчивости к сбоям. Поскольку он написан на Erlang то я искал некоторые ответы на вопросы в самом языке. И вот что я заметил. Есть семейство языков Erlang/Lisp/Prolog у которых очень много похожих свойств. Причем настолько похожих что кажется что они концепции просто копировали. И похожести в них больше чем в С++/Java/C#. От пролога - предикаты и нотация записи процедур запятая-запятая-точка. От Лиспа - списки. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 17:46 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
unregestered Я бы назвал столпами ФП: иммутабельность, ленивость и хвостовая рекурсия. Всякие операции с коллекциями, а-ля стримы, мапперы, редусеры ни в коем мере не является функциональной спецификой, ни с теоретической, ни с практической точки зрения. Операции с коллекциями есть чуть ли не во всех языках. Ленивость и хвостовая рекурсия это следствия, а не причины(при чем первое вообще присутствует далеко не во всех ФП-языках). Столпы ФП - pure, total, side-effects free функции + immutable data + high-order-functions(частным случаем которых как раз и являются стримы редьюсеры и т.п) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 17:46 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
mayton Вчера рассеянно просматривал лекции Юрия Жлобы по Эрланг. Меня не столько язык итересовал сколько брокер Rabbit-Mq и архитектура его устойчивости к сбоям. Поскольку он написан на Erlang то я искал некоторые ответы на вопросы в самом языке. И вот что я заметил. Есть семейство языков Erlang/Lisp/Prolog у которых очень много похожих свойств. Причем настолько похожих что кажется что они концепции просто копировали. И похожести в них больше чем в С++/Java/C#. От пролога - предикаты и нотация записи процедур запятая-запятая-точка. От Лиспа - списки. Так а что в этом удивительного? Закономерное развитие, когда новые языки вбирают в себя хорошо работающие идеи из старых. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 17:55 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
Я-бы добавил вывод типов и генерики и паттерн-матчинг. 2 пункт вообще очень **ёво реализовано в Java. То что в Java навзали Generics вообще не имело право так называться. Их можно было назвать compile-time-guards (CTG) или что-то вроде этого. И поведение примитивных типов по отношению к CTG вообще не определено. Тоесть вы старалить. Описывали обобщенный алгоритм но не можете применить его к целому числу. Хотя сам бох велел скомпилировать хардкод для целого числа но ... компиллятор вставляет туда Object с RTTI Integer семантикой. Какие накладные при этом несет код - сложно представить. Я догадываюсь почему Одерский плюнул и стал делать свой язык. Хотя он ведь был коммитером самых первых версий JDK в эпоху Sun. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 17:55 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
mayton Я догадываюсь почему Одерский плюнул и стал делать свой язык. Хотя он ведь был коммитером самых первых версий JDK в эпоху Sun. Так он прямо об этом говорит. А сделали так коряво потому что backward-compatibility считали важнее чем теоретическая правильность ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 17:57 |
|
Получение spring beans в классе, неуправляемом spring
|
|||
---|---|---|---|
#18+
Так для JVM все равно. Эту механику можно было реализовать еще в эпоху JDK 1.1. Просто компиллятор делал бы больше преобразований. Честное слово возьму ASM/CGlib и насетаплю свой Java-Kava с блекджеком и женщинами. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2020, 18:04 |
|
|
start [/forum/topic.php?fid=59&msg=39956890&tid=2120807]: |
0ms |
get settings: |
25ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
440ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 562ms |
0 / 0 |