powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / jdk17
25 сообщений из 240, страница 3 из 10
jdk17
    #40105832
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Например, мы делаем какую-нибудь учетно-аналитическую систему и в ней полно совершенно типовых формочек, типового API для доступа к данным, типовых DTO-классов, Entity-классов и т.п.

-1
Болезнь всех программистов в возрасте.
Не надо автоматизировать программиста!
Это напоминает как в дельфи формочки записывали в бд и потом оттуда рожали.
- типовые формочки решает наследование и шаблоны в IDE
- типовое API решает ОРМ и @RepositoryRestResource
В спринг буте и геттеры не нужны))))
...
Рейтинг: 0 / 0
jdk17
    #40105833
H5N1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Если проект чуть сложнее, то я вообще не вижу смысла описывать эти классы в коде вручную. Мне проще описать их в модели или на DSL и сгенерить целиком вместе со всеми вспомогательными мэпперами (Entity-DTO), репозиториями, билдерами и т.п.

вам проще, а для других это разбираться в чужом велосипеде, который тут едет, тут не едет, а здесь велосипедист понял как был не прав и свалил в другой проект.
lombok это стандарт, который убережет наследников от велосипедов с хорошей задумкой но квадратными колесами.
...
Рейтинг: 0 / 0
jdk17
    #40105835
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming,
Да. Генераторы это еще хуже чем ломбок и чем руками.
...
Рейтинг: 0 / 0
jdk17
    #40105836
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb,
Сущности это таблицы бд.
Они разные. Как разная таблица Юзверь и Счёт.
Ну ка, найди у них общее?))))
...
Рейтинг: 0 / 0
jdk17
    #40105839
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
На мой взгляд Lombok - это тоже засирание проекта, лишние зависимости.

По Ломбоку можно поднять отдельный топик. У ломбока есть нетривиальные ситуации (я щас не могу вспомнить)
когда лучше было не использовать его чем использовать. Возможно это было связано с наследованием и с конструкторами.
Не помню точно. Вобщем - если топик будет создан - подумаем и вспомним.
...
Рейтинг: 0 / 0
jdk17
    #40105841
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lleming
а если на проекте сегодня 2 класса, завтра 4, послезавтра 6 что тогда. Через неделю начинать свою схему писать или через 10 дней. Свои генераторы моделей звучит красиво, в итоге есть шанс что кроме автора там ничего никто либо не разберет либо не захочет разбирать.

Буквально недавно попробовал генератор моделей для swagger.json получалось так себе, пришлось выкинуть все что нагенерил (нечитаемо, compile errors, да и вообще все равно все руками проверять судя по ворнингам в логах).


в пользу ломбока, практически все модели в пределах одной страницы не нужно листать ничего. Особенно если есть не просто getter а кастомный геттер. Его сразу видно. Хотя поначалу тоже было не хотелось это ломбок пользовать ибо в IDE генератор, а как разберешся как жил до этого.


Поясню на примере. Есть вложенные классы
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    static class C {
        public String value;
    }

    static class B {
        public C c;
    }

    static class A {
        public B b;
    }



В варианте без геттеров/сеттеров присваивание делается как-то так:
Код: sql
1.
a1.b.c = a2.b.c



Если использовать Lombok то получится такой код:
Код: sql
1.
a1.getB().setC(a2.getB().getC());



Первый вариант читается гораздо лучше. Это во-первых. Во-вторых есть дырявые абстракции - никто глядя на второй вариант не даст гарантии, что внутри гет/сет нет кода управления ядерным реактором. С первым вариантом такие гарантии понимания работы кода есть.
...
Рейтинг: 0 / 0
jdk17
    #40105843
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
lleming,
Да. Генераторы это еще хуже чем ломбок и чем руками.

Hibernate тоже можно рассматривать как генератор DDL при настройке hibernate.hbm2ddl.auto

Вообще генераторов сейчас гораздо больше чем мы думаем. Просто не все из них генерят код.
...
Рейтинг: 0 / 0
jdk17
    #40105846
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никанор Кузьмич
Ares_ekb
Например, мы делаем какую-нибудь учетно-аналитическую систему
Берем low-code платформу типа Oracle APEX... Задача решена
(Извините, не удержался)

Никогда в жизни никто не ставил мне такую задачу. Один из заказчиков говорил - вот у нас есть
черный ящик. В него с одной стороны втекают биржевые события. А с другой стороны я хочу
чтоб вытекали команды к трейдингу. И систем - зоорпарк. И интеграций и стандартов - зоопарк.
И аналитика туда втекает. И метадата. И история индексов. И живые события.

Вот натянется на этот глобус Oracle Apex?
...
Рейтинг: 0 / 0
jdk17
    #40105850
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
PetroNotC Sharp
lleming,
Да. Генераторы это еще хуже чем ломбок и чем руками.

