2011-01-03 15 views
15

Osiągam cele wydajnościowe na nowy rok i pomyślałem, że z przyjemnością postawię sobie cel polegający na zmniejszeniu rozmiarów bazy kodu, szczególnie na płycie głównej. Jedną z akcji, które wymyśliłem, aby rozwiązać ten problem, jest użycie Project Lombok, aby fasolki były tak krótkie, jak powinny. Ale mam zwyczaj przeoczyć wady na nowe oprogramowanie i podejścia, więc opieram się na społeczności Stack Overflow: Czy ktoś może mi powiedzieć, dlaczego Lombok jest złym pomysłem?Jakie są zagrożenia związane z projektem Lombok?

Odpowiedz

12

Główną wadą jest wsparcie IDE. Ponieważ Lombok nie jest tak naprawdę zmianą języka, a ponieważ twój IDE rozumie tylko java, będziesz potrzebował IDE, który wspiera Lombok, aby wszystko działało prawidłowo. Na dzień dzisiejszy to tylko Eclipse, który zawiera Eclipse i IntelliJ. Jeśli używasz Zaćmienie, które może być ok, ale pamiętaj, że podejmujesz decyzję również dla przyszłych programistów.

Proponuję, aby rozważyć przeniesienie części kodu do mniej ceremonialnego języka, na przykład groovy. Odnieśliśmy sukces, przenosząc część naszej logiki biznesowej i modeli na groovy i działa naprawdę sprawnie.

+6

Niepoprawny tylko o Eclipse: Używam Project Lombok w Netbeans Dev. Sądzę, że wspierają również inne IDE. – TheLQ

+0

Rzeczy mogą się poprawiać, ale krytyka wciąż wymaga, abyś potrzebował wyraźnego wsparcia IDE, aby użyć IDE z projektem Lombok. Punkt, którego twój projekt nie kwalifikuje się już jako ściśle określony kod Java. – Zeki

+0

Jeśli jest to jakaś pociecha, używam Eclipse, ale niektórzy z pozostałych deweloperów używają IDEA, co nie wydaje się jeszcze wspierać Lombok. – jldugger

7

Jedną z potencjalnych wad takiego elementu, jak na przykład Lombok, jest to, że w przypadku "brakujących" seterów/modułów pobierających narzędzia źródłowe mogą nie "rozpoznawać" aspektów uzyskanego obiektu, które nadają mu cechy "fasoli", ponieważ cechy te manifestują się jedynie w skompilowanym obrazie. klasa.

Inną wadą jest to, że jest to kolejny element "czarnej magii" w łańcuchu narzędzi. Na szczęście wydaje się to raczej łagodny kawałek (nie używałem go), a fakt, że dzieje się to w czasie kompilacji, a nie w czasie wykonywania, jest w rzeczywistości błogosławieństwem (IMHO). Ale nie będziesz mógł ponownie użyć ani udostępnić swojego kodu bez projektu, ponieważ dodaje on artefakty do bazy kodu. Tak więc, podczas gdy skompilowany plik klasy może być "POJO", argumentowałbym, że twój kod źródłowy NIE jest POJO.

Żadne z nich nie jest paraliżujące wady, a jedynie aspekty, które wymagają świadomości na przyszłość.

+3

Możesz użyć http://projectlombok.org/features/delombok.html, aby uzyskać zajęcia z wanilii. – maaartinus

13

Ograniczeniem Lombok jest fakt, że jest ściśle związany z kompilatorem Java. Ponieważ API procesora adnotacji pozwala tylko na tworzenie nowych plików podczas kompilacji (a nie na modyfikację istniejących plików), lombok używa tego API jako punktu wejścia do modyfikacji kompilatora Java. Niestety te modyfikacje kompilatora powodują intensywne korzystanie z niepublicznych interfejsów API. Używanie lombok może być dobrym pomysłem, ale musisz mieć świadomość, że uaktualnienie kompilatora może zepsuć twój kod. Prawdopodobieństwo jest niskie, ale zawsze czuję się niekomfortowo, używając niepublicznych interfejsów API.

+5

Bardzo dobry punkt. Historia Java 8 + Lombok pokazała nam, że może to stanowić problem. –

1

Jak wskazał użytkownik @Jcs w innej odpowiedzi, chciałbym dodać więcej.

W naszym projekcie używamy mapstruct, który służy do generowania klas mapperów, zanim kod zostanie skompilowany za pomocą komendy mvn generate-sources, odbywa się to w fazie procesu za pomocą wtyczki mastera.

project lombok dodaje kod bajtowy dla pobierającego/ustawiającego w pliku klasy w fazie kompilacji.

ponieważ faza procesu jest wykonywana przed kompilacją, stwierdza, że ​​klasa nie zawiera żadnego programu pobierającego/ustawiającego.

Dostępnych jest kilka obejść do wykonania fazy kompilacji więcej niż jeden. Aby uzyskać więcej informacji, zobacz ten numer git hub ticket.

Uwaga: Używam STS ide przez wiosnę i jest wspierany przez Lombok :)

1

Jest to biblioteka osoba trzecia, a tam są programiści, którzy nie wiedzą to dobrze.

IDE powinien obsługiwać przetwarzanie adnotacji (są wtyczki dla IDEA i Eclipse).

Jak wspomniano powyżej, twój kod będzie bez getter/setters. Prowadzi to do naruszeń sonaru/checkstyle.

2

Moim zdaniem kod źródłowy w "Java + Lombok" nie jest już kodem źródłowym Java. Uważam, że jest to coś podobnego, co firma Borland powstała wiele lat temu w swoim Borland C++ Builder IDE dla VCL - wprowadzili "właściwości" w języku C++ skutecznie wprowadzając nowy język programowania, który nie był już C++ (nie C++ w sensie standard języka C++). Źródła korzystające z "Java + Lombok" nie są poprawnymi źródłami w rozumieniu specyfikacji języka Java. Ponadto uważam, że adnotacje nie zostały zaprojektowane, aby wpływać na semantyczną znajomość języka.

Powiązane problemy