powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / jdk17
25 сообщений из 240, страница 9 из 10
jdk17
    #40108471
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

нет, это код написанный с нуля (точнее это псевдокод по мотивам реального кода) и единственный смысл этого метода это вычислить какое-то значение, которое дальше используется в init(). У меня бомбит от передачи данных между методами через поля. И я кажется понял почему! Потому что это фактически то же самое, что в процедурных языках использовать глобальные переменные. На мой взгляд, они должны добавляться только при явной необходимости, если без них никак не обойтись, для хранения состояния, а не для передачи данных.
...
Рейтинг: 0 / 0
jdk17
    #40108490
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb

3) Построение кода из небольших самостоятельных блоков (микро-DSL, микрофреймвоков, внутренних API). Люди, которые ни на чём кроме Java не писали, либо впадают в ступор, когда чего-то нет в стандартной библиотеке, либо пишут какой-то лапшакод

Тут есть определенная опасность. Микро DSL понятны только создателю. На согласование
новых ключевых слов микро-языка с командой нужно потратить огромное количество усилий человеко-часов
чтобы под давлением вашего авторитета или под убеждением правильности и необходимости ваш DSL
был принят сообществом (командой).

Я был свидетелем когда кастомные DSL поверх yaml или groovy проваливались на первом-же код-ревью
или на митинге. Обычно команда голосует очень консервативно. Все - не против фреймворка и библиотеки
поверх Java но как только речь идёт о DSL - очень сильно напрягаются.

Короче мы переписали DSL на Java. И в этом нет лично моей вины. Просто таков этот сложный процесс. Согласовать
идею со всеми.
...
Рейтинг: 0 / 0
jdk17
    #40108492
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb

3) В том числе сгенерили и такой класс . Да, в нём куча switch/case и if, но какая разница, сопровождать его всё равно не нужно. Если изменится модель, то все эти классы они просто перегенерят. Причём сейчас этот класс можно сгенерить с паттерн-мэтчингом вместо if. Достаточно чуток изменить шаблон кода и нажать кнопку.

Есть техническое ограничение на саму JVM. Длина метода в оп-кодах может быть не более 64к.
Экспериментально я находил такие ANTLR грамматики которые просто порождали некомпилируемые
сорцы. Я уж не помню как это фиксили.
Но в данном примере если байткод будет компактнее вследствие замены if-else на switch-case то
я конечно буду голосовать за последний.

Это - чисто технический вопрос.
...
Рейтинг: 0 / 0
jdk17
    #40108497
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
mayton,

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

я не могу показать код из-за NDA, но там эпичные вещи. Эпичные вещи долго описывать. Приведу такой пример (псевдокод):

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public class SomeWizard {

   private final SomeModel model = new SomeModel();
   private ISelection selection;

   public void init(ISelection selection) {
       this.selection = selection;
       String name = getName()
       model.setName(name);
   }

   private String getName() {
       return selection.getFirstObject().getName();
   }

}




Это просто дурно написаный код и все
...
Рейтинг: 0 / 0
jdk17
    #40108507
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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. Я как-то проще к этому отношусь, может быть зря.
...
Рейтинг: 0 / 0
jdk17
    #40108509
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb

В Java иногда напрягает, что нельзя переопределять операторы как в C++ или что нет расширений классов как в C# или что для Stream API нет синтаксиса как у LINQ, и приходится писать больше кода. Но, с другой стороны, какая разница какой синтаксис используется. Наверное x + y выглядит лучше, чем x.add(y), это может быть важно для пользователей, если они сами пишут какие-нибудь скрипты или спецификации. А для разработчиков в принципе не так важно.

Ты можешь использовать Scala.
...
Рейтинг: 0 / 0
jdk17
    #40108510
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb,
А что ты имеешь против Lua?
У шарпистов на нем активно пишут не программисты аналитики.
...
Рейтинг: 0 / 0
jdk17
    #40108512
Фотография 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.
@Data
@Entity
@Table("students")
public class Student {

    @Id
    private String id;
    private String name;
    private String email;
    private LocalDateTime lastUpdateTime;

}


И она обвешана аннотациями ORM/Lombok и может даже Jaskson для биндинга и сериализаций.
Вот допустим у тебя в Lisp возникает та-же задача. Процессить сущности в базе в бизнес логике и сериализировать.