Hibernate тоже можно рассматривать как генератор DDL при настройке hibernate.hbm2ddl.auto

Вообще генераторов сейчас гораздо больше чем мы думаем. Просто не все из них генерят код.
я не против, если программист это не видит. Он выше сам строит Модель каждый раз. И dsl тоже.
Сизифоф труд.
...
Рейтинг: 0 / 0
jdk17
    #40105851
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Osipov
В варианте без геттеров/сеттеров присваивание делается как-то так:
Код: sql
1.
a1.b.c = a2.b.c

ты сишник чтоле?
Где в хибере или буте мы это делаем?
...
Рейтинг: 0 / 0
jdk17
    #40105852
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
Roman Osipov
В варианте без геттеров/сеттеров присваивание делается как-то так:
Код: sql
1.
a1.b.c = a2.b.c

ты сишник чтоле?
Где в хибере или буте мы это делаем?

Hibernate без проблем принимает аннотации над public полями, без геттеров и сеттеров.
...
Рейтинг: 0 / 0
jdk17
    #40105854
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Osipov
PetroNotC Sharp
пропущено...
ты сишник чтоле?
Где в хибере или буте мы это делаем?

Hibernate без проблем принимает аннотации над public полями, без геттеров и сеттеров.
ну молодец он.
Тогда скажи проще
- ребята, с 20хх года геттеры вообще не нужны.
...
Рейтинг: 0 / 0
jdk17
    #40105855
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 можно использовать самим в своих приложениях. А я вообще принципиальной разницы между этими вариантами не вижу, это всё детали реализации. Какой вариант удобнее, тем можно и пользоваться.
...
Рейтинг: 0 / 0
jdk17
    #40105861
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
вроде я ещё не очень пожилой :) Спринг бут - это немного другая реализация той же самой идеи. Выделяем основные виды сущностей в коде: SpringBootApplication, Component, RestController и т.п. Можно было бы всё приложение нарисовать в виде модели, а можно прямо в коде пометить каждый класс/метод нужными аннотациями. То же самое с Hibernate: можно пометить классы в коде, можно описать всё в XML. А можно нарисовать модель и из неё сгенерить всё, что нужно.

Вот смотри.
Есть первый вариант создания окна в статике (дельфи)
FormMy my = new FormMy()
Где расположение контролов и наличие описано в файле dfm
И есть динамическое создание
FormMy my = new FormMy()
Button btn = new Button()
btn.Parent = my
......
Ты упорно агитируешь за второй вариант.
-1
...
Рейтинг: 0 / 0
jdk17
    #40105862
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я-бы ввел такую метрику. Стоимость внесения изменений (CMC). Если вам для того чтобы перименовать поле - надо просмотреть
100500 строк кода и еще и отдельно базу - то это высокая стоимость. Если вы просто заходите в json или yaml и переименовываете
поле - и всё работает после сборки проекта - то это дешевая стоимость.

Это к вопросу пользы и вреда генераторов. ЧТО у вас будет в роли DSL, скрипт, проперти файлы или java код - не важно.
Важно как дорого это все развивать и поддерживать. Очень многие разработчики шарахаются DSL, и изо всех сил
пытаются вытягивать какую-то опцию аннотациями. Мне такая практика кажется просто гипертрофированной.

Надо в целом смотреть по ситуации. Иногда DSL может быть удобнее когда вы собираете семейство бизнес сущностей
и для базы и для фронта и для бэка.
...
Рейтинг: 0 / 0
jdk17
    #40105863
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
1) Сделать базовые классы (базовая вьюха, базовый контроллер, базовая формочка со списком, базовая формочка с детальной информацией и т.п.) и от них наследовать другие классы - то, о чем вы говорите
ООП не работает в бд.
Выше вопрос к вам по сущности Юзверь и Счет.
Промолчали.
...
Рейтинг: 0 / 0
jdk17
    #40105865
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Сущность - это уникальный объект в бд.
Он собрался его/ее наследовать.
...
Рейтинг: 0 / 0
jdk17
    #40105866
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я-бы спросил как он ее собирается наследовать? Тоесть что будет в базовом типе?
...
Рейтинг: 0 / 0
jdk17
    #40105868
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
H5N1
вам проще, а для других это разбираться в чужом велосипеде, который тут едет, тут не едет
Я не могу согласиться. Если в проекте, скажем, в 5 раз меньше кода, то в нём проще разобраться. Скажем 20% кода написано вручную, 80% сгенерено из модели. Сгенеренный код типовой, разбираться в нём не нужно и править его вручную не нужно. Все эти технологии используются в разных компаниях. Я не могу сказать, что их очень много, но обычно это достаточно крупные компании, которые могут себе позволить автоматизацию разработки. Есть целый консорциум Object Management Group, который занимается стандартизацией в данной области. И все эти языки - MOF, OCL, QVTo, MOF M2T и т.п. - это международные стандарты, для которых уже есть готовые реализации.

