Null Values এর সমস্যা এবং এর সমাধান

Mapping Null Values এবং Null Value Handling - ম্যাপস্ট্রাক্ট (MapStruct) - Java Technologies

279

MapStruct একটি শক্তিশালী টুল যা JavaBeans (POJOs) এর মধ্যে ম্যাপিং সহজ করে তোলে। তবে, যখন কোনো ভ্যালু null থাকে, তখন ম্যাপিংয়ের সময় কিছু সমস্যা সৃষ্টি হতে পারে, বিশেষত যদি এটি কোনো প্রপার্টির মান হয় এবং আপনার ডোমেইন অবজেক্টে সেট করা না থাকে। MapStruct এর মধ্যে null values এর সমস্যা সমাধান করার জন্য কিছু নির্দিষ্ট কৌশল রয়েছে, যা আপনার ম্যাপিং প্রক্রিয়াকে আরো স্থিতিশীল এবং নির্ভুল করে তোলে।

এই টিউটোরিয়ালে আমরা আলোচনা করব MapStruct এর মাধ্যমে null values এর সমস্যা এবং এর সমাধান পদ্ধতি।


১. MapStruct এবং Null Values

ম্যাপস্ট্রাক্ট null values এর ক্ষেত্রে কীভাবে কাজ করবে তা ডিফল্টভাবে নির্ধারণ করা থাকে। সাধারণত, null ভ্যালু গুলি সরাসরি ডেস্টিনেশন অবজেক্টে প্রেরিত হয়। তবে কিছু পরিস্থিতিতে আপনি চাচ্ছেন না যে null ভ্যালু সরাসরি ডেস্টিনেশন অবজেক্টে পৌঁছাক। এর জন্য MapStruct কিছু কাস্টম কনফিগারেশন এবং অপশন সরবরাহ করে।

Default Behavior:

MapStruct সাধারণত একটি null ভ্যালু শর্তসাপেক্ষভাবে মেনে নেয় এবং গন্তব্য অবজেক্টে সেই null ভ্যালু সেট করে। তবে, এটি কিছুক্ষেত্রে অপ্রত্যাশিত ফলাফল প্রদান করতে পারে, যেমন null pointer exceptions বা incorrect mappings


২. Null Value Handling with @Mapping Annotation

MapStruct আপনাকে @Mapping অ্যানোটেশনের মাধ্যমে null ভ্যালু হ্যান্ডেল করার কিছু কৌশল প্রদান করে। আপনি যদি চান যে null ভ্যালু গুলি কিভাবে ম্যাপিং হবে তা নিয়ন্ত্রণ করতে, তাহলে nullValueCheckStrategy বা defaultValue ব্যবহার করতে পারেন।

২.১ nullValueCheckStrategy এর ব্যবহার

MapStruct nullValueCheckStrategy ব্যবহার করে null values এর ক্ষেত্রে কাস্টম চেকিং করতে সাহায্য করে। এটি আপনাকে নির্দিষ্ট করতে দেয়, যদি সোর্স অবজেক্টের কোনো ভ্যালু null হয়, তাহলে কী করতে হবে।

উদাহরণ: nullValueCheckStrategy ব্যবহার
@Mapper
public interface PersonMapper {

    @Mapping(source = "firstName", target = "fullName", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
    PersonDTO personToPersonDTO(Person person);
}

এখানে, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS দ্বারা null ভ্যালু চেক করা হয় এবং সেটির জন্য নির্দিষ্ট প্রক্রিয়া গ্রহণ করা হয়। আপনি ALWAYS বা ON_IMPLICIT_CONVERSION চয়ন করতে পারেন।

NullValueCheckStrategy Options:

  • ALWAYS: সোর্স অবজেক্টে null থাকলে, ডেস্টিনেশন অবজেক্টে null পাঠানো হবে।
  • ON_IMPLICIT_CONVERSION: শুধুমাত্র সেই ক্ষেত্রগুলোতে null চেক করবে যেখানে null কনভার্শন সম্ভব।
  • NEVER: null চেক হবে না এবং যেকোনো null ভ্যালু কপি করা হবে।

৩. defaultValue অপশন ব্যবহার

MapStruct আপনাকে defaultValue সেট করার অপশন দেয়, যেখানে আপনি null ভ্যালুর জন্য একটি ডিফল্ট ভ্যালু নির্ধারণ করতে পারেন।

৩.১ defaultValue অপশন ব্যবহার

@Mapper
public interface PersonMapper {

