Project Lombok – cách làm cho lớp mô hình của bạn đơn giản

Tram Ho

Rất nhiều Java Framework ngày nay đòi hỏi việc truy cập vào các giá trị của đối tượng thông qua các thức chuẩn là các getter/setter. Nó không đòi hỏi việc public các fields thông qua đối tượng mà chúng ta có thể truy cập, nhưng htoong qua các phương thức mặc định này, do đó chúng ta phải kiểm soát cái dữ liệu có thể vào, ra khỏi đối tượng. Một ý tưởng tốt khác là thêm vào, đặc biệt các model class các phương thức toString(), hashCode() nhằm sử dụng để đối chiếu các thể hiện của đối tượng của cùng một lớp. Kết quả của những đề xuất này xuất hiện trong rất nhiều dòng code ngay cả đối với những lớp đơn giản. Cũng như khi chúng ta cần cập nhật những lớp đó, nó sẽ đòi hỏi phải viết lại các phương thức so sánh, cái tiêu tốn thời gian và khả năng sáng tạo của chúng ta. May mắn thay, chúng ta có Project Lombok.

How it work?

Lombok là một dự án tương đối nhỏ cái sử dụng các annotations cụ thể được chèn vào các phần mã nguồn. So sánh với những giải pháp tương tự khác thì Lombok không sử dụng refection, nhưng tất cả những phương thức này được sinh ra một cách tự động trong suốt quá trình biên dịch.

Và đó là tất cả nguyên lý.

Okay. Các mẫu mã nguồn ở đây là gì? Một cách ngắn gọn nó là một phần của mã nguồn cái liên quan tới những gì được thêm vào(Ví dụ bởi các framework), nhưng như vậy thì mã nguồn sẽ thực sự dài, lặp lại và nhàm chán lúc maintain. Cũng như các getter/setter, equals, và các loại khác được nhồi nhét vào.

Đúng rồi, do đó hãy xem xét một số ví dụ.

@Getter/@Setter

Cái đầu tiên này là khá rõ ràng. Bằng cách thêm vào @Getter và @Setter annotations chúng ta không cần lo lắng về các phương thức này, cái chắc chắn sẽ làm ngắn các lớp model của bạn.

@EqualAndHashCode

Một cái thú vị khác có thể thêm vào các model class đó là các phương thức equal() và hashCode() cái được sử dụng để xác định các thể hiện độc lập của một lớp. Mặc định tất cả các đối tượng kế thừa từ lớp Object, nhưng nó là một các thức tuyệt vời để ghi đè chúng.

@ToString

Một annotation thú vị khác đó chính là @ToString cái nhằm ghi đè các phương thức nhằm trả về text mô tả về lớp. Thông thường nó sẽ có giá trị với tất cả các fields. Sử dụng Lombok chúng ta có thể sinh ra nó bằng cách sử dụng một annotation duy nhất và nó bạn cần loại bỏ một vài cái trong số chúng bạn cần cung cấp thêm tham số exclude. Giống như các tham số của phương thức, chúng ta cần truyền vào tên của field.

@NoArgsConstructor

Annotation cuối cùng cái cần được đề cập nhằm sử dụng cho quá trình sinh tự động constructor không tham số của lớp. Mặc định Java compiler sẽ thêm nó vào cho bạn trừ khi bạn đã triển khai bất cứ một constructor nào khác. Ví dụ, nếu bạn định nghĩa constructor cái có một vài tham số điều đó có nghĩa là compiler sẽ không tự động thêm vào constructor không tham số cho bạn. Bạn cần thực hiện nó trong mã nguồn của mình. Và đó là lý do chúng ta có thể sử dụng annotation này.

Other annotations

Các annotations bên trên cái cũng ta cần để sử dụng cho project của mình. Nhưng cũng có một vài cái tuyệt vời khác như:

  • @NonNull: Annotation này loại bỏ sự cần thiết phải thêm vào các phương thức kiểm tra giá trị của field có null hay không.
  • @Log: Có một vài biến thể khi sử dụng nó. Nói một cách đơn giản nó tạo ra một đối tượng Logger cho chúng ta(Có thể là một biến thể Log4J2).
  • @Data: annotation này kết hợp @Getter, @Setter, @ToString, @EqualAndHashCode và @RequiredArgsConstructor vào làm một. Kết quả cuối cùng là chúng ta sẽ có một constructor với tất cả các tham số là final fields.

Apply to the our project

Step 1: Install Project Lombok plugin

Đối với các IDE xây dựng trên nền tảng của Intellij chúng ta có thể cài đặt plugin này một cách dễ dàng thông qua Marketplace. Hoặc bạn cũng có thể tìm thấy plugin này thông qua trang web chính thức.

Step 2: Add dependencies

Thêm vào file build.gradle của bạn:

Step 3: Annotate model class

Sau khi đã tạo một vài model classes cái được đánh dấu với các annotations cần thiết. Ví dụ bên dưới là User Class, cái được thiết lập với các thức chuẩn(gettters/setters, equals, no argument constructor, nhưng phương thức toString() không nên show ra password(Cái mặc dù đã được mã hóa, nhưng vẫn không phải là một ý tưởng tốt nếu chúng ta để lộ nó).

Another use case

Chúng ta cũng có thể sử dụng một số annotation của Lombok nhằm bỏ qua việc tính toán coverage trong ứng dụng Android bằng jacoco.
Lý do là vì từ Jacoco 0.8.0, coverage tool này có thể bỏ qua mã nguồn được sinh ra từ Lombok. Điều này dẫn đến việc bạn có thể sử dụng @lombok.Generated annotaion để bỏ qua một số phương thức, hoặc class trong quá trình tính toán coverage của jacoco một cách nhanh chóng + tiện lợi.

Bạn có thể tham khảo thêm ở đây.

Source

https://medium.com/@wkrzywiec/project-lombok-how-to-make-your-model-class-simple-ad71319c35d5

Reference

Ignoring Lombok Code in Jacoco.
How to write less and better code, or Project Lombok.

P/S

Những bài đăng trên viblo của mình nếu có phần Source thì đây là một bài dịch từ chính nguồn được dẫn link tới bài gốc ở phần này. Đây là những bài viết mình chọn lọc + tìm kiếm + tổng hợp từ Google trong quá trình xử lý issues khi làm dự án thực tế + có ích và thú vị đối với bản thân mình. => Dịch lại như một bài viết để lục lọi lại khi cần thiết.
Do đó khi đọc bài viết xin mọi người lưu ý:

1. Các bạn có thể di chuyển đến phần source để đọc bài gốc(extremely recommend).

2. Bài viết được dịch lại => Không thể tránh khỏi được việc hiểu sai, thiếu xót, nhầm lẫn do sự khác biệt về ngôn ngữ, ngữ cảnh cũng như sự hiểu biết của người dịch => Rất mong các bạn có thể để lại comments nhằm làm hoàn chỉnh vấn đề.

3. Bài dịch chỉ mang tính chất tham khảo + mang đúng ý nghĩa của một translated article được request từ phía cty mình.

4. Hy vọng bài viết có chút giúp ích cho các bạn(I hope so!). =)))))))

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo