powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / jdk17
25 сообщений из 240, страница 4 из 10
jdk17
    #40105891
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просят сет бинов со сквозным поведением. А ты - Spring с AOP.
...
Рейтинг: 0 / 0
jdk17
    #40105893
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Никогда в жизни никто не ставил мне такую задачу. Один из заказчиков говорил - вот у нас есть
черный ящик. В него с одной стороны втекают биржевые события. А с другой стороны я хочу
чтоб вытекали команды к трейдингу. И систем - зоорпарк. И интеграций и стандартов - зоопарк.
И аналитика туда втекает. И метадата. И история индексов. И живые события.

Вот натянется на этот глобус Oracle Apex?
Апекс - это веб-морда к БД. А в вашей постановке я вообще не вижу ни намека на какой-либо интерфейс пользователя. Соответственно, апекс просто не на что натягивать. Если очень хочется, то можно все это написать на PL/SQL (и иногда на нем и пишут), а на апексе сделать красивые картинки для демонстрации перформанса (если других задач не осталось).

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
Я так понял, он как раз агитирует за первый вариант, только у него свой луна-парк с парой дополнительных уровней. В делфи dfm файл генерируется средой, когда юзер руками раскладывает контролы на форме. А у него еще на один уровень абстракции выше - даже раскладка на форме идет уже как результат автоматизации.

Ares_ekb
H5N1
вам проще, а для других это разбираться в чужом велосипеде, который тут едет, тут не едет
Я не могу согласиться. Если в проекте, скажем, в 5 раз меньше кода, то в нём проще разобраться. Скажем 20% кода написано вручную, 80% сгенерено из модели.
Вы забываете при этом, что перед тем, как сгенерировать эти 80%, на вашем велосипеде простите, средстве моделирования, надо научиться ездить. Можно ли это сделать за один день? Можно ли это сделать за один день, не обращаясь за помощью к кому-либо из коллег? Если нет, то закладывайте еще время на обучение.

Ares_ekb
Сгенеренный код типовой, разбираться в нём не нужно и править его вручную не нужно.
А это, простите, сказка какая-то. Вы гарантируете, что ваш сгенерированный код всегда будет оптимальным, не будет потреблять лишних ресурсов? У вас невозможна ситуация, когда пользователь имел в виду одно, а сгенерировалось что-то другое?
...
Рейтинг: 0 / 0
jdk17
    #40105894
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никанор Кузьмич
Берем low-code платформу типа Oracle APEX... Задача решена
(Извините, не удержался)
Да, я об этом и говорю! А если low-code платформы нет, то пишем её сами. Это не настолько космическая задача, как принято думать. Пресловутый Lombok - это тот же low-code, но на минималках. Spring Boot и Hibernate - то же low-code. Ещё можно придумать свои аннотации, хотя в том же C# это развито на много больше. А Lisp/Scheme - это один сплошной low-code, там просто размыта грань между написанием кода и его генерацией (благодаря макросам).

mayton
Вообще генераторов сейчас гораздо больше чем мы думаем. Просто не все из них генерят код.
Например, документацию из комментариев в коде. Или Swagger генерит UI для доступа к API.
...
Рейтинг: 0 / 0
jdk17
    #40105899
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю что хороший профессионал не избегает кодо-генерации а наоборот - использует ее в хвост и в гриву.

Способность команды выучить кодо-генератор - мы можем рассмотреть отдельным топиком. Но то уже
управленческая задача.

А у нас тут - идея в вакууме.
...
Рейтинг: 0 / 0
jdk17
    #40105901
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Да, я об этом и говорю! А если low-code платформы нет, то пишем её сами
Блин, для ERP пишите!
Да, там ядро системы есть.
Но это оффтоп.
...
Рейтинг: 0 / 0
jdk17
    #40105906
H5N1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Единсвтенное что меня печалит - это вялая активность всего форума.
Мы выдержали Луговского, Дедала и Студентика. А сегодняшний
трафик - это просто капающая вода из крана.


так забаньте уже Петро. думаю не я один такой, кому проще на английском вопрос сформулировать, чем тут через тупые вопросы Петро пробиваться, прекрасно понимаю, что ответы этому персонажу не нужны, он просто скучает.
...
Рейтинг: 0 / 0
jdk17
    #40105909
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Это может быть не моделью но просто некой стартовой точкой. Мне сложно себе представить
поддержку модели на основе Word-документа.
Либо конечной точкой, описали схему данных и сгенерили из неё всё остальное: Java-код, Word-документ и т.п.

Это конечно какая-то жесть и на практике наверное нет смысл делать такое. Но возможен такой сценарий. Нарисовали схему данных, сгенерили из неё Word-документ, отправили на согласование заказчику, предметным специалистам и т.д. Они что-то поправили в документе, синхронизируем эти изменения обратно в модель. Можно в другую модель (не в исходную), а затем аналитик уже в удобном для него инструменте моделирования сравнивает две модели, смотрит что изменилось, мержит изменения в основную версию. Затем итерации повторяются. В итоге из модели генерятся окончательные версии документов и код. Поскольку источник один, то это гарантия того, что документы, код, какие-нибудь XML-схемы и т.п. не разойдутся между собой. У нас в некоторых проектах работа была ровно так организована за исключением конечно автоматического перегона документа обратно в модель, это проще сделать аналитику вручную, хотя если бы делалось автоматически, то экономило бы кучу времени.

Ещё как вариант можно использовать не обязательно Word. А какие-то языки разметки или DSL, но прикрутить к ним WYSIWYG редактор. Похоже всё уже придумано, я описываю JetBrains MPS :) хотя сам им не пользовался
...
Рейтинг: 0 / 0
jdk17
    #40105911
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В топку Word. Запаришся его парсить и сохранять.

swagger.json - да.
.graphql - да
.wsdl - да

Word - не надо.
...
Рейтинг: 0 / 0
jdk17
    #40105914
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
H5N1
mayton

Единсвтенное что меня печалит - это вялая активность всего форума.
Мы выдержали Луговского, Дедала и Студентика. А сегодняшний
трафик - это просто капающая вода из крана.


так забаньте уже Петро. думаю не я один такой, кому проще на английском вопрос сформулировать, чем тут через тупые вопросы Петро пробиваться, прекрасно понимаю, что ответы этому персонажу не нужны, он просто скучает.

Это так не работает. Ты жмешь кнопку. И профильный модератор (Denis кажется) реагирует.

Я за его действия - не отвечаю. Джентльмен по одну сторону от Суэтца.... ну короче ты понял.
...
Рейтинг: 0 / 0
jdk17
    #40105915
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
H5N1,
Ты имхо забыл)))) LOL
...
Рейтинг: 0 / 0
jdk17
    #40105919
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Это не настолько космическая задача,
именно трудоемкая.
Выше сказал - студент делает одно окно в день.
Для ПО вида ERP конечно надо две модели. И модель ядра.
Вот тут генерируйте справочники.
Тема не про ERP
...
Рейтинг: 0 / 0
jdk17
    #40105951
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никанор Кузьмич
Вы забываете при этом, что перед тем, как сгенерировать эти 80%, на вашем велосипеде простите, средстве моделирования, надо научиться ездить. Можно ли это сделать за один день? Можно ли это сделать за один день, не обращаясь за помощью к кому-либо из коллег? Если нет, то закладывайте еще время на обучение.
Если код можно написать за один день или даже месяц, то всё это нафиг не нужно. Конечно, проще нажать две кнопки в IDE и сгенерить эти злосчастные геттеры/сеттеры. Наверное, да, у меня немного деформация. Есть смысл это использовать, когда на написание и отладку кода уйдет скажем год. И можно потратить месяц на создания кодогенератора, это всяко более интеллектуальное занятие. Я просто реально уже давно другими проектами не занимаюсь. И у нас люди вечно начинают писать тонны какого-то boilerplate-кода, а я это автоматизирую, чтобы как можно больше всего этого переехало из каталога src в src-gen.

Никанор Кузьмич
Вы гарантируете, что ваш сгенерированный код всегда будет оптимальным, не будет потреблять лишних ресурсов? У вас невозможна ситуация, когда пользователь имел в виду одно, а сгенерировалось что-то другое?
Что может быть не оптимальным в Entity или DTO классах? Или в мепперах между Entity и DTO? В каких-нибудь CRUD-контроллерах? Речь же не идёт о генерации каких-то сложных алгоритмов. Самое сложное, что я генерил: правила валидации документов, описанные на одном DSL (язык OCL), преобразовывал в XPath и Java код. При этом там делалась куча всяких оптимизаций, автоматически генерился не только код для валидации, но и для определения пути к невалидному элементу и т.п. В данном случае пользователь - это предметный специалист, на Java он не напишет вообще никакую реализацию, тем более оптимальную. К тому же на DSL у него правило валидации занимает одну строку, а на Java там генерится строк 50-100 boilerplate-кода.

Встречный вопрос :) Как вы пишите SQL запросы? Вдруг СУБД выполнит их не оптимально? Наверное лучше напрямую доставать данные из базы через какое-нибудь API или сделать свою СУБД. Вы пишите одну строку SQL, а внутри там происходит куча операций, где гарантия, что во всех этих тоннах кода программист не допустил ошибку? Где гарантия, что СУБД правильно поняла ваш запрос? Вдруг вы имели в виду другое? Где гарантия, что по вашим JavaDoc комментариям сгенерилась корректная и оптимальная документация? Где гарантия, что вы описали API с помощью Swagger и для вас сгенерился правильный boilerplate-код или правильный UI? Где гарантия, что ваш gradle скрипт работает правильно? DSL, генераторы разных вещей из кода или из моделей используются просто повсеместно.

Насчет корректности сгенеренного кода, да, конечно я озадачивался этим вопросом. Гарантируется это очень просто. Если тупо, то тестированием. Протестировать генератор можно один раз, это на порядок проще, чем писать кучу новых тестов для однотипного кода, который писался бы вручную. Более правильный вариант это 1) формально описать семантику исходного языка 2) описать семантику результирующего языка 3) формально описать преобразование выражений из одного языка в другой 4) доказать что это преобразование сохраняет семантику. Всё это стоит примерно в тыщу раз дороже, чем написание кодогенераторов или преобразований моделей. Меня хватило только частично на 1-ый пункт . Но дело не в кодогенерации, в принципе формальная верификация любого софта - это очень долго дорого. Для бедных есть тестирование.
...
Рейтинг: 0 / 0
jdk17
    #40105956
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подумалось что для авто-генерируемого кода сам DSL является спецификацией. Поэтому генерированный код - вообще
проверять не надо. Надо просто проверить генератор. А кто полезет проверять руками java код - тому надо руки отбить
и направить его носом в DSL. Там - всё что надо.

DSL == спецификация
...
Рейтинг: 0 / 0
jdk17
    #40105958
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Самое сложное, что я генерил: правила валидации документов, описанные
на одном DSL (язык OCL), преобразовывал в XPath и Java код. При этом там делалась куча всяких
оптимизаций, автоматически генерился не только код для валидации, но и для определения пути
к невалидному элементу и т.п.

Нет предела совершенству. Но я-бы просто остановился на таком наборе правил, который даёт
полное предсказание результата. Как в SQL (DQL):
Код: java
1.
SELECT ename, sal WHERE manager <> 'KENT' AND sal > 4500.00


безотносительно реализации SQL машины или наличия индексов - я всегда уверен
что получаю результат обладающий определёнными свойствами.

(в этом языке даже таже предикат (predicate) сам как-бы говорит нам что он - "предсказатель")