Вот какие ты сделаешь функции или макросы или может еще какую-то черную магию?
...
Рейтинг: 0 / 0
jdk17
    #40108514
localhost8080
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.
@Data
@Entity
@Table("students")
public class Student {

    @Id
    private String id;
    private String name;
    private String email;
    private LocalDateTime lastUpdateTime;

}


И она обвешана аннотациями ORM/Lombok и может даже Jaskson для биндинга и сериализаций.
Вот допустим у тебя в Lisp возникает та-же задача. Процессить сущности в базе в бизнес логике и сериализировать.

Вот какие ты сделаешь функции или макросы или может еще какую-то черную магию?


в реальности хибер зло - причем зло не потому что он плохой- порог входа очень высок

что сейчас знает типичный прогер- ну отношения там один ко многим ,многие ко многим ,каскадные оперции ,если повезет то еще и состояние сущностей)на этом все

но фактически хибернейт это государство в государстве - и чтобы правильно применить этот инструмент нужны экспертные знания - иначе вы проиграли - поэтому я всегда говорю - если тут нет экспертов по хибер - используйте жук
...
Рейтинг: 0 / 0
jdk17
    #40108515
localhost8080
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Одна из самых очевидных ошибок при разработке на хибере- ты хочешь взять что то из таблицы но не все ,при этом конечно все хотят убрать самый бесполезный механизм хибера грязная проверка,который мало того что в память гадит,так еще и ресурсы процессорные кушает
как этого избежать ? использовать проекции- кто то тут умеет их ?)сомневаюсь- но при этом все продолжают ругать хибер
...
Рейтинг: 0 / 0
jdk17
    #40108540
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
localhost8080,

а какие преимущества у хибера перед простым jdbc?
...
Рейтинг: 0 / 0
jdk17
    #40108545
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
))
те же что и при склейке строк
print("<""HTML" + ">".....
...
Рейтинг: 0 / 0
jdk17
    #40108546
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
localhost8080,
давай не начинать про нужность хибера.
Его надо использовать как в дельфи. Там нужно сложно - есть API Win и ASM. Нужно просто для студента - есть vcl.
localhost8080
Одна из самых очевидных ошибок при разработке на хибере- ты хочешь взять что то из таблицы но не все

а не надо этого хотеть. В прошлый раз ты показывал проект сущности из 80 полей. В этом причина.
Не надо заводить шарманку про нужность хибера)
...
Рейтинг: 0 / 0
jdk17
    #40108550
localhost8080
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя
localhost8080,

а какие преимущества у хибера перед простым jdbc?

удобное апи для работы с графами объектов,встроеный мапинг кортежей,сокращение бойлер плейт кода,читаемость кода и удобство поддержки в дальнейшем

Рассмотрим простой пример - у вас была таблица A с некими колонками a.1 a.2 a.3
у вас описаны запросы
написаны маперы этого кортежа в какой то бизнес объект

что произойдет если вы добавите колонку a.4 в эту таблицу,правильно - придется переписывать руками очень много кода
в случае с хибернейт достаточно будет лишь добавить это поле с сущность

кажется пустяком,но это когда ты вне спринтов живешь и никому ничего не обязан
...
Рейтинг: 0 / 0
jdk17
    #40108551
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
localhost8080
что произойдет если вы добавите колонку a.4 в эту таблицу,правильно - придется переписывать руками очень много кода
в случае с хибернейт достаточно будет лишь добавить это поле с сущность

кажется пустяком,но это когда ты вне спринтов живешь и никому ничего не обязан


Ты пугаешь ежа голой жопой. У Вади если кнопку нужно добавить на страницу нужно 100500 html перебить в 100500 процедурах, а ты тут про какие-то колонки байки рассказываешь
...
Рейтинг: 0 / 0
jdk17
    #40108552
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,

авторТы пугаешь ежа голой жопой. У Вади если кнопку нужно добавить на страницу нужно 100500 html перебить в 100500 процедурах, а ты тут про какие-то колонки байки рассказываешьесли ты не понимаешь что икак устроено - не надо фантазировать и говорить чепуху. и смешивать добавление полей и кнопок.

