|
jdk17
|
|||
---|---|---|---|
#18+
Просят сет бинов со сквозным поведением. А ты - Spring с AOP. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 15:59 |
|
jdk17
|
|||
---|---|---|---|
#18+
mayton Никогда в жизни никто не ставил мне такую задачу. Один из заказчиков говорил - вот у нас есть черный ящик. В него с одной стороны втекают биржевые события. А с другой стороны я хочу чтоб вытекали команды к трейдингу. И систем - зоорпарк. И интеграций и стандартов - зоопарк. И аналитика туда втекает. И метадата. И история индексов. И живые события. Вот натянется на этот глобус Oracle Apex? 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 Ares_ekb H5N1 вам проще, а для других это разбираться в чужом велосипеде, который тут едет, тут не едет Ares_ekb Сгенеренный код типовой, разбираться в нём не нужно и править его вручную не нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 16:01 |
|
jdk17
|
|||
---|---|---|---|
#18+
Никанор Кузьмич Берем low-code платформу типа Oracle APEX... Задача решена (Извините, не удержался) mayton Вообще генераторов сейчас гораздо больше чем мы думаем. Просто не все из них генерят код. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 16:02 |
|
jdk17
|
|||
---|---|---|---|
#18+
Я думаю что хороший профессионал не избегает кодо-генерации а наоборот - использует ее в хвост и в гриву. Способность команды выучить кодо-генератор - мы можем рассмотреть отдельным топиком. Но то уже управленческая задача. А у нас тут - идея в вакууме. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 16:13 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb Да, я об этом и говорю! А если low-code платформы нет, то пишем её сами Да, там ядро системы есть. Но это оффтоп. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 16:17 |
|
jdk17
|
|||
---|---|---|---|
#18+
mayton Единсвтенное что меня печалит - это вялая активность всего форума. Мы выдержали Луговского, Дедала и Студентика. А сегодняшний трафик - это просто капающая вода из крана. так забаньте уже Петро. думаю не я один такой, кому проще на английском вопрос сформулировать, чем тут через тупые вопросы Петро пробиваться, прекрасно понимаю, что ответы этому персонажу не нужны, он просто скучает. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 16:21 |
|
jdk17
|
|||
---|---|---|---|
#18+
mayton Это может быть не моделью но просто некой стартовой точкой. Мне сложно себе представить поддержку модели на основе Word-документа. Это конечно какая-то жесть и на практике наверное нет смысл делать такое. Но возможен такой сценарий. Нарисовали схему данных, сгенерили из неё Word-документ, отправили на согласование заказчику, предметным специалистам и т.д. Они что-то поправили в документе, синхронизируем эти изменения обратно в модель. Можно в другую модель (не в исходную), а затем аналитик уже в удобном для него инструменте моделирования сравнивает две модели, смотрит что изменилось, мержит изменения в основную версию. Затем итерации повторяются. В итоге из модели генерятся окончательные версии документов и код. Поскольку источник один, то это гарантия того, что документы, код, какие-нибудь XML-схемы и т.п. не разойдутся между собой. У нас в некоторых проектах работа была ровно так организована за исключением конечно автоматического перегона документа обратно в модель, это проще сделать аналитику вручную, хотя если бы делалось автоматически, то экономило бы кучу времени. Ещё как вариант можно использовать не обязательно Word. А какие-то языки разметки или DSL, но прикрутить к ним WYSIWYG редактор. Похоже всё уже придумано, я описываю JetBrains MPS :) хотя сам им не пользовался ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 16:23 |
|
jdk17
|
|||
---|---|---|---|
#18+
В топку Word. Запаришся его парсить и сохранять. swagger.json - да. .graphql - да .wsdl - да Word - не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 16:28 |
|
jdk17
|
|||
---|---|---|---|
#18+
H5N1 mayton Единсвтенное что меня печалит - это вялая активность всего форума. Мы выдержали Луговского, Дедала и Студентика. А сегодняшний трафик - это просто капающая вода из крана. так забаньте уже Петро. думаю не я один такой, кому проще на английском вопрос сформулировать, чем тут через тупые вопросы Петро пробиваться, прекрасно понимаю, что ответы этому персонажу не нужны, он просто скучает. Это так не работает. Ты жмешь кнопку. И профильный модератор (Denis кажется) реагирует. Я за его действия - не отвечаю. Джентльмен по одну сторону от Суэтца.... ну короче ты понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 16:30 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb Это не настолько космическая задача, Выше сказал - студент делает одно окно в день. Для ПО вида ERP конечно надо две модели. И модель ядра. Вот тут генерируйте справочники. Тема не про ERP ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 16:36 |
|
jdk17
|
|||
---|---|---|---|
#18+
Никанор Кузьмич Вы забываете при этом, что перед тем, как сгенерировать эти 80%, на вашем велосипеде простите, средстве моделирования, надо научиться ездить. Можно ли это сделать за один день? Можно ли это сделать за один день, не обращаясь за помощью к кому-либо из коллег? Если нет, то закладывайте еще время на обучение. Никанор Кузьмич Вы гарантируете, что ваш сгенерированный код всегда будет оптимальным, не будет потреблять лишних ресурсов? У вас невозможна ситуация, когда пользователь имел в виду одно, а сгенерировалось что-то другое? Встречный вопрос :) Как вы пишите SQL запросы? Вдруг СУБД выполнит их не оптимально? Наверное лучше напрямую доставать данные из базы через какое-нибудь API или сделать свою СУБД. Вы пишите одну строку SQL, а внутри там происходит куча операций, где гарантия, что во всех этих тоннах кода программист не допустил ошибку? Где гарантия, что СУБД правильно поняла ваш запрос? Вдруг вы имели в виду другое? Где гарантия, что по вашим JavaDoc комментариям сгенерилась корректная и оптимальная документация? Где гарантия, что вы описали API с помощью Swagger и для вас сгенерился правильный boilerplate-код или правильный UI? Где гарантия, что ваш gradle скрипт работает правильно? DSL, генераторы разных вещей из кода или из моделей используются просто повсеместно. Насчет корректности сгенеренного кода, да, конечно я озадачивался этим вопросом. Гарантируется это очень просто. Если тупо, то тестированием. Протестировать генератор можно один раз, это на порядок проще, чем писать кучу новых тестов для однотипного кода, который писался бы вручную. Более правильный вариант это 1) формально описать семантику исходного языка 2) описать семантику результирующего языка 3) формально описать преобразование выражений из одного языка в другой 4) доказать что это преобразование сохраняет семантику. Всё это стоит примерно в тыщу раз дороже, чем написание кодогенераторов или преобразований моделей. Меня хватило только частично на 1-ый пункт . Но дело не в кодогенерации, в принципе формальная верификация любого софта - это очень долго дорого. Для бедных есть тестирование. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 17:36 |
|
jdk17
|
|||
---|---|---|---|
#18+
Подумалось что для авто-генерируемого кода сам DSL является спецификацией. Поэтому генерированный код - вообще проверять не надо. Надо просто проверить генератор. А кто полезет проверять руками java код - тому надо руки отбить и направить его носом в DSL. Там - всё что надо. DSL == спецификация ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 17:41 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb Самое сложное, что я генерил: правила валидации документов, описанные на одном DSL (язык OCL), преобразовывал в XPath и Java код. При этом там делалась куча всяких оптимизаций, автоматически генерился не только код для валидации, но и для определения пути к невалидному элементу и т.п. Нет предела совершенству. Но я-бы просто остановился на таком наборе правил, который даёт полное предсказание результата. Как в SQL (DQL): Код: java 1.
безотносительно реализации SQL машины или наличия индексов - я всегда уверен что получаю результат обладающий определёнными свойствами. (в этом языке даже таже предикат (predicate) сам как-бы говорит нам что он - "предсказатель") Тоесть если ваш OCL дает такое однозначное понимание свойств - то он почти совершенен. И можно не компилируя и не запуская приложение уже заранее говорить будет ли результат обладать свойствами или нет. Это важно для тестирования например. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 17:51 |
|
jdk17
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Блин, для ERP пишите! Для Java с этим сложнее. В основном наверное используют Eclipse. Ecore-модели и всякие кодогенераторы там очень давно. 1С: EDT сделана на Eclipse, я никогда ей не пользовался, но на сколько я понимаю конфигурации там создаются в виде Ecore-моделей, а этот их русскоязычный DSL реализован Xtext, но это всё не точно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 17:56 |
|
jdk17
|
|||
---|---|---|---|
#18+
mayton Word - не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 18:00 |
|
jdk17
|
|||
---|---|---|---|
#18+
mayton DSL == спецификация mayton Тоесть если ваш OCL дает такое однозначное понимание свойств - то он почти совершенен. И можно не компилируя и не запуская приложение уже заранее говорить будет ли результат обладать свойствами или нет. Это важно для тестирования например. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 18:08 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb Что может быть не оптимальным в Entity или DTO классах? Или в мепперах между Entity и DTO? В каких-нибудь CRUD-контроллерах? Как что. Превращение ваших 100тыр кода в легаси. Начинаем новый проект. На spring boot starter data rest который наследник над jpa. Вы автоматизировали jpa? А как быть с этим наследником? Взять ваше легаси? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 18:19 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb Уже есть DevExpress XAF ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 18:20 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb Встречный вопрос :) Как вы пишите SQL запросы? Вдруг СУБД выполнит их не оптимально? Ares_ekb Где гарантия, что СУБД правильно поняла ваш запрос? Вдруг вы имели в виду другое? Ну или я перефразирую: никто из ваших джунов, приходивших к вам на проект, ни разу не задавал вопрос "почему генератор сгенерировал это, когда я ожидал вон то?" Я правильно понимаю? Ares_ekb Что может быть не оптимальным в Entity или DTO классах? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 18:27 |
|
jdk17
|
|||
---|---|---|---|
#18+
Никанор Кузьмич Ares_ekb Встречный вопрос :) Как вы пишите SQL запросы? Вдруг СУБД выполнит их не оптимально? Ares_ekb Где гарантия, что СУБД правильно поняла ваш запрос? Вдруг вы имели в виду другое? Ну или я перефразирую: никто из ваших джунов, приходивших к вам на проект, ни разу не задавал вопрос "почему генератор сгенерировал это, когда я ожидал вон то?" Я правильно понимаю? Ares_ekb Что может быть не оптимальным в Entity или DTO классах? + Поддерживаю. Мысли правильные. Например, набросать аннотации для хибера не трудно и автокодом, но заставить его выполняться в приемлемое время - это задача уже не под силу автогенераторам. Здесь знание контекста необходимо и творческий подход. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 18:39 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb mayton Word - не надо. Мои аналитики уже лет 7 не знают что такое Word. Они лабают на confluence в markup языках. Шучу конечно. Word конечно они видят. Но его роль в цикле разработки весьма нивелирована. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 18:47 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb, Я выше не случайно говорил про линейку. В архитектуре есть понятие оверхед. Вот ваш метод _в большинстве crud проектов_ - оверхед. В небольшой части, например ERP это эффективно ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 19:15 |
|
jdk17
|
|||
---|---|---|---|
#18+
Никанор Кузьмич, генератор из OCL в XPath/Java писался не для разработчиков, а для аналитиков. Они вообще не знают, что там есть какой-то генератор, они просто пишут спецификации правил. Раньше они писали их на русском языке, в части правил вообще невозможно было понять, что имеется в виду, их можно было интерпретировать как угодно. Эти правила отдавались системным аналитикам, которые во всём этом разбирались и писали чуть более детальную постановку разработчику. Разработчик во всём этом находил ещё кучу неоднозначностей или реализовывал как считал правильным. Затем всё это тестировалось. Причём протестировать задача не из простых. Представьте документ с 300 полями и 1000 правил валидации эти полей из разряда "если в таком-то поле указано то-то, то сумма таких-то полей должна быть такой-то". Сколько тестов нужно написать, чтобы всё это проверить? А это только один документ из десятков. Плюс правила постоянно меняются. Когда предметные специалисты стали писать правила не на русском языке, а на формальном (на самом деле конечно они не сами их писали, а с помощью обученных системных аналитиков), то все эти этапы (интерпретация правил на русском языке, реализация их в коде, тестирование) просто потеряли актуальность. Затрачиваемое время уменьшается на порядок. Конечно генератор может работать неправильно, но протестировать его проще, чем постоянно тестировать эти тыщи правил. Конечно аналитики могут написать неправильную спецификацию правила и тогда для неё сгенерится неправильный код. Но вероятность того, что они напишут неправильное правило на русском языке и что его неправильно поймут и реализуют существенно выше. Поскольку эти правила описаны на формальном языке (а не на русском языке и не в коде), то мы можем автоматически сгенерить тесты по спецификациям правил. Можем автоматически проверить правила на противоречивость (например, два правила одновременно соблюдаться никак не могут), на избыточность, ... Правда мы этого не делали :) но возможность есть. В принципе, для Java кода есть всякие статические анализаторы, генераторы тестов. А для очень ограниченного DSL эти вещи делать гораздо проще, чем для ЯП общего назначения. Поэтому никаких джунов, которые не понимали почему сгенерился не тот код там не было. Вопросы оптимальности сгенеренного кода там тоже не стояли. Потому что в документе слишком мало полей, и они слишком однотипные, чтобы требовалось что-то оптимизировать под разные типы документов или разные типы правил. Если код генерится нормально, то он нормально будет работать на любых документах. Если завтра появится документ с миллиардом полей, тогда, да, нужно будет допиливать генератор. Насчет того, чтобы запустить код и посмотреть как он работает. 1) Раньше они просто писали правила на русском языке, эти правила могли быть вообще бессмысленными, ссылаться на несуществующие поля документа. То что они пишутся на формальном языке и валидируются в соответствии со структурой документа - это уже огромный шаг. 2) Если они их как-то формулировали на русском языке, то могут как-то сформулировать и на формальном. Математики же как-то пишут формулы не запуская их :) OCL - это по сути тот же язык формальной логики (переменные, предикаты). 3) Вообще, запустить и посмотреть это полезная функциональность, мы её не делали, но можно было бы сделать. Точнее правила нельзя было запускать в процессе написания. Но можно их написать, нажать кнопку генерации, загрузить тестовый документ и получить детальный HTML-отчет о валидации с возможность кликнуть на ошибку, увидеть элемент документа, для которого найдена ошибка. Увидеть какие правила успешно отработали и т.п. Ну т.е. запускать правила можно. Если что-то идёт не так, то либо правило написано неправильно, либо нужно поправить генератор. Насчёт кодогенерации для разработчиков, а не аналитиков. Здесь история та же. На чаше весов: 1) потратить на этот проект 10 лет или 2) сделать его за год с кодогенераторами. Если в проекте возникает куча однотипного кода, то есть два способа с этим справиться: 1) Можно вынести какие-то вещи в конфиги, в аннотации. Написать интерпретатор для всего этого и в рантайме как-то обрабатывать. В определенном пространстве имен находим классы с определенными аннотациями, ищем в них методы с определенными аннотациями, ищем ещё что-то, что-то со всем этим делаем. 2) Другой вариант делать то же самое, но в design-time. Для конкретики банальный пример. Есть много разных object mapper'ов. Их можно разделить на две категории: 1) те которые конфигурируются с помощью аннотаций, билдеров и т.п., в рантайме ищут у объектов атрибуты с одинаковыми названиями 2) те которые основаны на кодогенерации. Как-раз 1-ый вариант обычно работает медленнее, потому что очевидно есть накладные расходы. И самое главное, чтобы понять работают они или нет их нужно запустить! Фиг знает, что там вообще происходит. А если для мепперов код сгенерен, то я просто смотрю этот код и сразу вижу что не так. И, вообще, почему вы считаете, что сгенеренный код - это что-то обязательно непонятное? У нас генерится ровно такой код (с форматированием и комментариями!), который мы написали бы вручную. Мне просто лень писать однотипный код, но если бы я его писал или если бы его писали джуны, то он был бы точно таким же с точностью до пробелов. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 19:49 |
|
jdk17
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, насчет оверхеда сложный вопрос. Наверное в большинстве проектов возникает какая-то рутина в разработке. Я очень ленивый человек, писать два раза аналогичный код мне очень лень. Как только такое возникает я сразу же ищу варианты автоматизации. Если кодогенератор на 10 строк сгенерит мне 1000 строк, то какой тут оверхед. Если с нуля во всё это погружаться, то наверное, да, нужно кучу всего прочитать, попробовать кучу разных инструментов, написать кучу этих генераторов. Чтобы показать насколько я ленивый. У нас есть конструктор инструментов моделирования, в котором можно добавляться новые нотации. Начнём с того, что в большинстве инструментов либо хрен добавишь новую нотацию моделирования, они жёстко зашиты в коде, либо в модели можно добавлять новые значки, но модели просто на уровне картинок, их потом дальше невозможно анализировать. У нас не так, каждая нотация - это полноценный язык моделирования. Отдельно описывается 1) семантическая составляющая моделей (типы объектов, типы связей, атрибуты), 2) отдельно визуальная составляющая (какие значки должны быть на диаграммах, какая палитра инструментов, что должно происходить при создании объектов, при удалении, при переприсоединении связей, какие формы свойств должны быть - короче полностью описывается редактор диаграмм со всем операциями над моделями). И 1, и 2 у нас описаны в виде моделей. Методолог может просто накликать всё это мышкой, в том числе достаточно сложные вещи (просто добавление объектов в модель, добавление объектов из справочника с помощью диалога, всякие правила валидации - что обычно реализуется в коде). Но мне на столько лень делать даже это, что написал генератор этих спецификаций редакторов диаграмм из метамоделей. И конечно это экономит кучу времени. Лень файлы локализации писать, лень типовой Java-код писать, лень документацию писать. Наверное это единственное, что движет мной в работе :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 20:08 |
|
|
start [/forum/topic.php?fid=59&msg=40105893&tid=2120291]: |
0ms |
get settings: |
29ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
51ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
495ms |
get tp. blocked users: |
2ms |
others: | 2766ms |
total: | 3379ms |
0 / 0 |