MapStruct হল একটি powerful framework যা Java প্রোজেক্টে Object Mapping সহজ করে তোলে। যখন আপনার ডোমেইন অবজেক্টগুলির মধ্যে enum values ট্রান্সফার করার প্রয়োজন হয়, তখন MapStruct আপনাকে সহজ এবং কার্যকরী উপায়ে Enum Mapping সম্পন্ন করতে সহায়তা করে।
Enum Mapping হল এমন একটি প্রক্রিয়া যেখানে এক ধরনের enum কে অন্য ধরনের enum এ ম্যাপ করা হয়। উদাহরণস্বরূপ, আপনি যদি একটি enum-এ থাকা মানগুলিকে অন্য একটি enum-এ ম্যাপ করতে চান, তবে MapStruct এই কাজটি অটোমেটিকভাবে করে দিতে পারে।
এখানে আমরা MapStruct এর মাধ্যমে Enum Mapping করার একটি উদাহরণ দেখব।
১. Enum Mapping এর প্রয়োজনীয়তা
যখন আপনার প্রোজেক্টে বিভিন্ন ধরনের enum (যেমন, Status, Gender, Type ইত্যাদি) থাকে এবং আপনি এগুলোর মধ্যে ডেটা ট্রান্সফার করতে চান, তখন Enum Mapping গুরুত্বপূর্ণ। MapStruct এর মাধ্যমে আপনি সহজেই এক enum থেকে অন্য enum এ মান স্থানান্তর করতে পারবেন, যা কোডের পরিস্কারতা ও কার্যকারিতা উন্নত করে।
২. Enum Mapping উদাহরণ
ধরা যাক, আপনার দুটি enum রয়েছে, একটি GenderEnum এবং একটি GenderDTO।
GenderEnum.java
public enum GenderEnum {
MALE,
FEMALE,
OTHER
}
GenderDTO.java
public enum GenderDTO {
M,
F,
O
}
এখানে, GenderEnum এর মানগুলিকে GenderDTO তে ম্যাপ করতে হবে। মানে, MALE হবে M, FEMALE হবে F, এবং OTHER হবে O।
GenderMapper.java (MapStruct Mapper)
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface GenderMapper {
GenderMapper INSTANCE = Mappers.getMapper(GenderMapper.class);
// Mapping GenderEnum to GenderDTO
@Mapping(source = "MALE", target = "M")
@Mapping(source = "FEMALE", target = "F")
@Mapping(source = "OTHER", target = "O")
GenderDTO genderEnumToGenderDTO(GenderEnum genderEnum);
}
এখানে, @Mapping অ্যানোটেশন ব্যবহার করে GenderEnum এর মানগুলো GenderDTO এর মানে ম্যাপ করা হয়েছে।
Main.java (Test Example)
public class Main {
public static void main(String[] args) {
GenderEnum genderEnum = GenderEnum.MALE;
// Map GenderEnum to GenderDTO
GenderDTO genderDTO = GenderMapper.INSTANCE.genderEnumToGenderDTO(genderEnum);
System.out.println("Mapped GenderDTO: " + genderDTO);
}
}
এখানে, MapStruct এর মাধ্যমে GenderEnum এর মান GenderDTO এ ম্যাপ করা হয়েছে। MALE মানটি M তে, FEMALE মানটি F তে এবং OTHER মানটি O তে ম্যাপ হবে।
৩. Custom Mapping for Enums (কাস্টম Enum Mapping)
কখনও কখনও, আপনার enum এর মধ্যে কিছু কাস্টম কনভার্সন লজিক প্রয়োজন হতে পারে। MapStruct আপনাকে custom mapping methods তৈরি করতে সহায়তা করে।
উদাহরণ: কাস্টম Enum Mapping
public enum StatusEnum {
ACTIVE,
INACTIVE,
PENDING
}
public enum StatusDTO {
A, // Active
I, // Inactive
P // Pending
}
এখানে, আপনি StatusEnum এর মানগুলো StatusDTO এ কাস্টম ম্যাপ করতে চান।
StatusMapper.java (MapStruct Mapper)
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface StatusMapper {
StatusMapper INSTANCE = Mappers.getMapper(StatusMapper.class);
@Mapping(source = "ACTIVE", target = "A")
@Mapping(source = "INACTIVE", target = "I")
@Mapping(source = "PENDING", target = "P")
StatusDTO statusEnumToStatusDTO(StatusEnum statusEnum);
}
এখানে, কাস্টম ম্যাপিংয়ের মাধ্যমে StatusEnum থেকে StatusDTO এ মান ট্রান্সফার করা হচ্ছে। ACTIVE → A, INACTIVE → I, এবং PENDING → P।
৪. MapStruct Enum Mapping এর সুবিধা
- Type Safety: MapStruct প্রকার সুরক্ষা নিশ্চিত করে, তাই টাইপ সংক্রান্ত কোনো ভুল হওয়ার সম্ভাবনা কমে যায়।
- Compile-time Validation: MapStruct compile-time এ কোড জেনারেট করে, ফলে ডেভেলপমেন্টের সময় কোনো ত্রুটি দেখা দিলে তা আগেই ধরা পড়ে।
- No Reflection: MapStruct reflection ব্যবহার করে না, যা পারফরম্যান্সে সুবিধা দেয়।
- Easy Integration: MapStruct খুব সহজেই Spring, Quarkus, JPA ইত্যাদি ফ্রেমওয়ার্কের সাথে ইন্টিগ্রেট করা যায়।
৫. Enum Mapping in Collection
আপনি যদি enum ম্যাপিং করতে চান এবং এটি collections (List, Set) বা arrays এর মধ্যে প্রয়োগ করতে চান, তবে MapStruct এই ধরনের ম্যাপিং সমর্থন করে। এটি আপনাকে সহজেই List থেকে List এ ম্যাপিং করতে সাহায্য করে।
Collection Mapping Example
import java.util.List;
public class Main {
public static void main(String[] args) {
List<GenderEnum> genderList = List.of(GenderEnum.MALE, GenderEnum.FEMALE, GenderEnum.OTHER);
// Map List of GenderEnum to List of GenderDTO
List<GenderDTO> genderDTOList = GenderMapper.INSTANCE.genderEnumListToGenderDTOList(genderList);
genderDTOList.forEach(gender -> System.out.println("Mapped GenderDTO: " + gender));
}
}
এখানে, List কে List এ ম্যাপ করা হয়েছে।
৬. সারাংশ
MapStruct এর মাধ্যমে Enum Mapping অত্যন্ত সহজ এবং কার্যকর। এটি ডোমেইন অবজেক্ট এবং DTO এর মধ্যে enum values ট্রান্সফার করতে সহায়তা করে, এবং কাস্টম ম্যাপিং বা কনভার্সন লজিক প্রয়োগ করা সম্ভব হয়। MapStruct আপনাকে compile-time কোড জেনারেশন, টাইপ সেফটি, এবং no reflection সুবিধা প্রদান করে, যা পারফরম্যান্স এবং ডেভেলপমেন্টে অনেক সুবিধা দেয়। এর মাধ্যমে আপনি enum গুলির মধ্যে ম্যাপিং খুব সহজে এবং দক্ষতার সাথে করতে পারবেন।
Read more