Lombok হল একটি Java লাইব্রেরি যা ক্লাসের boilerplate কোড যেমন getters, setters, constructors, toString, equals, hashCode মেথড ইত্যাদি অটোমেটিক্যালি জেনারেট করে। Lombok ডেভেলপারদের জন্য কোড লেখার সময় সাশ্রয়ী এবং কোড আরও পরিস্কার ও সংক্ষিপ্ত করে। এটি মূলত annotation processor হিসেবে কাজ করে এবং কোড কমপাইল হওয়ার সময় অটোমেটিক্যালি কোড জেনারেট করে।
MapStruct এবং Lombok একসাথে ব্যবহার করার ফলে আপনি সহজেই object mapping এবং ডোমেইন মডেল তৈরি করতে পারেন, যেখানে Lombok আপনার ক্লাসের boilerplate কোড তৈরি করে, এবং MapStruct আপনার ডোমেইন অবজেক্টগুলির মধ্যে ম্যাপিং সম্পন্ন করে।
১. Lombok এর প্রয়োজনীয়তা
Java প্রোগ্রামিং ভাষায়, ডোমেইন অবজেক্ট (POJO) বা Plain Old Java Object তৈরি করতে গেলে বারবার একই ধরনের কোড লেখার প্রয়োজন হয়, যেমন:
- Getter এবং Setter মেথড
- Constructor (অথবা প্রপার্টি ভিত্তিক কনস্ট্রাক্টর)
- toString() মেথড
- equals() এবং hashCode() মেথড
এই সবকিছু ম্যানুয়ালি কোড করা ডেভেলপারদের জন্য অত্যন্ত সময়সাপেক্ষ এবং এটি কোডের পাঠযোগ্যতাকে কমিয়ে দেয়। এখানে Lombok আপনার সাহায্যে আসে, যেহেতু এটি আপনার জন্য এই কোডগুলো অটোমেটিক্যালি তৈরি করে, ফলে আপনার কোড আরো পরিষ্কার, সংক্ষিপ্ত এবং রিডেবল হয়।
২. Lombok এর প্রধান অ্যানোটেশন গুলি
Lombok এর কিছু গুরুত্বপূর্ণ অ্যানোটেশন নিম্নরূপ:
@Getter and @Setter: এই অ্যানোটেশনগুলি আপনার ক্লাসের সমস্ত ফিল্ডের জন্য getter এবং setter মেথড তৈরি করে।
@Getter @Setter public class Person { private String name; private int age; }এই কোডের মাধ্যমে
nameএবংageফিল্ডের জন্য getter এবং setter মেথড অটোমেটিক্যালি তৈরি হবে।@AllArgsConstructor: এটি একটি কনস্ট্রাক্টর তৈরি করে যা ক্লাসের সমস্ত ফিল্ডকে প্যারামিটার হিসেবে গ্রহণ করে।
@AllArgsConstructor public class Person { private String name; private int age; }এখানে, একটি কনস্ট্রাক্টর তৈরি হবে যা
nameএবংageফিল্ড গ্রহণ করবে।@NoArgsConstructor: এটি একটি ডিফল্ট কনস্ট্রাক্টর তৈরি করে যা কোন প্যারামিটার গ্রহণ করে না।
@NoArgsConstructor public class Person { private String name; private int age; }এটি একটি ডিফল্ট কনস্ট্রাক্টর তৈরি করবে।
@ToString: এটি ক্লাসের একটি toString() মেথড তৈরি করে যা সমস্ত ফিল্ডের মান প্রিন্ট করবে।
@ToString public class Person { private String name; private int age; }এতে
toString()মেথড তৈরি হবে যাnameএবংageফিল্ডের মানকে একটি স্ট্রিং হিসাবে প্রদর্শন করবে।@EqualsAndHashCode: এটি equals() এবং hashCode() মেথড তৈরি করে, যা অবজেক্টের তুলনা এবং হ্যাশিং কাজ সহজ করে।
@EqualsAndHashCode public class Person { private String name; private int age; }এটি
equals()এবংhashCode()মেথড তৈরি করবে, যা আপনার অবজেক্টের তুলনা এবং হ্যাশিং সঠিকভাবে পরিচালনা করবে।@Builder: এটি একটি builder pattern তৈরি করে, যাতে আপনি অবজেক্টটি নির্মাণ করতে পারেন একাধিক ফিল্ড সহ।
@Builder public class Person { private String name; private int age; }এতে একটি builder pattern তৈরি হবে, যার মাধ্যমে আপনি অবজেক্ট তৈরি করতে পারবেন যেমন:
Person.builder().name("John").age(25).build();
৩. Lombok এবং MapStruct একসাথে ব্যবহার করা
MapStruct এবং Lombok একসাথে ব্যবহৃত হলে, Lombok আপনার POJOs (Plain Old Java Objects) বা DTOs (Data Transfer Objects) এর জন্য ফিল্ডের জন্য getters, setters, constructors তৈরি করবে, এবং MapStruct এই ক্লাসগুলির মধ্যে ডেটা ম্যাপিং সম্পন্ন করবে। এতে করে কোড ডেভেলপমেন্ট সহজ এবং দ্রুত হবে।
উদাহরণ:
Person.java (DTO Class)
import lombok.Getter;
import lombok.Setter;
import lombok.AllArgsConstructor;
@Getter
@Setter
@AllArgsConstructor
public class Person {
private String name;
private int age;
}
PersonDTO.java (DTO Class)
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class PersonDTO {
private String fullName;
private int age;
}
PersonMapper.java (MapStruct Mapper Interface)
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
@Mapper(componentModel = "spring")
public interface PersonMapper {
PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);
PersonDTO personToPersonDTO(Person person);
}
এখানে, Lombok ব্যবহার করে Person এবং PersonDTO ক্লাসের জন্য getters, setters, এবং constructors তৈরি করা হয়েছে। এরপর, MapStruct এর মাধ্যমে Person থেকে PersonDTO তে ডেটা ম্যাপিং করা হয়েছে।
৪. MapStruct এবং Lombok এর সুবিধা
- Boilerplate Code Reduction: Lombok এবং MapStruct একসাথে ব্যবহার করলে, আপনাকে ম্যানুয়ালি getter, setter, constructor, equals, hashCode এবং toString মেথড লেখার প্রয়োজন হয় না। এতে কোড আরও পরিষ্কার এবং কমপ্যাক্ট হয়।
- Code Generation: Lombok অটোমেটিকভাবে কোড জেনারেট করে এবং MapStruct compile-time এ ম্যাপিং কোড তৈরি করে, যা পারফরম্যান্সে সাহায্য করে এবং ডেভেলপমেন্ট সময় কমিয়ে দেয়।
- Type Safety: Lombok এবং MapStruct উভয়ই টাইপ সেফ কোড প্রডিউস করে, যার মাধ্যমে টাইপ সম্পর্কিত ত্রুটি কম হয়।
- Integration with Frameworks: Lombok এবং MapStruct Spring, JPA, Hibernate ইত্যাদি জনপ্রিয় Java ফ্রেমওয়ার্কের সাথে সহজেই ইন্টিগ্রেট করা যায়।
সারাংশ
Lombok এবং MapStruct একসাথে ব্যবহারের মাধ্যমে আপনি JavaBeans বা POJOs এর মধ্যে দ্রুত এবং কার্যকরী ডেটা ট্রান্সফার সম্পন্ন করতে পারেন। Lombok আপনাকে ডোমেইন অবজেক্টের জন্য প্রয়োজনীয় boilerplate কোড অটোমেটিক্যালি তৈরি করতে সাহায্য করে, এবং MapStruct ডেটা ম্যাপিং এর কাজ সহজ ও দ্রুতভাবে সম্পন্ন করে। এই দুইটি লাইব্রেরি একসাথে ব্যবহৃত হলে কোডের পরিস্কারতা, কার্যকারিতা এবং পারফরম্যান্সের উন্নতি হয়।
Read more