|
jdk17
|
|||
---|---|---|---|
#18+
mayton, нет, это код написанный с нуля (точнее это псевдокод по мотивам реального кода) и единственный смысл этого метода это вычислить какое-то значение, которое дальше используется в init(). У меня бомбит от передачи данных между методами через поля. И я кажется понял почему! Потому что это фактически то же самое, что в процедурных языках использовать глобальные переменные. На мой взгляд, они должны добавляться только при явной необходимости, если без них никак не обойтись, для хранения состояния, а не для передачи данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 18:36 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb 3) Построение кода из небольших самостоятельных блоков (микро-DSL, микрофреймвоков, внутренних API). Люди, которые ни на чём кроме Java не писали, либо впадают в ступор, когда чего-то нет в стандартной библиотеке, либо пишут какой-то лапшакод Тут есть определенная опасность. Микро DSL понятны только создателю. На согласование новых ключевых слов микро-языка с командой нужно потратить огромное количество усилий человеко-часов чтобы под давлением вашего авторитета или под убеждением правильности и необходимости ваш DSL был принят сообществом (командой). Я был свидетелем когда кастомные DSL поверх yaml или groovy проваливались на первом-же код-ревью или на митинге. Обычно команда голосует очень консервативно. Все - не против фреймворка и библиотеки поверх Java но как только речь идёт о DSL - очень сильно напрягаются. Короче мы переписали DSL на Java. И в этом нет лично моей вины. Просто таков этот сложный процесс. Согласовать идею со всеми. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 19:54 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb 3) В том числе сгенерили и такой класс . Да, в нём куча switch/case и if, но какая разница, сопровождать его всё равно не нужно. Если изменится модель, то все эти классы они просто перегенерят. Причём сейчас этот класс можно сгенерить с паттерн-мэтчингом вместо if. Достаточно чуток изменить шаблон кода и нажать кнопку. Есть техническое ограничение на саму JVM. Длина метода в оп-кодах может быть не более 64к. Экспериментально я находил такие ANTLR грамматики которые просто порождали некомпилируемые сорцы. Я уж не помню как это фиксили. Но в данном примере если байткод будет компактнее вследствие замены if-else на switch-case то я конечно буду голосовать за последний. Это - чисто технический вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 19:58 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb mayton, нет, это код написанный с нуля (точнее это псевдокод по мотивам реального кода) и единственный смысл этого метода это вычислить какое-то значение, которое дальше используется в init(). У меня бомбит от передачи данных между методами через поля. И я кажется понял почему! Потому что это фактически то же самое, что в процедурных языках использовать глобальные переменные. На мой взгляд, они должны добавляться только при явной необходимости, если без них никак не обойтись, для хранения состояния, а не для передачи данных. Твой пример требует рефакторинга с выбрасыванием лишних методов. Причем если интерфейс selection не используется, то и он в классе не нужен. По поводу полей, то классы через них имеют состояние. Значит надо их использовать. А как иначе. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 20:25 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb mayton, я не могу показать код из-за NDA, но там эпичные вещи. Эпичные вещи долго описывать. Приведу такой пример (псевдокод): Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Это просто дурно написаный код и все ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 21:25 |
|
jdk17
|
|||
---|---|---|---|
#18+
mayton, на мой взгляд, в лиспе нет особой разницы между DSL и фреймвоками. В Java иногда напрягает, что нельзя переопределять операторы как в C++ или что нет расширений классов как в C# или что для Stream API нет синтаксиса как у LINQ, и приходится писать больше кода. Но, с другой стороны, какая разница какой синтаксис используется. Наверное x + y выглядит лучше, чем x.add(y), это может быть важно для пользователей, если они сами пишут какие-нибудь скрипты или спецификации. А для разработчиков в принципе не так важно. Хотя, я конечно зря смешиваю эти понятия. DSL без специфического синтаксиса это уже не DSL. Мне лично удавалось продвигать только стандартизированные DSL типа OCL, QVTo, MOF M2T. И то, с трудом, люди скорее готовы использовать JavaScript или Lua. Потому что для JavaScript много вакансий и специалистов. Один фиг, что из этих специалистов ровно ноль человек писали какие-нибудь преобразования моделей на JavaScript, и опыт во фронте или в бекенде им никак не поможет. А специальный DSL для преобразования моделей осваивается за день и позволяет делать всё гораздо проще, не позволяет писать лапшакод. Но всё равно людей пугают DSL, они думают, что нужно потратить месяцы на их освоение, и что эти знания будут лежать мертвым грузом и никогда не понадобятся ни на какой другой работе, или что они не смогут найти специалистов по этому DSL. Я как-то проще к этому отношусь, может быть зря. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 21:29 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb В Java иногда напрягает, что нельзя переопределять операторы как в C++ или что нет расширений классов как в C# или что для Stream API нет синтаксиса как у LINQ, и приходится писать больше кода. Но, с другой стороны, какая разница какой синтаксис используется. Наверное x + y выглядит лучше, чем x.add(y), это может быть важно для пользователей, если они сами пишут какие-нибудь скрипты или спецификации. А для разработчиков в принципе не так важно. Ты можешь использовать Scala. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 21:42 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb, А что ты имеешь против Lua? У шарпистов на нем активно пишут не программисты аналитики. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 21:55 |
|
jdk17
|
|||
---|---|---|---|
#18+
Ares_ekb Хотя, я конечно зря смешиваю эти понятия. DSL без специфического синтаксиса это уже не DSL. Мне лично удавалось продвигать только стандартизированные DSL типа OCL, QVTo, MOF M2T. И то, с трудом, люди скорее готовы использовать JavaScript или Lua. А можешь привести пример какого-нибудь DSL который здесь произведет вау-эффект? Здесь - люди сидят тоже не простые. Энтерпрайз повидали и всяко. И вот допустим есть у нас такая типичная энтити. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
И она обвешана аннотациями ORM/Lombok и может даже Jaskson для биндинга и сериализаций. Вот допустим у тебя в Lisp возникает та-же задача. Процессить сущности в базе в бизнес логике и сериализировать. Вот какие ты сделаешь функции или макросы или может еще какую-то черную магию? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 22:14 |
|
jdk17
|
|||
---|---|---|---|
#18+
mayton Ares_ekb Хотя, я конечно зря смешиваю эти понятия. DSL без специфического синтаксиса это уже не DSL. Мне лично удавалось продвигать только стандартизированные DSL типа OCL, QVTo, MOF M2T. И то, с трудом, люди скорее готовы использовать JavaScript или Lua. А можешь привести пример какого-нибудь DSL который здесь произведет вау-эффект? Здесь - люди сидят тоже не простые. Энтерпрайз повидали и всяко. И вот допустим есть у нас такая типичная энтити. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
И она обвешана аннотациями ORM/Lombok и может даже Jaskson для биндинга и сериализаций. Вот допустим у тебя в Lisp возникает та-же задача. Процессить сущности в базе в бизнес логике и сериализировать. Вот какие ты сделаешь функции или макросы или может еще какую-то черную магию? в реальности хибер зло - причем зло не потому что он плохой- порог входа очень высок что сейчас знает типичный прогер- ну отношения там один ко многим ,многие ко многим ,каскадные оперции ,если повезет то еще и состояние сущностей)на этом все но фактически хибернейт это государство в государстве - и чтобы правильно применить этот инструмент нужны экспертные знания - иначе вы проиграли - поэтому я всегда говорю - если тут нет экспертов по хибер - используйте жук ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 22:23 |
|
jdk17
|
|||
---|---|---|---|
#18+
Одна из самых очевидных ошибок при разработке на хибере- ты хочешь взять что то из таблицы но не все ,при этом конечно все хотят убрать самый бесполезный механизм хибера грязная проверка,который мало того что в память гадит,так еще и ресурсы процессорные кушает как этого избежать ? использовать проекции- кто то тут умеет их ?)сомневаюсь- но при этом все продолжают ругать хибер ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2021, 22:29 |
|
jdk17
|
|||
---|---|---|---|
#18+
localhost8080, а какие преимущества у хибера перед простым jdbc? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2021, 07:16 |
|
jdk17
|
|||
---|---|---|---|
#18+
вадя, )) те же что и при склейке строк print("<""HTML" + ">"..... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2021, 08:26 |
|
jdk17
|
|||
---|---|---|---|
#18+
localhost8080, давай не начинать про нужность хибера. Его надо использовать как в дельфи. Там нужно сложно - есть API Win и ASM. Нужно просто для студента - есть vcl. localhost8080 Одна из самых очевидных ошибок при разработке на хибере- ты хочешь взять что то из таблицы но не все а не надо этого хотеть. В прошлый раз ты показывал проект сущности из 80 полей. В этом причина. Не надо заводить шарманку про нужность хибера) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2021, 08:30 |
|
jdk17
|
|||
---|---|---|---|
#18+
вадя localhost8080, а какие преимущества у хибера перед простым jdbc? удобное апи для работы с графами объектов,встроеный мапинг кортежей,сокращение бойлер плейт кода,читаемость кода и удобство поддержки в дальнейшем Рассмотрим простой пример - у вас была таблица A с некими колонками a.1 a.2 a.3 у вас описаны запросы написаны маперы этого кортежа в какой то бизнес объект что произойдет если вы добавите колонку a.4 в эту таблицу,правильно - придется переписывать руками очень много кода в случае с хибернейт достаточно будет лишь добавить это поле с сущность кажется пустяком,но это когда ты вне спринтов живешь и никому ничего не обязан ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2021, 09:23 |
|
jdk17
|
|||
---|---|---|---|
#18+
localhost8080 что произойдет если вы добавите колонку a.4 в эту таблицу,правильно - придется переписывать руками очень много кода в случае с хибернейт достаточно будет лишь добавить это поле с сущность кажется пустяком,но это когда ты вне спринтов живешь и никому ничего не обязан Ты пугаешь ежа голой жопой. У Вади если кнопку нужно добавить на страницу нужно 100500 html перебить в 100500 процедурах, а ты тут про какие-то колонки байки рассказываешь ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2021, 09:29 |
|
jdk17
|
|||
---|---|---|---|
#18+
Андрей Панфилов, авторТы пугаешь ежа голой жопой. У Вади если кнопку нужно добавить на страницу нужно 100500 html перебить в 100500 процедурах, а ты тут про какие-то колонки байки рассказываешьесли ты не понимаешь что икак устроено - не надо фантазировать и говорить чепуху. и смешивать добавление полей и кнопок. простое добавление поля в таблицу ведет изменение логики и хибер автоматом не позволит это сделать,, особенна на фронте ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2021, 09:40 |
|
jdk17
|
|||
---|---|---|---|
#18+
localhost8080 Рассмотрим простой пример - у вас была таблица A с некими колонками a.1 a.2 a.3 у вас описаны запросы написаны маперы этого кортежа в какой то бизнес объект что произойдет если вы добавите колонку a.4 в эту таблицу,правильно - придется переписывать руками очень много кода Код: sql 1.
Что произойдёт, если в таблице есть (появилось) поле4? Правильно. Ничего не случится. Это поле отсутствует в наборе данных. Научитесь, в общем, правильно начинать рассказ о преимуществах ORM вообще и Hibernate - в частности. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2021, 09:49 |
|
jdk17
|
|||
---|---|---|---|
#18+
localhost8080 вадя localhost8080, а какие преимущества у хибера перед простым jdbc? удобное апи для работы с графами объектов,встроеный мапинг кортежей,сокращение бойлер плейт кода,читаемость кода и удобство поддержки в дальнейшем Рассмотрим простой пример - у вас была таблица A с некими колонками a.1 a.2 a.3 у вас описаны запросы написаны маперы этого кортежа в какой то бизнес объект что произойдет если вы добавите колонку a.4 в эту таблицу,правильно - придется переписывать руками очень много кода в случае с хибернейт достаточно будет лишь добавить это поле с сущность кажется пустяком,но это когда ты вне спринтов живешь и никому ничего не обязан ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2021, 09:55 |
|
jdk17
|
|||
---|---|---|---|
#18+
PetroNotC Sharp . Купил попкорн, надел маску. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2021, 10:58 |
|
jdk17
|
|||
---|---|---|---|
#18+
вадя, угу. Смотри как localhost8080 вырос из джунов. Стал серьезным, политкорректным и если делает вброс то только инженерным языком. Молодец. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2021, 11:08 |
|
jdk17
|
|||
---|---|---|---|
#18+
mayton Вообще главная цель - обеспечить читаемость кода другим человеком. А уж компиллятор как нибудь разберется. Это кстати сказал Мартин Фаулер. Код пишется человеком для людей. +100500!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2021, 11:13 |
|
jdk17
|
|||
---|---|---|---|
#18+
вадя localhost8080, а какие преимущества у хибера перед простым jdbc? Я-бы по другому спросил. Есть ли жизнь по ту сторону Spring? Тоесть можем ли мы сегодня (в наше время) рассматривать вообще возможность применения Hibernate без Spring? Я когда-то писал и использовал. Но что-то мне кажется что сегодня я по памяти даже не напишу привед-мир на хибере. По крайней мере инициализация всех этих менеджеров представляется мне задачей непростой. Я к чему это. А. К бритве Оккама. Мы говорим Hibernate - а подразумеваем Spring-Hibernate. А что у нас Хибернейт вообще не существует без спринга? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2021, 13:27 |
|
jdk17
|
|||
---|---|---|---|
#18+
mayton А можешь привести пример какого-нибудь DSL который здесь произведет вау-эффект? Здесь - люди сидят тоже не простые. Энтерпрайз повидали и всяко. И вот допустим есть у нас такая типичная энтити. Нужно было сделать редактор моделей данных, который поддерживает разные нотации. В нём можно рисовать ER-модель, UML диаграммы классов, Anchor-модели и т.п. Чтобы всё это работало было нужно следующее: 1) Entity-классы с JPA-аннотациями для хранения моделей 2) Java-классы для работы с моделями (реализуют интерфейс org.eclipse.emf.ecore.EObject), они по структуре похожи на Entity-классы, но лучше их не смешивать 3) Мапинги 1->2 4) Мапинги 2->1 5) DTO-классы с Jackson-аннотациями. У этих классов только вертикальные ссылки на дочерние DTO классы оставлены как ссылки. А горизонтальные ссылки заменены на поля, хранящие идентификаторы объектов, на которые ссылаемся. Это нужно потому что JSON-документ - это дерево, а не граф и (де)сериализация существенно упрощается, если горизонтальных ссылок нет. Конечно можно попробовать всё это объединить в одних классах, но получится жесть, проще всё это разделять 6) Мапинги 5->2 7) Мапинги 2->5 8) JavaScript-классы для самого редактора диаграмм, которые умеют (де)сериализироваться в JSON Сами схемы данных описывались на языке Xcore - это гибрид Ecore и Xtend. Вот, пример, xcore-файла из другого проекта. Там ничего особенного, этот язык позволяет описывать классы, интерфейсы, наследование, атрибуты, ссылки, операции. Конечно же никакие JPA-аннотации, Lombok аннотации и т.п. в этих Xcore-файлах не нужны, они добавляются кодогенераторами в зависимости от того какая именно это ссылка (один-ко-многим, многие-ко-многим) и т.п. Автоматически добавляются всякие аннотации типа @JsonSubTypes и т.д. У меня было 50 Кб этих xcore-файлов. 100 Кб шаблонов на языке Xtend для генерации кода. И из всего этого генерилось 3,5 Мб исходников (пункты 1-8). Один плюс такого подхода, что пишется просто меньше кода, не нужно писать однотипный код. Те же JPA или Jackson аннотации обычно пишутся по какой-то одной схеме и их проще сгенерить, чем проверять что где-то не забыл что-то добавить. Ещё в исходную модель или в код на DSL можно добавлять какие-нибудь дополнительные данные. Типа названия и описания этой сущности на русском и других языках. В единственном и множественном числе, в разных падежах и т.д. Потом из этого можно генерить файлы локализации, документацию. В общем всё, что касается схемы данных описано в одном месте, а не размазано по куче файлов. Ещё одна штука, которую я делал в этом проекте - это описывал грамматику разных языков, например, SQL на языке Xtext (это тоже своеобразный DSL типа языка описания грамматик в ANTLR), и потом генерил из неё JavaScript-код для парсинга, сериализации и автодополнения SQL-выражений на клиенте. В Лиспе я думаю, что подход был бы примерно такой же. Я описал бы схему данных без всяких аннотаций и т.п. Определил бы какой-нибудь макрос типа define-domain-class, который получал бы на вход название класса, перечень атрибутов с типами, ссылки на другие классы с указанием множественности и обязательности, может быть операции какие-нибудь. А внутри этого макроса уже спрятал бы всякие вещи для сохранения этих данных в базу, сериализации в JSON и т.п. Что-нибудь типа: Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2021, 18:24 |
|
jdk17
|
|||
---|---|---|---|
#18+
mayton вадя localhost8080, а какие преимущества у хибера перед простым jdbc? Я-бы по другому спросил. Есть ли жизнь по ту сторону Spring? Тоесть можем ли мы сегодня (в наше время) рассматривать вообще возможность применения Hibernate без Spring? Я когда-то писал и использовал. Но что-то мне кажется что сегодня я по памяти даже не напишу привед-мир на хибере. По крайней мере инициализация всех этих менеджеров представляется мне задачей непростой. Я к чему это. А. К бритве Оккама. Мы говорим Hibernate - а подразумеваем Spring-Hibernate. А что у нас Хибернейт вообще не существует без спринга? Зачем?! Hibernate это «чудище обло, озорно, огромно, стозевно и лаяй». Spring-data-jpa хоть как то прикрывает весь этот хтонический ужас, от не окрепших умов. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2021, 10:58 |
|
|
start [/forum/topic.php?fid=59&msg=40108514&tid=2120291]: |
0ms |
get settings: |
16ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
44ms |
get topic data: |
3ms |
get forum data: |
0ms |
get page messages: |
441ms |
get tp. blocked users: |
0ms |
others: | 310ms |
total: | 821ms |
0 / 0 |