простое добавление поля в таблицу ведет изменение логики и хибер автоматом не позволит это сделать,, особенна на фронте
...
Рейтинг: 0 / 0
jdk17
    #40108553
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
localhost8080
Рассмотрим простой пример - у вас была таблица A с некими колонками a.1 a.2 a.3
у вас описаны запросы
написаны маперы этого кортежа в какой то бизнес объект

что произойдет если вы добавите колонку a.4 в эту таблицу,правильно - придется переписывать руками очень много кода
И вот тут, лично у меня, возникает когнитивный диссонанс ...
Код: sql
1.
select поле1, поле2, поле3 from таблица

Что произойдёт, если в таблице есть (появилось) поле4? Правильно. Ничего не случится. Это поле отсутствует в наборе данных.
Научитесь, в общем, правильно начинать рассказ о преимуществах ORM вообще и Hibernate - в частности.
...
Рейтинг: 0 / 0
jdk17
    #40108555
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
localhost8080
вадя
localhost8080,

а какие преимущества у хибера перед простым jdbc?

удобное апи для работы с графами объектов,встроеный мапинг кортежей,сокращение бойлер плейт кода,читаемость кода и удобство поддержки в дальнейшем

Рассмотрим простой пример - у вас была таблица A с некими колонками a.1 a.2 a.3
у вас описаны запросы
написаны маперы этого кортежа в какой то бизнес объект

что произойдет если вы добавите колонку a.4 в эту таблицу,правильно - придется переписывать руками очень много кода
в случае с хибернейт достаточно будет лишь добавить это поле с сущность

кажется пустяком,но это когда ты вне спринтов живешь и никому ничего не обязан
хороший вброс. Купил попкорн, надел маску.
...
Рейтинг: 0 / 0
jdk17
    #40108563
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
. Купил попкорн, надел маску.
ты попкорном будешь бросаться?
...
Рейтинг: 0 / 0
jdk17
    #40108564
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
угу. Смотри как localhost8080 вырос из джунов. Стал серьезным, политкорректным и если делает вброс то только инженерным языком.
Молодец.
...
Рейтинг: 0 / 0
jdk17
    #40108567
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton


Вообще главная цель - обеспечить читаемость кода другим человеком. А уж компиллятор как нибудь разберется.
Это кстати сказал Мартин Фаулер. Код пишется человеком для людей.

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

а какие преимущества у хибера перед простым jdbc?

Я-бы по другому спросил. Есть ли жизнь по ту сторону Spring?

Тоесть можем ли мы сегодня (в наше время) рассматривать вообще возможность применения Hibernate без Spring?
Я когда-то писал и использовал. Но что-то мне кажется что сегодня я по памяти даже не напишу привед-мир на хибере.
По крайней мере инициализация всех этих менеджеров представляется мне задачей непростой.

Я к чему это. А. К бритве Оккама. Мы говорим Hibernate - а подразумеваем Spring-Hibernate.

А что у нас Хибернейт вообще не существует без спринга?
...
Рейтинг: 0 / 0
jdk17
    #40108674
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
(define-domain-class person
  (name string)
  (birth-date date)
  (pets pet 0 *))
...
Рейтинг: 0 / 0
jdk17
    #40108760
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
вадя
localhost8080,

а какие преимущества у хибера перед простым jdbc?

Я-бы по другому спросил. Есть ли жизнь по ту сторону Spring?

Тоесть можем ли мы сегодня (в наше время) рассматривать вообще возможность применения Hibernate без Spring?
Я когда-то писал и использовал. Но что-то мне кажется что сегодня я по памяти даже не напишу привед-мир на хибере.
По крайней мере инициализация всех этих менеджеров представляется мне задачей непростой.

Я к чему это. А. К бритве Оккама. Мы говорим Hibernate - а подразумеваем Spring-Hibernate.

А что у нас Хибернейт вообще не существует без спринга?


Зачем?!
Hibernate это «чудище обло, озорно, огромно, стозевно и лаяй».
Spring-data-jpa хоть как то прикрывает весь этот хтонический ужас, от не окрепших умов.
:-)
...
Рейтинг: 0 / 0
25 сообщений из 240, страница 9 из 10
Форумы / Java [игнор отключен] [закрыт для гостей] / jdk17
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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