Каковы риски с проектом Ломбок? - PullRequest
31 голосов
/ 04 января 2011

Я придумываю цели по производительности на новый год, и я подумал, что было бы забавно поставить цель уменьшить размер базы кода, особенно шаблонной.Единственное действие, которое я придумал для решения этой проблемы, - это использование Project Lombok , чтобы сделать бины такими короткими, какими они должны быть.Но у меня есть привычка игнорировать недостатки нового программного обеспечения и подходов, поэтому я полагаюсь на сообщество Stack Overflow: кто-нибудь может сказать мне, почему Lombok - плохая идея?

Ответы [ 6 ]

24 голосов
/ 04 января 2011

Ограничением Lombok является тот факт, что он тесно связан с компилятором Java. Поскольку API процессора аннотаций позволяет создавать новые файлы только во время компиляции (но не изменять существующие файлы), lombok использует этот API в качестве точки входа для изменения компилятора Java. К сожалению, эти модификации компилятора часто используют непубличные API. Использование lombok может быть хорошей идеей, но вы должны знать, что обновление вашего компилятора может нарушить ваш код. Вероятность низкая, но я всегда чувствую себя некомфортно, используя непубличные API.

17 голосов
/ 04 января 2011

Основным недостатком является поддержка IDE. Поскольку Lombok на самом деле не является изменением языка, а ваша IDE понимает только Java, вам понадобится IDE, которая поддерживает Lombok, чтобы все работало правильно. На данный момент это только Eclipse , который включает в себя Eclipse и IntelliJ. Если вы используете eclipse, это может быть нормально, но помните, что вы принимаете решение и для будущих разработчиков.

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

14 голосов
/ 04 января 2011

Один потенциальный недостаток чего-то подобного Lombok заключается в том, что при отсутствии «сеттеров / геттеров» исходные инструменты могут не «распознавать» аспекты результирующего объекта, которые придают ему «бобовые» качества, поскольку эти качества проявляются только в скомпилированном классе..

Еще одним недостатком является то, что это еще один кусок "черной магии" в цепочке инструментов.К счастью, это, кажется, довольно мягкая часть (я не использовал ее), и тот факт, что это происходит во время компиляции, а не во время выполнения, на самом деле является благословением (ИМХО).Но вы не сможете повторно использовать или поделиться своим кодом без проекта, поскольку он добавляет артефакты в вашу базу кода.Таким образом, хотя скомпилированный файл класса может быть «POJO», я бы сказал, что ваш исходный код НЕ является POJO.

Ни один из них не наносит ущерба минусам, скорее это просто аспекты, которые следует учитывать при ожидании.

11 голосов
/ 31 января 2018

По моему мнению, исходный код в "Java + Lombok" больше не является исходным кодом Java.Я вижу в этом нечто похожее на то, что компания Borland сделала много лет назад в своей IDE Borland C ++ Builder для VCL - они ввели «свойства» в коде C ++, эффективно представляя какой-то новый язык программирования, который больше не был C ++ (не C ++ в смыслестандарт языка C ++).Источники, использующие «Java + Lombok», не являются допустимыми источниками в смысле спецификации языка Java.Более того, я думаю, что аннотации не были предназначены для влияния на семантику языка.

4 голосов
/ 03 ноября 2017

Это сторонняя библиотека, и есть разработчики, которые плохо ее знают.

IDE должна поддерживать обработку аннотаций (есть плагины для IDEA и Eclipse).

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

3 голосов
/ 09 ноября 2016

Как указал пользователь @ Jcs в другом ответе, я хотел бы добавить больше.

В нашем проекте мы используем mapstruct, которая используется для генерации классов mapper перед тем, каккод компилируется с использованием команды mvn generate-sources, это делается на этапе процесса с использованием подключаемого модуля процессора maven.

project lombok добавляет байт-код для метода получения / установки в файл класса на этапе компиляции.1008 * так как фаза процесса выполняется перед компиляцией, он обнаруживает, что в классе нет доступных методов получения / установки.

Существует несколько обходных путей для выполнения фазы компиляции более одного.См. Этот git hub ticket для более подробной информации.

Примечание: я использую STS ide от Spring, и он поддерживается lombok:)

...