Тоесть если ваш OCL дает такое однозначное понимание свойств - то он почти совершенен.
И можно не компилируя и не запуская приложение уже заранее говорить будет ли результат
обладать свойствами или нет. Это важно для тестирования например.
...
Рейтинг: 0 / 0
jdk17
    #40105959
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Блин, для ERP пишите!
Уже есть DevExpress XAF, там формочки, менюшки и т.п. описываются в модели. Достаточно описать схему данных, всё остальное получается практически автоматически. Правда, есть какая-то доля нетиповой функциональности, которую приходится реализовывать вручную и на неё обычно и уходит больше всего времени. На XAF уже сделана ERP Галактика. VIPRos тут ещё где-то был, идея абсолютно та же самая.

Для Java с этим сложнее. В основном наверное используют Eclipse. Ecore-модели и всякие кодогенераторы там очень давно. 1С: EDT сделана на Eclipse, я никогда ей не пользовался, но на сколько я понимаю конфигурации там создаются в виде Ecore-моделей, а этот их русскоязычный DSL реализован Xtext, но это всё не точно.
...
Рейтинг: 0 / 0
jdk17
    #40105963
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Word - не надо.
Он нужен для заказчиков, бизнес-пользователей. Уж, лучше его сгенерить по нужному шаблону (или ГОСТу), чем аналитики будут делать это вручную. А если в word что-то поправили, то, да, наверное проще чтобы аналитик это перенес в модель вручную.
...
Рейтинг: 0 / 0
jdk17
    #40105970
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
DSL == спецификация
mayton
Тоесть если ваш OCL дает такое однозначное понимание свойств - то он почти совершенен.
И можно не компилируя и не запуская приложение уже заранее говорить будет ли результат
обладать свойствами или нет. Это важно для тестирования например.
Да, в этом и смысл. OCL - это как-раз скорее язык спецификации, чем программирования. В основном в нём обращения к свойствам/полям объектов, логические предикаты, минимальный набор операций (арифметических, строковых) и т.п. И больше ничего, нет операций изменения, вывода в консоль и т.п. Есть SQL для реляционных моделей, XPath/XQuery для XML и есть OCL для объектных моделей.
...
Рейтинг: 0 / 0
jdk17
    #40105974
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Что может быть не оптимальным в Entity или DTO классах? Или в мепперах между Entity и DTO? В каких-нибудь CRUD-контроллерах?

Как что. Превращение ваших 100тыр кода в легаси.
Начинаем новый проект.
На spring boot starter data rest который наследник над jpa.
Вы автоматизировали jpa?
А как быть с этим наследником?
Взять ваше легаси?
...
Рейтинг: 0 / 0
jdk17
    #40105975
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Уже есть DevExpress XAF
я в курсе. Теперь покажите это для бэкенда java.
...
Рейтинг: 0 / 0
jdk17
    #40105978
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Встречный вопрос :) Как вы пишите SQL запросы? Вдруг СУБД выполнит их не оптимально?
Вот именно! СУБД регулярно выполняет их неоптимально. Поэтому приходится изучать внутреннее устройство движка СУБД. Не исходники, конечно, но документацию читать. В какой последовательности выполняется запрос. Какие бывают виды джойнов. Какие бывают виды индексов. Какой индекс оптимален для данного распределения данных. И кучу другой фигни. И на изучение всего этого уходят годы. Так-то я бы тоже сказал, что вот я написал "select * from my_table", а остальное меня не волнует. Оказывается, волнует. Раз в год и палка стреляет: на одном проекте я столкнулся с тем, что запрос "select * from my_table" (вот именно такой) возвращал первую порцию данных через 30 секунд, при том, что система была довольно сильно нагруженная, и все остальное работало как часы.