    @Mapping(source = "firstName", target = "fullName", defaultValue = "Unknown")
    PersonDTO personToPersonDTO(Person person);
}

এখানে, যদি firstName null থাকে, তাহলে ডিফল্ট ভ্যালু হিসেবে "Unknown" সেট করা হবে।


৪. Null Handling Using @MappingTarget

MapStruct @MappingTarget এর মাধ্যমে কিছু ক্ষেত্রে null values সেট করতে ব্যবহৃত হয়। এটি বিশেষত তখন দরকার হয় যখন আপনি একটি প্রাপ্ত অবজেক্টে নতুন ডেটা ম্যাপ করতে চান এবং আগের null ভ্যালু রক্ষা করতে চান।

৪.১ @MappingTarget এর ব্যবহার

@Mapper
public interface PersonMapper {

    @Mapping(target = "fullName", source = "firstName")
    void updatePersonFromDto(PersonDTO dto, @MappingTarget Person person);
}

এখানে, যদি firstName null হয়, তাহলে fullName এ আগের মান রেখে দেওয়ার জন্য এই কৌশল ব্যবহৃত হবে।


৫. @BeforeMapping এবং @AfterMapping Methods

MapStruct আপনাকে @BeforeMapping এবং @AfterMapping অ্যানোটেশন দিয়ে একটি null check প্রক্রিয়া সম্পাদন করতে সহায়তা করে। আপনি এই মেথডগুলিতে null ভ্যালু চেক করে নিজস্ব লজিক প্রয়োগ করতে পারেন।

৫.১ @BeforeMapping এবং @AfterMapping এর ব্যবহার

@Mapper
public interface PersonMapper {

    @BeforeMapping
    default void handleNullValues(Person person) {
        if (person.getFirstName() == null) {
            person.setFirstName("Default Name");
        }
    }

    PersonDTO personToPersonDTO(Person person);
}

এখানে, @BeforeMapping মেথডে null চেক করা হচ্ছে এবং প্রয়োজন হলে ডিফল্ট ভ্যালু সেট করা হচ্ছে।


৬. MapStruct এবং Spring Integration এর সাথে Null Handling

MapStruct এর null handling Spring-এর Optional টাইপ বা @Value অ্যানোটেশনের সাথে ইন্টিগ্রেট করা যেতে পারে। Spring কনটেক্সটে Optional ব্যবহার করে null safety আরও উন্নত করা সম্ভব।

উদাহরণ: Optional এর মাধ্যমে Null Handling

@Mapper(componentModel = "spring")
public interface PersonMapper {

    @Mapping(source = "firstName", target = "fullName", defaultValue = "Default Name")
    PersonDTO personToPersonDTO(Person person);
}

এখানে, Spring ইন্টিগ্রেশন ব্যবহার করে MapStruct কাস্টম ম্যাপিং সাপোর্ট করা হয়েছে।


৭. Null Handling Tips

  1. Null Safety: MapStruct আপনাকে null ভ্যালু সঠিকভাবে হ্যান্ডেল করতে সহায়তা করে, তবে কখনও কখনও ডিফল্ট ভ্যালু বা কাস্টম ম্যাপিং ফাংশন ব্যবহার করা প্রয়োজন।
  2. Consistency: null চেক করার নিয়মটি প্রোজেক্টের সমস্ত কোডে কনসিস্টেন্ট রাখুন যাতে মানসম্পন্ন ম্যাপিং হয়।
  3. Use Optional for Optional Fields: যদি আপনার ফিল্ডটি Optional হয়, তবে সেটি সঠিকভাবে ম্যানেজ করুন।
  4. Avoid NullPointerException: null ভ্যালু ইনপুট ফিল্ডের জন্য ডিফল্ট ভ্যালু ব্যবহার করতে পারেন যাতে কোডে ত্রুটি কমে যায়।

সারাংশ

MapStruct এর মাধ্যমে null values হ্যান্ডেল করা খুবই গুরুত্বপূর্ণ, বিশেষত যখন আপনি ডেটা ট্রান্সফার অবজেক্ট (DTO) এবং ডোমেইন অবজেক্টের মধ্যে ম্যাপিং করছেন। nullValueCheckStrategy, defaultValue, @MappingTarget এবং @BeforeMapping সহ বিভিন্ন কৌশল ব্যবহার করে আপনি null ভ্যালু হ্যান্ডেল করতে পারেন এবং আপনার প্রোজেক্টের পারফরম্যান্স এবং স্থিতিশীলতা উন্নত করতে পারেন। MapStruct আপনাকে null values এর উপর পূর্ণ নিয়ন্ত্রণ দেয়, যাতে ম্যাপিং প্রক্রিয়া আরও নির্ভরযোগ্য এবং কার্যকরী হয়।


Content added By
Promotion

Are you sure to start over?

Loading...