MapStruct এবং Lombok দুটি জনপ্রিয় টুল যা Java ডেভেলপমেন্টে ব্যবহৃত হয়। MapStruct মডেল ম্যাপিং বা ডোমেইন অবজেক্টের মধ্যে ডেটা ট্রান্সফরমেশন সম্পন্ন করতে ব্যবহৃত হয়, এবং Lombok কোড লেখার প্রচেষ্টা কমাতে ব্যবহৃত হয়, বিশেষ করে Getter, Setter, Constructors, Equals, HashCode, toString ইত্যাদি অটো-জেনারেট করার জন্য।
এখানে, আমরা দেখব কিভাবে MapStruct এবং Lombok একসাথে ব্যবহার করে Object Mapping সম্পন্ন করা যায়।
১. Lombok এর Getter/Setter ব্যবহারের সুবিধা
Lombok ব্যবহার করলে আপনার Java ক্লাসে boilerplate কোড (যেমন Getter/Setter) অটোমেটিক্যালি জেনারেট করা হয়। এর ফলে ক্লাসের কোড আরও সংক্ষিপ্ত এবং পড়তে সহজ হয়ে ওঠে। MapStruct এর সাথে Lombok ব্যবহার করে, আপনি DTO (Data Transfer Object) এবং Entity ক্লাসের মধ্যে মডেল ম্যাপিং করতে পারবেন, যেখানে Lombok ক্লাসগুলির Getter, Setter এবং অন্যান্য মেথডগুলি স্বয়ংক্রিয়ভাবে জেনারেট করবে।
Lombok এর প্রধান অ্যানোটেশন:
@Getter: ফিল্ডের জন্য getter মেথড স্বয়ংক্রিয়ভাবে তৈরি করে।@Setter: ফিল্ডের জন্য setter মেথড স্বয়ংক্রিয়ভাবে তৈরি করে।@NoArgsConstructor: প্যারামিটারহীন কন্সট্রাক্টর তৈরি করে।@AllArgsConstructor: সব ফিল্ডের জন্য কন্সট্রাক্টর তৈরি করে।
২. MapStruct এর মাধ্যমে Object Mapping
MapStruct এর মাধ্যমে আপনি Lombok ব্যবহৃত POJOs (Plain Old Java Objects) এর মধ্যে সহজে ডেটা ম্যাপিং করতে পারেন। MapStruct আপনাকে Mapper Interface তৈরি করতে সহায়তা করে যা DTO এবং Entity ক্লাসের মধ্যে ম্যাপিং কাজ করবে।
উদাহরণ: Lombok সহ MapStruct Object Mapping
ধরা যাক, আমাদের দুটি ক্লাস রয়েছে — একটি Employee (Entity) এবং একটি EmployeeDTO (DTO)। আমরা Lombok এর Getter/Setter অ্যানোটেশন ব্যবহার করব এবং MapStruct এর মাধ্যমে এই দুটি ক্লাসের মধ্যে ম্যাপিং করব।
২.১ Employee Entity (Lombok)
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Employee {
private Long id;
private String name;
private String department;
}
এখানে, Lombok এর @Getter এবং @Setter অ্যানোটেশন ব্যবহার করা হয়েছে, যার ফলে id, name, এবং department ফিল্ডের জন্য স্বয়ংক্রিয়ভাবে getter এবং setter মেথড তৈরি হবে।
২.২ EmployeeDTO (Lombok)
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class EmployeeDTO {
private Long id;
private String name;
private String department;
}
এখানে EmployeeDTO ক্লাসে Lombok এর মাধ্যমে getter এবং setter মেথড তৈরি করা হয়েছে।
২.৩ EmployeeMapper Interface (MapStruct)
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
@Mapper
public interface EmployeeMapper {
EmployeeMapper INSTANCE = Mappers.getMapper(EmployeeMapper.class);
EmployeeDTO employeeToEmployeeDTO(Employee employee);
}
এখানে, EmployeeMapper ইন্টারফেস তৈরি করা হয়েছে যা Employee এবং EmployeeDTO এর মধ্যে ম্যাপিং করবে। Mappers.getMapper(EmployeeMapper.class) ব্যবহার করে EmployeeMapper এর একটি ইনস্ট্যান্স তৈরি করা হয়েছে।
২.৪ Usage Example (MapStruct and Lombok Integration)
public class Main {
public static void main(String[] args) {
Employee employee = new Employee();
employee.setId(1L);
employee.setName("John Doe");
employee.setDepartment("Engineering");
// Using MapStruct to map Employee to EmployeeDTO
EmployeeDTO employeeDTO = EmployeeMapper.INSTANCE.employeeToEmployeeDTO(employee);
System.out.println("Employee DTO: ");
System.out.println("ID: " + employeeDTO.getId());
System.out.println("Name: " + employeeDTO.getName());
System.out.println("Department: " + employeeDTO.getDepartment());
}
}
এখানে, Employee অবজেক্টের Lombok এর মাধ্যমে setId, setName, এবং setDepartment ফিল্ডগুলো সেট করা হয়েছে এবং তারপর MapStruct এর মাধ্যমে সেই অবজেক্টকে EmployeeDTO তে ম্যাপ করা হয়েছে।
৩. MapStruct এবং Lombok এর সুবিধা
- Boilerplate Code কমানো: Lombok স্বয়ংক্রিয়ভাবে Getter/Setter, Constructor, Equals, HashCode ইত্যাদি তৈরি করে, ফলে কোড সংক্ষিপ্ত এবং পরিষ্কার হয়।
- Compile-Time Code Generation: MapStruct কোড জেনারেট করার জন্য compile-time এ কাজ করে, যা রানটাইম পারফরম্যান্সে প্রভাব ফেলে না।
- Maintenance Friendly: Lombok ব্যবহার করার ফলে ক্লাসের কোড কমে এবং এটি রক্ষণাবেক্ষণ করতে সহজ হয়।
- Type-Safety: MapStruct টাইপ-সেফ ম্যাপিং তৈরি করে, ফলে ভুল ডেটা টাইপের কারণে ত্রুটি হওয়ার সম্ভাবনা কমে।
৪. MapStruct এবং Lombok এর মধ্যে Integration
MapStruct এবং Lombok একসাথে ব্যবহারে অনেক সুবিধা পাওয়া যায়। Lombok আপনাকে শুধুমাত্র প্রয়োজনীয় ফিল্ডের জন্য getter/setter/constructor তৈরি করতে সহায়তা করে, আর MapStruct সেই ফিল্ডগুলির মধ্যে ডেটা ম্যাপিং সম্পন্ন করে। আপনি যখন Spring Framework বা অন্য কোনো ফ্রেমওয়ার্কের সাথে কাজ করেন, তখন এটি আরও কার্যকরী হয়ে ওঠে।
Spring Integration উদাহরণ:
@Mapper(componentModel = "spring")
public interface EmployeeMapper {
EmployeeDTO employeeToEmployeeDTO(Employee employee);
}
এখানে, componentModel = "spring" ব্যবহার করে MapStruct কে Spring Bean হিসেবে কনফিগার করা হয়েছে। এরপর, Spring এর মাধ্যমে EmployeeMapper কে ইনজেক্ট করা যাবে।
সারাংশ
MapStruct এবং Lombok একসাথে ব্যবহারের মাধ্যমে আপনি Java প্রোজেক্টে কার্যকরী এবং পরিষ্কার কোড লিখতে পারবেন। Lombok ফিল্ডের জন্য getter/setter এবং কন্সট্রাক্টর স্বয়ংক্রিয়ভাবে তৈরি করে এবং MapStruct ওই ক্লাসের মধ্যে ম্যাপিং প্রক্রিয়া দ্রুত সম্পন্ন করে। এই দুটি টুল একসাথে ব্যবহারে আপনার ডেভেলপমেন্ট প্রক্রিয়া অনেক সহজ এবং কার্যকরী হয়ে ওঠে।
Read more