Ares_ekb
Где гарантия, что СУБД правильно поняла ваш запрос? Вдруг вы имели в виду другое?
Регулярно понимает неправильно. Для того, чтобы написать код (или запрос) правильно, надо иметь в мозге модель компьютера. Эта модель мысленно эмулирует поведение процессора. Мозг человека достаточно развит, чтобы проделывать такую операцию. Когда вы смотрите на код и пытаетесь представить, что он делает, вы именно что эмулируете работу компьютера в своей голове. Но способности мозга не безграничны, поэтому любую программу постоянно приходится запускать. Вы слышали хоть раз, чтобы человек сел, написал кучу кода (не делая тестовых запусков вообще) и код сразу заработал без ошибок? И довольно часто бывает, что вы видите результат работы кода, но вы не понимаете, почему он неправильный. Приходится изучать, как всё это работает. Процессор, компилятор, и т. д. С опытом это проходит, удивления становится всё меньше и меньше. И в этом и был мой вопрос - сколько времени нужно, чтобы результат работы вашего генератора начал всегда совпадать с моими ожиданиями?
Ну или я перефразирую: никто из ваших джунов, приходивших к вам на проект, ни разу не задавал вопрос "почему генератор сгенерировал это, когда я ожидал вон то?" Я правильно понимаю?

Ares_ekb
Что может быть не оптимальным в Entity или DTO классах?
Откуда мне знать? Смотрите мой пример выше с запросом "select * from my_table". Что может быть не так? У Кайта же ясно было написано, что в этом случае СУБД просто читает сразу первые попавшиеся блоки, задержки быть не должно. Что может быть неоптимальным в "select * from my_table"? Оказывается, что-то может.
...
Рейтинг: 0 / 0
jdk17
    #40105983
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никанор Кузьмич
Ares_ekb
Встречный вопрос :) Как вы пишите SQL запросы? Вдруг СУБД выполнит их не оптимально?
Вот именно! СУБД регулярно выполняет их неоптимально. Поэтому приходится изучать внутреннее устройство движка СУБД. Не исходники, конечно, но документацию читать. В какой последовательности выполняется запрос. Какие бывают виды джойнов. Какие бывают виды индексов. Какой индекс оптимален для данного распределения данных. И кучу другой фигни. И на изучение всего этого уходят годы. Так-то я бы тоже сказал, что вот я написал "select * from my_table", а остальное меня не волнует. Оказывается, волнует. Раз в год и палка стреляет: на одном проекте я столкнулся с тем, что запрос "select * from my_table" (вот именно такой) возвращал первую порцию данных через 30 секунд, при том, что система была довольно сильно нагруженная, и все остальное работало как часы.

Ares_ekb
Где гарантия, что СУБД правильно поняла ваш запрос? Вдруг вы имели в виду другое?
Регулярно понимает неправильно. Для того, чтобы написать код (или запрос) правильно, надо иметь в мозге модель компьютера. Эта модель мысленно эмулирует поведение процессора. Мозг человека достаточно развит, чтобы проделывать такую операцию. Когда вы смотрите на код и пытаетесь представить, что он делает, вы именно что эмулируете работу компьютера в своей голове. Но способности мозга не безграничны, поэтому любую программу постоянно приходится запускать. Вы слышали хоть раз, чтобы человек сел, написал кучу кода (не делая тестовых запусков вообще) и код сразу заработал без ошибок? И довольно часто бывает, что вы видите результат работы кода, но вы не понимаете, почему он неправильный. Приходится изучать, как всё это работает. Процессор, компилятор, и т. д. С опытом это проходит, удивления становится всё меньше и меньше. И в этом и был мой вопрос - сколько времени нужно, чтобы результат работы вашего генератора начал всегда совпадать с моими ожиданиями?
Ну или я перефразирую: никто из ваших джунов, приходивших к вам на проект, ни разу не задавал вопрос "почему генератор сгенерировал это, когда я ожидал вон то?" Я правильно понимаю?

Ares_ekb
Что может быть не оптимальным в Entity или DTO классах?
Откуда мне знать? Смотрите мой пример выше с запросом "select * from my_table". Что может быть не так? У Кайта же ясно было написано, что в этом случае СУБД просто читает сразу первые попавшиеся блоки, задержки быть не должно. Что может быть неоптимальным в "select * from my_table"? Оказывается, что-то может.