Велосипед - это скорее писать тонны boilerplate-кода. А если удаётся разложить приложение на какие-то типовые куски, четко всё это описать до такой степени, что аналитики/разработчики в этих терминах (контроллеров, вьюх, репозиториев, форма со списком, форма с детализацией и т.п.) смогут описать приложение и потом это описание практически один в один на верхнем уровне переносится в код, в идеале что-то генерится, либо пишется вручную. Это нормальный промышленный подход. Lombok и spring boot - это хорошо, но обычно недостаточно.
...
Рейтинг: 0 / 0
jdk17
    #40105874
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
Ares_ekb
1) Сделать базовые классы (базовая вьюха, базовый контроллер, базовая формочка со списком, базовая формочка с детальной информацией и т.п.) и от них наследовать другие классы - то, о чем вы говорите
ООП не работает в бд.
Выше вопрос к вам по сущности Юзверь и Счет.
Промолчали.


В смысле не работает? JPA поддерживает мэппинг как наследования, так и композиции. При чем разными способами - хочешь в одну таблицу отображай, хочешь в разные.
...
Рейтинг: 0 / 0
jdk17
    #40105875
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Есть первый вариант создания окна в статике (дельфи)

И есть динамическое создание

Ты упорно агитируешь за второй вариант
Нет, первый вариант - это 4-ый пункт из моего сообщения, ну либо 3-ий, если dfm можно редактировать в текстовом редакторе (я не помню уже бинарный он или текстовый). А второй - это 1 или 2 из моего сообщения.

Я наоборот говорю, что все эти варианты имеют право на жизнь и принципиальной разницы между ними нет.

Сначала нужно в принципе определить (в голове, на листе бумаге) из каких типовых частей состоит приложение (форма со списком, форма с детализацией, ещё какая-то форма, котнроллеры, репозитории, ...). А дальше куча вариантов на выбор:

1) Нарисовать несколько типовых базовых форм в dfm

2) Реализовать в коде несколько типовых базовых форм и от них наследовать остальные

3) Придумать свой графический язык для проектирования форм и всего остального приложения и преобразовывать эти модели в dfm

4) То же самое, но генерить код

5) Вместо графического языка сделать текстовый DSL

...
...
Рейтинг: 0 / 0
jdk17
    #40105884
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Сущность - это уникальный объект в бд.
Он собрался его/ее наследовать.
Я не очень понял вопрос. Модель не обязана быть объектно-ориентированной (типа UML классы с наследованием и т.п.). Модели могут быть какими угодно.

mayton
ЧТО у вас будет в роли DSL, скрипт, проперти файлы или java код - не важно
Да, я как-раз об этом говорю. У многих людей слово модель четко ассоциируется с диаграммой классов UML или чем-то подобным. AST для DSL выражения - это тоже модель, просто сериализованная в текстовом виде. JSON, YAML, XML и т.п. - это тоже просто формы представления модели.

Скажем есть 1) диаграмма классов UML 2) Java-классы с JPA аннотациями, 3) XML конфиг для hibernate 4) Excel табличка со списком сущностей и атрибутов 5) Word-документ для аналитика или заказчика, описывающий схему данных (это совсем крамольный пункт). Всё это просто разные формы представления одной и той же схемы данных. Если мы можем легко перейти от одного представления к другому, то какая вообще разница. Какое представление удобнее, тем и нужно пользоваться, а остальные будут производными от него. Но это касается не только схемы данных, но и всего приложения.
...
Рейтинг: 0 / 0
jdk17
    #40105886
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Я наоборот говорю, что все эти варианты имеют право на жизнь и принципиальной разницы между ними нет.
разница огромная
- статику окно делает студен за один день в WYSIWYG редакторе. Ты делаешь распил бабла на месяц
- между сущностью Юзер карл! И Счет нет ничего общего. Даже для студента выше.
...
Рейтинг: 0 / 0
jdk17
    #40105887
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
5) Word-документ для аналитика или заказчика, описывающий схему данных (это совсем крамольный пункт).

Это может быть не моделью но просто некой стартовой точкой. Мне сложно себе представить
поддержку модели на основе Word-документа.
...
Рейтинг: 0 / 0
jdk17
    #40105889
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Модели могут быть какими угодно.
да. Ты моделируешь там где не надо.
Просят построить ИС. А ты сделаешь КОНСТРУКТОР информ систем.
Просят табуретку. А ты - конструктор (DSL) табуреток.
Просят сайт. А ты - генератор сайтов.
...
Рейтинг: 0 / 0
25 сообщений из 240, страница 3 из 10
Форумы / Java [игнор отключен] [закрыт для гостей] / jdk17
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]