|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb Например, мы делаем какую-нибудь учетно-аналитическую систему и в ней полно совершенно типовых формочек, типового API для доступа к данным, типовых DTO-классов, Entity-классов и т.п. -1 Болезнь всех программистов в возрасте. Не надо автоматизировать программиста! Это напоминает как в дельфи формочки записывали в бд и потом оттуда рожали. - типовые формочки решает наследование и шаблоны в IDE - типовое API решает ОРМ и @RepositoryRestResource В спринг буте и геттеры не нужны)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 14:29 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb Если проект чуть сложнее, то я вообще не вижу смысла описывать эти классы в коде вручную. Мне проще описать их в модели или на DSL и сгенерить целиком вместе со всеми вспомогательными мэпперами (Entity-DTO), репозиториями, билдерами и т.п. вам проще, а для других это разбираться в чужом велосипеде, который тут едет, тут не едет, а здесь велосипедист понял как был не прав и свалил в другой проект. lombok это стандарт, который убережет наследников от велосипедов с хорошей задумкой но квадратными колесами. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 14:30 |
|
jdk17
|
|||
---|---|---|---|
#18+
lleming, Да. Генераторы это еще хуже чем ломбок и чем руками. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 14:31 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb, Сущности это таблицы бд. Они разные. Как разная таблица Юзверь и Счёт. Ну ка, найди у них общее?)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 14:33 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb На мой взгляд Lombok - это тоже засирание проекта, лишние зависимости. По Ломбоку можно поднять отдельный топик. У ломбока есть нетривиальные ситуации (я щас не могу вспомнить) когда лучше было не использовать его чем использовать. Возможно это было связано с наследованием и с конструкторами. Не помню точно. Вобщем - если топик будет создан - подумаем и вспомним. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 14:42 |
|
jdk17
|
|||
---|---|---|---|
#18+
lleming а если на проекте сегодня 2 класса, завтра 4, послезавтра 6 что тогда. Через неделю начинать свою схему писать или через 10 дней. Свои генераторы моделей звучит красиво, в итоге есть шанс что кроме автора там ничего никто либо не разберет либо не захочет разбирать. Буквально недавно попробовал генератор моделей для swagger.json получалось так себе, пришлось выкинуть все что нагенерил (нечитаемо, compile errors, да и вообще все равно все руками проверять судя по ворнингам в логах). в пользу ломбока, практически все модели в пределах одной страницы не нужно листать ничего. Особенно если есть не просто getter а кастомный геттер. Его сразу видно. Хотя поначалу тоже было не хотелось это ломбок пользовать ибо в IDE генератор, а как разберешся как жил до этого. Поясню на примере. Есть вложенные классы Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
В варианте без геттеров/сеттеров присваивание делается как-то так: Код: sql 1.
Если использовать Lombok то получится такой код: Код: sql 1.
Первый вариант читается гораздо лучше. Это во-первых. Во-вторых есть дырявые абстракции - никто глядя на второй вариант не даст гарантии, что внутри гет/сет нет кода управления ядерным реактором. С первым вариантом такие гарантии понимания работы кода есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 14:43 |
|
jdk17
|
|||
---|---|---|---|
#18+
PetroNotC Sharp lleming, Да. Генераторы это еще хуже чем ломбок и чем руками. Hibernate тоже можно рассматривать как генератор DDL при настройке hibernate.hbm2ddl.auto Вообще генераторов сейчас гораздо больше чем мы думаем. Просто не все из них генерят код. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 14:45 |
|
jdk17
|
|||
---|---|---|---|
#18+
Никанор Кузьмич Ares_ekb Например, мы делаем какую-нибудь учетно-аналитическую систему (Извините, не удержался) Никогда в жизни никто не ставил мне такую задачу. Один из заказчиков говорил - вот у нас есть черный ящик. В него с одной стороны втекают биржевые события. А с другой стороны я хочу чтоб вытекали команды к трейдингу. И систем - зоорпарк. И интеграций и стандартов - зоопарк. И аналитика туда втекает. И метадата. И история индексов. И живые события. Вот натянется на этот глобус Oracle Apex? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 14:48 |
|
jdk17
|
|||
---|---|---|---|
#18+
mayton PetroNotC Sharp lleming, Да. Генераторы это еще хуже чем ломбок и чем руками. Hibernate тоже можно рассматривать как генератор DDL при настройке hibernate.hbm2ddl.auto Вообще генераторов сейчас гораздо больше чем мы думаем. Просто не все из них генерят код. Сизифоф труд. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 14:55 |
|
jdk17
|
|||
---|---|---|---|
#18+
Roman Osipov В варианте без геттеров/сеттеров присваивание делается как-то так: Код: sql 1.
Где в хибере или буте мы это делаем? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 14:58 |
|
jdk17
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Roman Osipov В варианте без геттеров/сеттеров присваивание делается как-то так: Код: sql 1.
Где в хибере или буте мы это делаем? Hibernate без проблем принимает аннотации над public полями, без геттеров и сеттеров. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 15:00 |
|
jdk17
|
|||
---|---|---|---|
#18+
Roman Osipov PetroNotC Sharp пропущено... ты сишник чтоле? Где в хибере или буте мы это делаем? Hibernate без проблем принимает аннотации над public полями, без геттеров и сеттеров. Тогда скажи проще - ребята, с 20хх года геттеры вообще не нужны. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 15:05 |
|
jdk17
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, вроде я ещё не очень пожилой :) Спринг бут - это немного другая реализация той же самой идеи. Выделяем основные виды сущностей в коде: SpringBootApplication, Component, RestController и т.п. Можно было бы всё приложение нарисовать в виде модели, а можно прямо в коде пометить каждый класс/метод нужными аннотациями. То же самое с Hibernate: можно пометить классы в коде, можно описать всё в XML. А можно нарисовать модель и из неё сгенерить всё, что нужно. Я вообще никакой принципиальной разницы между всеми этими вариантами не вижу. Идея везде общая. Сначала мы определяем из каких типовых частей состоит наше приложение (модели, контроллеры, вьюхи, репозитории, сущности, DTO - всё что угодно). Затем уже возможны варианты: 1) Сделать базовые классы (базовая вьюха, базовый контроллер, базовая формочка со списком, базовая формочка с детальной информацией и т.п.) и от них наследовать другие классы - то, о чем вы говорите 2) Для каждой типовой части сделать аннотацию. Разработчики будут аннотировать ими код и в рантайме эти классы будут обрабатываться специальным образом (как в spring, hibernate) 3) Вместо аннотаций использовать какой-нибудь XML, JSON и т.п. - те же аннотации, но во внешнем файле 4) Сделать визуальный язык моделирования для рисования контроллеров, вьюх и т.п. Генерить из этих моделей либо весь код, либо генерить скелет, а остальное дописывать 5) Сделать DSL. Либо генерить из него код, либо интерпретировать его в рантайме. Вы говорите, что не нужно автоматизировать разработчика. Зачем тогда maven, gradle? Фактически это специальные DSL, которые позволяют описывать один из аспектов приложения: его зависимости от других библиотек, правила сборки. По-моему разработчики только и занимаются тем, что автоматизируют разработку. Только почему-то пункт 5 у них обычно вызывает легкое отторжение и подозрение, пункт 4 - это вообще прямо ужас-ужас, пункт 3 - ну какое-то легаси, пункт 2 - норм, если это делал гуру в фреймвоке, которым пользуются не менее N человек, если по нему не менее X вопросов на stackoverflow и дата последнего релиза не старше 1 месяца, и только пункт 1 можно использовать самим в своих приложениях. А я вообще принципиальной разницы между этими вариантами не вижу, это всё детали реализации. Какой вариант удобнее, тем можно и пользоваться. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 15:08 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb вроде я ещё не очень пожилой :) Спринг бут - это немного другая реализация той же самой идеи. Выделяем основные виды сущностей в коде: SpringBootApplication, Component, RestController и т.п. Можно было бы всё приложение нарисовать в виде модели, а можно прямо в коде пометить каждый класс/метод нужными аннотациями. То же самое с Hibernate: можно пометить классы в коде, можно описать всё в XML. А можно нарисовать модель и из неё сгенерить всё, что нужно. Вот смотри. Есть первый вариант создания окна в статике (дельфи) FormMy my = new FormMy() Где расположение контролов и наличие описано в файле dfm И есть динамическое создание FormMy my = new FormMy() Button btn = new Button() btn.Parent = my ...... Ты упорно агитируешь за второй вариант. -1 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 15:18 |
|
jdk17
|
|||
---|---|---|---|
#18+
Я-бы ввел такую метрику. Стоимость внесения изменений (CMC). Если вам для того чтобы перименовать поле - надо просмотреть 100500 строк кода и еще и отдельно базу - то это высокая стоимость. Если вы просто заходите в json или yaml и переименовываете поле - и всё работает после сборки проекта - то это дешевая стоимость. Это к вопросу пользы и вреда генераторов. ЧТО у вас будет в роли DSL, скрипт, проперти файлы или java код - не важно. Важно как дорого это все развивать и поддерживать. Очень многие разработчики шарахаются DSL, и изо всех сил пытаются вытягивать какую-то опцию аннотациями. Мне такая практика кажется просто гипертрофированной. Надо в целом смотреть по ситуации. Иногда DSL может быть удобнее когда вы собираете семейство бизнес сущностей и для базы и для фронта и для бэка. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 15:21 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb 1) Сделать базовые классы (базовая вьюха, базовый контроллер, базовая формочка со списком, базовая формочка с детальной информацией и т.п.) и от них наследовать другие классы - то, о чем вы говорите Выше вопрос к вам по сущности Юзверь и Счет. Промолчали. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 15:21 |
|
jdk17
|
|||
---|---|---|---|
#18+
mayton, Сущность - это уникальный объект в бд. Он собрался его/ее наследовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 15:24 |
|
jdk17
|
|||
---|---|---|---|
#18+
Я-бы спросил как он ее собирается наследовать? Тоесть что будет в базовом типе? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 15:25 |
|
jdk17
|
|||
---|---|---|---|
#18+
H5N1 вам проще, а для других это разбираться в чужом велосипеде, который тут едет, тут не едет Велосипед - это скорее писать тонны boilerplate-кода. А если удаётся разложить приложение на какие-то типовые куски, четко всё это описать до такой степени, что аналитики/разработчики в этих терминах (контроллеров, вьюх, репозиториев, форма со списком, форма с детализацией и т.п.) смогут описать приложение и потом это описание практически один в один на верхнем уровне переносится в код, в идеале что-то генерится, либо пишется вручную. Это нормальный промышленный подход. Lombok и spring boot - это хорошо, но обычно недостаточно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 15:27 |
|
jdk17
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Ares_ekb 1) Сделать базовые классы (базовая вьюха, базовый контроллер, базовая формочка со списком, базовая формочка с детальной информацией и т.п.) и от них наследовать другие классы - то, о чем вы говорите Выше вопрос к вам по сущности Юзверь и Счет. Промолчали. В смысле не работает? JPA поддерживает мэппинг как наследования, так и композиции. При чем разными способами - хочешь в одну таблицу отображай, хочешь в разные. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 15:38 |
|
jdk17
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Есть первый вариант создания окна в статике (дельфи) И есть динамическое создание Ты упорно агитируешь за второй вариант Я наоборот говорю, что все эти варианты имеют право на жизнь и принципиальной разницы между ними нет. Сначала нужно в принципе определить (в голове, на листе бумаге) из каких типовых частей состоит приложение (форма со списком, форма с детализацией, ещё какая-то форма, котнроллеры, репозитории, ...). А дальше куча вариантов на выбор: 1) Нарисовать несколько типовых базовых форм в dfm 2) Реализовать в коде несколько типовых базовых форм и от них наследовать остальные 3) Придумать свой графический язык для проектирования форм и всего остального приложения и преобразовывать эти модели в dfm 4) То же самое, но генерить код 5) Вместо графического языка сделать текстовый DSL ... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 15:38 |
|
jdk17
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Сущность - это уникальный объект в бд. Он собрался его/ее наследовать. mayton ЧТО у вас будет в роли DSL, скрипт, проперти файлы или java код - не важно Скажем есть 1) диаграмма классов UML 2) Java-классы с JPA аннотациями, 3) XML конфиг для hibernate 4) Excel табличка со списком сущностей и атрибутов 5) Word-документ для аналитика или заказчика, описывающий схему данных (это совсем крамольный пункт). Всё это просто разные формы представления одной и той же схемы данных. Если мы можем легко перейти от одного представления к другому, то какая вообще разница. Какое представление удобнее, тем и нужно пользоваться, а остальные будут производными от него. Но это касается не только схемы данных, но и всего приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 15:52 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb Я наоборот говорю, что все эти варианты имеют право на жизнь и принципиальной разницы между ними нет. - статику окно делает студен за один день в WYSIWYG редакторе. Ты делаешь распил бабла на месяц - между сущностью Юзер карл! И Счет нет ничего общего. Даже для студента выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 15:53 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb 5) Word-документ для аналитика или заказчика, описывающий схему данных (это совсем крамольный пункт). Это может быть не моделью но просто некой стартовой точкой. Мне сложно себе представить поддержку модели на основе Word-документа. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 15:54 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb Модели могут быть какими угодно. Просят построить ИС. А ты сделаешь КОНСТРУКТОР информ систем. Просят табуретку. А ты - конструктор (DSL) табуреток. Просят сайт. А ты - генератор сайтов. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 15:56 |
|
|
start [/forum/topic.php?fid=59&msg=40105851&tid=2120291]: |
0ms |
get settings: |
27ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
535ms |
get tp. blocked users: |
2ms |
others: | 2438ms |
total: | 3075ms |
0 / 0 |