+ Поддерживаю. Мысли правильные. Например, набросать аннотации для хибера не трудно и автокодом, но заставить его выполняться в приемлемое время - это задача уже не под силу автогенераторам. Здесь знание контекста необходимо и творческий подход.
...
Рейтинг: 0 / 0
jdk17
    #40105986
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
mayton
Word - не надо.
Он нужен для заказчиков, бизнес-пользователей. Уж, лучше его сгенерить по нужному шаблону (или ГОСТу), чем аналитики будут делать это вручную. А если в word что-то поправили, то, да, наверное проще чтобы аналитик это перенес в модель вручную.

Мои аналитики уже лет 7 не знают что такое Word. Они лабают на confluence в markup языках.

Шучу конечно. Word конечно они видят. Но его роль в цикле разработки весьма нивелирована.
...
Рейтинг: 0 / 0
jdk17
    #40105999
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb,
Я выше не случайно говорил про линейку.
В архитектуре есть понятие оверхед.
Вот ваш метод _в большинстве crud проектов_ - оверхед.
В небольшой части, например ERP это эффективно
...
Рейтинг: 0 / 0
jdk17
    #40106009
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никанор Кузьмич,

генератор из OCL в XPath/Java писался не для разработчиков, а для аналитиков. Они вообще не знают, что там есть какой-то генератор, они просто пишут спецификации правил. Раньше они писали их на русском языке, в части правил вообще невозможно было понять, что имеется в виду, их можно было интерпретировать как угодно. Эти правила отдавались системным аналитикам, которые во всём этом разбирались и писали чуть более детальную постановку разработчику. Разработчик во всём этом находил ещё кучу неоднозначностей или реализовывал как считал правильным. Затем всё это тестировалось. Причём протестировать задача не из простых. Представьте документ с 300 полями и 1000 правил валидации эти полей из разряда "если в таком-то поле указано то-то, то сумма таких-то полей должна быть такой-то". Сколько тестов нужно написать, чтобы всё это проверить? А это только один документ из десятков. Плюс правила постоянно меняются.

Когда предметные специалисты стали писать правила не на русском языке, а на формальном (на самом деле конечно они не сами их писали, а с помощью обученных системных аналитиков), то все эти этапы (интерпретация правил на русском языке, реализация их в коде, тестирование) просто потеряли актуальность. Затрачиваемое время уменьшается на порядок.

Конечно генератор может работать неправильно, но протестировать его проще, чем постоянно тестировать эти тыщи правил.

Конечно аналитики могут написать неправильную спецификацию правила и тогда для неё сгенерится неправильный код. Но вероятность того, что они напишут неправильное правило на русском языке и что его неправильно поймут и реализуют существенно выше.

Поскольку эти правила описаны на формальном языке (а не на русском языке и не в коде), то мы можем автоматически сгенерить тесты по спецификациям правил. Можем автоматически проверить правила на противоречивость (например, два правила одновременно соблюдаться никак не могут), на избыточность, ... Правда мы этого не делали :) но возможность есть. В принципе, для Java кода есть всякие статические анализаторы, генераторы тестов. А для очень ограниченного DSL эти вещи делать гораздо проще, чем для ЯП общего назначения.

Поэтому никаких джунов, которые не понимали почему сгенерился не тот код там не было. Вопросы оптимальности сгенеренного кода там тоже не стояли. Потому что в документе слишком мало полей, и они слишком однотипные, чтобы требовалось что-то оптимизировать под разные типы документов или разные типы правил. Если код генерится нормально, то он нормально будет работать на любых документах. Если завтра появится документ с миллиардом полей, тогда, да, нужно будет допиливать генератор.

Насчет того, чтобы запустить код и посмотреть как он работает. 1) Раньше они просто писали правила на русском языке, эти правила могли быть вообще бессмысленными, ссылаться на несуществующие поля документа. То что они пишутся на формальном языке и валидируются в соответствии со структурой документа - это уже огромный шаг. 2) Если они их как-то формулировали на русском языке, то могут как-то сформулировать и на формальном. Математики же как-то пишут формулы не запуская их :) OCL - это по сути тот же язык формальной логики (переменные, предикаты). 3) Вообще, запустить и посмотреть это полезная функциональность, мы её не делали, но можно было бы сделать. Точнее правила нельзя было запускать в процессе написания. Но можно их написать, нажать кнопку генерации, загрузить тестовый документ и получить детальный HTML-отчет о валидации с возможность кликнуть на ошибку, увидеть элемент документа, для которого найдена ошибка. Увидеть какие правила успешно отработали и т.п. Ну т.е. запускать правила можно. Если что-то идёт не так, то либо правило написано неправильно, либо нужно поправить генератор.


Насчёт кодогенерации для разработчиков, а не аналитиков. Здесь история та же. На чаше весов: 1) потратить на этот проект 10 лет или 2) сделать его за год с кодогенераторами. Если в проекте возникает куча однотипного кода, то есть два способа с этим справиться:

1) Можно вынести какие-то вещи в конфиги, в аннотации. Написать интерпретатор для всего этого и в рантайме как-то обрабатывать. В определенном пространстве имен находим классы с определенными аннотациями, ищем в них методы с определенными аннотациями, ищем ещё что-то, что-то со всем этим делаем.

2) Другой вариант делать то же самое, но в design-time.

Для конкретики банальный пример. Есть много разных object mapper'ов. Их можно разделить на две категории: 1) те которые конфигурируются с помощью аннотаций, билдеров и т.п., в рантайме ищут у объектов атрибуты с одинаковыми названиями 2) те которые основаны на кодогенерации.

Как-раз 1-ый вариант обычно работает медленнее, потому что очевидно есть накладные расходы. И самое главное, чтобы понять работают они или нет их нужно запустить! Фиг знает, что там вообще происходит. А если для мепперов код сгенерен, то я просто смотрю этот код и сразу вижу что не так. И, вообще, почему вы считаете, что сгенеренный код - это что-то обязательно непонятное? У нас генерится ровно такой код (с форматированием и комментариями!), который мы написали бы вручную. Мне просто лень писать однотипный код, но если бы я его писал или если бы его писали джуны, то он был бы точно таким же с точностью до пробелов.
...
Рейтинг: 0 / 0
jdk17
    #40106014
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

насчет оверхеда сложный вопрос. Наверное в большинстве проектов возникает какая-то рутина в разработке. Я очень ленивый человек, писать два раза аналогичный код мне очень лень. Как только такое возникает я сразу же ищу варианты автоматизации. Если кодогенератор на 10 строк сгенерит мне 1000 строк, то какой тут оверхед. Если с нуля во всё это погружаться, то наверное, да, нужно кучу всего прочитать, попробовать кучу разных инструментов, написать кучу этих генераторов.

Чтобы показать насколько я ленивый. У нас есть конструктор инструментов моделирования, в котором можно добавляться новые нотации. Начнём с того, что в большинстве инструментов либо хрен добавишь новую нотацию моделирования, они жёстко зашиты в коде, либо в модели можно добавлять новые значки, но модели просто на уровне картинок, их потом дальше невозможно анализировать. У нас не так, каждая нотация - это полноценный язык моделирования. Отдельно описывается 1) семантическая составляющая моделей (типы объектов, типы связей, атрибуты), 2) отдельно визуальная составляющая (какие значки должны быть на диаграммах, какая палитра инструментов, что должно происходить при создании объектов, при удалении, при переприсоединении связей, какие формы свойств должны быть - короче полностью описывается редактор диаграмм со всем операциями над моделями). И 1, и 2 у нас описаны в виде моделей. Методолог может просто накликать всё это мышкой, в том числе достаточно сложные вещи (просто добавление объектов в модель, добавление объектов из справочника с помощью диалога, всякие правила валидации - что обычно реализуется в коде). Но мне на столько лень делать даже это, что написал генератор этих спецификаций редакторов диаграмм из метамоделей. И конечно это экономит кучу времени. Лень файлы локализации писать, лень типовой Java-код писать, лень документацию писать. Наверное это единственное, что движет мной в работе :)
...
Рейтинг: 0 / 0
25 сообщений из 240, страница 4 из 10
Форумы / Java [игнор отключен] [закрыт для гостей] / jdk17
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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