MapStruct একটি Java annotation processor যা ডোমেইন অবজেক্ট থেকে ডেটা ট্রান্সফার অবজেক্ট (DTO) অথবা অন্য অবজেক্টে ম্যাপিং সহজ এবং কার্যকরী করে তোলে। Mapping Ignore এবং Default Values ব্যবহারের মাধ্যমে আপনি কিছু বিশেষ ক্ষেত্রে ডেটা ম্যাপিং পরিচালনা করতে পারেন। এই দুটি ফিচার ব্যবহার করে আপনি নির্দিষ্ট ফিল্ডগুলি ম্যাপিং প্রক্রিয়া থেকে বাদ দিতে পারেন বা ডিফল্ট মান সেট করতে পারেন।
এই টিউটোরিয়ালে, আমরা MapStruct এর মাধ্যমে Mapping Ignore এবং Default Values কিভাবে ব্যবহার করতে হয় তা আলোচনা করব এবং উদাহরণ সহ দেখাবো।
Mapping Ignore ব্যবহার করে আপনি একটি ফিল্ড বা প্রপার্টি ম্যাপিং প্রক্রিয়া থেকে বাদ দিতে পারেন, যদি তা ম্যাপিংয়ের জন্য প্রয়োজনীয় না হয়। এতে কিছু ফিল্ড গুলি ম্যাপিংয়ের সময় অনুপস্থিত বা অগোছালো থাকা সত্ত্বেও, আপনার ম্যাপিং প্রক্রিয়া সঠিকভাবে চলতে থাকবে।
MapStruct এ @Mapping(ignore = true) অ্যানোটেশন ব্যবহার করে আপনি একটি প্রপার্টিকে ম্যাপিং প্রক্রিয়া থেকে বাদ দিতে পারেন।
ধরা যাক, আপনার কাছে দুটি ক্লাস রয়েছে — Employee
এবং EmployeeDTO
।
Employee.java (Domain Object):
public class Employee {
private String name;
private int age;
private String department;
// Getters and Setters
}
EmployeeDTO.java (DTO):
public class EmployeeDTO {
private String name;
private int age;
private String department;
// Getters and Setters
}
এখন, যদি আপনি department
ফিল্ডটি EmployeeDTO তে ম্যাপ করতে না চান, তাহলে @Mapping(ignore = true) ব্যবহার করতে হবে।
EmployeeMapper.java:
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface EmployeeMapper {
EmployeeMapper INSTANCE = Mappers.getMapper(EmployeeMapper.class);
@Mapping(source = "name", target = "name")
@Mapping(source = "age", target = "age")
@Mapping(target = "department", ignore = true) // Ignore department field
EmployeeDTO employeeToEmployeeDTO(Employee employee);
}
এখানে, department ফিল্ডটি ম্যাপিং প্রক্রিয়া থেকে বাদ দেয়া হয়েছে।
Default Values ব্যবহার করে আপনি ম্যাপিংয়ের সময় কোনো প্রপার্টি যদি null থাকে, তবে তাকে একটি ডিফল্ট মান অ্যাসাইন করতে পারেন। এর মাধ্যমে, আপনি ডিফল্ট মান নির্ধারণ করতে পারেন যা কোনো ফিল্ডের জন্য কোনো ভ্যালু না আসলে ব্যবহৃত হবে।
MapStruct এ আপনি defaultValue প্রপার্টি ব্যবহার করে ডিফল্ট ভ্যালু নির্ধারণ করতে পারেন।
ধরা যাক, আপনার EmployeeDTO তে department
ফিল্ডের জন্য ডিফল্ট মান দেয়া হচ্ছে।
Employee.java (Domain Object):
public class Employee {
private String name;
private int age;
// Getters and Setters
}
EmployeeDTO.java (DTO):
public class EmployeeDTO {
private String name;
private int age;
private String department = "Unknown"; // Default value
// Getters and Setters
}
এখন, আপনি department ফিল্ডটির জন্য MapStruct এ ডিফল্ট মান নির্ধারণ করতে পারেন, যাতে যদি কোনো মান না থাকে, তবে সেটি "Unknown"
থাকবে।
EmployeeMapper.java:
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface EmployeeMapper {
EmployeeMapper INSTANCE = Mappers.getMapper(EmployeeMapper.class);
@Mapping(source = "name", target = "name")
@Mapping(source = "age", target = "age")
@Mapping(target = "department", defaultValue = "Unknown") // Default value for department
EmployeeDTO employeeToEmployeeDTO(Employee employee);
}
এখানে, যদি department
ফিল্ডের মান null থাকে, তবে সেটি "Unknown"
হবে।
আপনি @Mapping(ignore = true) এবং defaultValue একসাথে ব্যবহার করতে পারেন, যেখানে কিছু ফিল্ডের মান আপনি বাদ দিতে চান এবং কিছু ফিল্ডের জন্য ডিফল্ট মান সেট করতে চান।
Employee.java (Domain Object):
public class Employee {
private String name;
private int age;
private String department;
// Getters and Setters
}
EmployeeDTO.java (DTO):
public class EmployeeDTO {
private String name;
private int age;
private String department = "Unknown"; // Default value
// Getters and Setters
}
EmployeeMapper.java:
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface EmployeeMapper {
EmployeeMapper INSTANCE = Mappers.getMapper(EmployeeMapper.class);
@Mapping(source = "name", target = "name")
@Mapping(source = "age", target = "age")
@Mapping(target = "department", ignore = true) // Ignore department field
EmployeeDTO employeeToEmployeeDTO(Employee employee);
}
এখানে, department ফিল্ডটি ignore করা হয়েছে, কিন্তু EmployeeDTO
তে department
ফিল্ডের ডিফল্ট মান "Unknown"
রয়েছে। এর ফলে, department ফিল্ডে কোনো মান না থাকলে "Unknown"
মান ব্যবহার হবে।
MapStruct এর Mapping Ignore এবং Default Values ফিচার আপনাকে ম্যাপিং প্রক্রিয়াকে আরও নমনীয় এবং কাস্টমাইজড করতে সহায়তা করে। Mapping Ignore ব্যবহারের মাধ্যমে আপনি নির্দিষ্ট ফিল্ডগুলি ম্যাপিং থেকে বাদ দিতে পারেন, এবং Default Values ব্যবহারের মাধ্যমে আপনি কোনো ফিল্ডের জন্য ডিফল্ট মান সেট করতে পারেন, যদি ফিল্ডটি null থাকে। এই দুটি ফিচার একসাথে ব্যবহার করলে ম্যাপিং প্রক্রিয়া আরও কার্যকরী এবং কাস্টমাইজড হয়ে ওঠে।
MapStruct ব্যবহার করে ডোমেইন অবজেক্ট এবং ডেটা ট্রান্সফার অবজেক্ট (DTO) এর মধ্যে ম্যাপিং করা হয়। কখনও কখনও, আপনি চাইবেন কিছু ফিল্ড ম্যাপিং থেকে বাদ দিতে, যেগুলি ডেটা ট্রান্সফার করার প্রয়োজন নেই বা কিছু নির্দিষ্ট পরিস্থিতিতে প্রয়োজনীয় নয়। MapStruct এই কাজের জন্য @Mapping
অ্যানোটেশনের ignore অ্যাট্রিবিউট প্রদান করে, যা আপনাকে নির্দিষ্ট ফিল্ডগুলো ম্যাপিং থেকে বাদ দিতে সহায়তা করে।
@Mapping
অ্যানোটেশনের ignore অ্যাট্রিবিউট ব্যবহার করে আপনি একটি নির্দিষ্ট ফিল্ড ম্যাপিং প্রক্রিয়া থেকে বাদ দিতে পারেন। যখন আপনি একটি ফিল্ড ম্যাপিং এ অন্তর্ভুক্ত করতে চান না, তখন আপনি ignore = true
সেট করতে পারেন।
ধরা যাক, আমাদের একটি Employee ডোমেইন ক্লাস এবং একটি EmployeeDTO (Data Transfer Object) ক্লাস রয়েছে। আমাদের প্রোজেক্টে কিছু ক্ষেত্র এমন থাকতে পারে যা ম্যাপিং এর জন্য প্রয়োজনীয় নয়। সেক্ষেত্রে ignore অ্যাট্রিবিউট ব্যবহার করে সেই ফিল্ড বাদ দেওয়া যেতে পারে।
Employee.java (Domain Object):
public class Employee {
private String name;
private String department;
private int age;
private String password; // We don't need to map this field to DTO
// Getters and Setters
}
EmployeeDTO.java (DTO Object):
public class EmployeeDTO {
private String name;
private String department;
private int age;
// Getters and Setters
}
এখানে, Employee ক্লাসের password
ফিল্ডটি EmployeeDTO ক্লাসে ম্যাপ করার প্রয়োজন নেই। আমরা MapStruct এর @Mapping অ্যানোটেশন ব্যবহার করে এটি বাদ দিতে পারি।
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface EmployeeMapper {
EmployeeMapper INSTANCE = Mappers.getMapper(EmployeeMapper.class);
@Mapping(source = "password", target = "password", ignore = true) // Ignoring the 'password' field
EmployeeDTO employeeToEmployeeDTO(Employee employee);
}
এখানে, @Mapping
অ্যানোটেশন ব্যবহার করে আমরা password
ফিল্ডটি Employee থেকে EmployeeDTO তে ম্যাপ হতে বাদ দিয়েছি। ignore = true
প্রপার্টি নিশ্চিত করে যে, password
ফিল্ডটি ম্যাপিং প্রক্রিয়ায় অন্তর্ভুক্ত হবে না।
ignore = true
ব্যবহার করে সেই ফিল্ড বাদ দেওয়া হয়।এটি সম্ভব যে একাধিক ফিল্ড আপনি ম্যাপিং থেকে বাদ দিতে চান। আপনি @Mapping
অ্যানোটেশন একাধিক বার ব্যবহার করতে পারেন বা একই সময় একাধিক ফিল্ডের জন্য ignore = true
ব্যবহার করতে পারেন।
@Mapper
public interface EmployeeMapper {
EmployeeMapper INSTANCE = Mappers.getMapper(EmployeeMapper.class);
@Mapping(source = "password", target = "password", ignore = true)
@Mapping(source = "age", target = "age", ignore = true) // Ignoring the 'age' field
EmployeeDTO employeeToEmployeeDTO(Employee employee);
}
এখানে, password
এবং age
ফিল্ড দুটি ম্যাপিং প্রক্রিয়া থেকে বাদ দেয়া হয়েছে।
একই সময় আপনি কিছু অ্যাপেন্ডেড ফিল্ডকে (যেগুলি DTO-তে অতিরিক্ত) বাদ দিতে পারেন, যেমন অতিরিক্ত মেটা ডেটা বা অপ্রয়োজনীয় তথ্য।
@Mapper
public interface EmployeeMapper {
EmployeeMapper INSTANCE = Mappers.getMapper(EmployeeMapper.class);
@Mapping(source = "department", target = "department", ignore = true)
EmployeeDTO employeeToEmployeeDTO(Employee employee);
}
এখানে, department
ফিল্ডটি EmployeeDTO তে ম্যাপ হতে বাদ দেয়া হয়েছে, যদি EmployeeDTO তে এই তথ্যটি প্রয়োজন না হয়।
MapStruct এর @Mapping অ্যানোটেশনের ignore অ্যাট্রিবিউট ব্যবহার করে আপনি ফিল্ডগুলোকে সহজেই ম্যাপিং প্রক্রিয়া থেকে বাদ দিতে পারেন। এটি বিশেষত সেন্সিটিভ ডেটা যেমন পাসওয়ার্ড, অথবা অপ্রয়োজনীয় ফিল্ডের জন্য কার্যকরী। ignore = true
প্রপার্টি ব্যবহার করার মাধ্যমে, আপনি একটি বা একাধিক ফিল্ড ম্যাপিং প্রক্রিয়া থেকে বাদ দিতে পারবেন, যার ফলে ডেটা ট্রান্সফার অবজেক্ট (DTO) কেবলমাত্র প্রয়োজনীয় ডেটা ধারণ করবে এবং আপনার অ্যাপ্লিকেশন আরও নিরাপদ এবং দক্ষ হবে।
MapStruct একটি শক্তিশালী Java মডেল মেপিং টুল, যা ডোমেইন অবজেক্ট এবং DTO (Data Transfer Object) এর মধ্যে ডেটা ম্যাপিং সহজে করতে সাহায্য করে। কখনও কখনও, আপনার ডোমেইন অবজেক্ট বা DTO এর কিছু ফিল্ডে ডিফল্ট ভ্যালু সেট করার প্রয়োজন হতে পারে। MapStruct এই কাজটি সহজেই সম্পাদন করতে পারে, যেখানে আপনি একটি কাস্টম মেথড ব্যবহার করে বা @Mapping
অ্যানোটেশন দিয়ে ডিফল্ট ভ্যালু সেট করতে পারেন।
এখানে আমরা MapStruct এর মাধ্যমে কিভাবে ডিফল্ট ভ্যালু সেট করা যায় তার উদাহরণ দেখব।
MapStruct ব্যবহারে, আপনি যখন একটি অবজেক্টের এক ফিল্ড থেকে অন্য ফিল্ডে ডেটা ম্যাপ করেন, তখন যদি কখনও উল্লিখিত মান না থাকে (যেমন null
), আপনি একটি ডিফল্ট ভ্যালু সেট করতে পারেন। এটি কিছু ক্ষেত্রের জন্য যেমন ফাঁকা ফিল্ড বা অপর্যাপ্ত ডেটা থাকলে অটো-ফিল্ল করা যেতে পারে।
MapStruct আপনাকে @Mapping
অ্যানোটেশন ব্যবহার করে ম্যাপিংয়ের সময় ডিফল্ট ভ্যালু সেট করার সুযোগ দেয়। যদি ম্যাপিংয়ের উৎস অবজেক্টের কোনো ফিল্ড null হয়, তবে আপনি একটি ডিফল্ট মান প্রদান করতে পারেন।
ধরা যাক, আমাদের একটি Person ডোমেইন অবজেক্ট এবং একটি PersonDTO রয়েছে। Person অবজেক্টের একটি ফিল্ড age রয়েছে, এবং যদি এটি null থাকে, তবে আমরা PersonDTO তে ডিফল্ট মান ৩০ সেট করতে চাই।
public class Person {
private String name;
private Integer age;
// Getters and Setters
}
public class PersonDTO {
private String name;
private int age; // Default value to be set if null
// Getters and Setters
}
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.Named;
@Mapper
public interface PersonMapper {
@Mapping(source = "age", target = "age", defaultValue = "30") // Setting default value for age
PersonDTO personToPersonDTO(Person person);
}
এখানে:
age
ফিল্ডের জন্য ৩০ ডিফল্ট মান সেট করেছি।Person
অবজেক্টের age ফিল্ডের মান null থাকে, তবে এটি PersonDTO তে 30 সেট হবে।MapStruct এর মাধ্যমে আপনি যদি আরো কাস্টম লজিক প্রয়োগ করতে চান, তবে আপনি একটি কাস্টম মেথড ব্যবহার করতে পারেন যা ডিফল্ট ভ্যালু সেট করবে।
এখানে একটি কাস্টম মেথড তৈরি করা হয়েছে যা age ফিল্ডে ডিফল্ট মান সেট করবে যদি null হয়।
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface PersonMapper {
PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);
@Mapping(target = "age", source = "age", qualifiedByName = "setDefaultAge")
PersonDTO personToPersonDTO(Person person);
// Custom method to set default value
default int setDefaultAge(Integer age) {
return age == null ? 30 : age; // If age is null, set default value 30
}
}
এখানে:
age
যদি null হয়, তবে ডিফল্ট ৩০ সেট করে।MapStruct ব্যবহার করে আপনি Enum ম্যাপিংয়ের ক্ষেত্রেও ডিফল্ট মান সেট করতে পারেন। এটি একটি সাধারণ কৌশল যেখানে Enum ভ্যালু গুলির মধ্যে একটি নির্দিষ্ট ভ্যালু যদি না থাকে, তবে ডিফল্ট মান ব্যবহার করা হয়।
public enum Status {
ACTIVE,
INACTIVE
}
public class Person {
private String name;
private Status status;
// Getters and Setters
}
public class PersonDTO {
private String name;
private String status; // Default value for status to be set
// Getters and Setters
}
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface PersonMapper {
PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);
@Mapping(target = "status", source = "status", defaultValue = "ACTIVE") // Default value for status
PersonDTO personToPersonDTO(Person person);
}
এখানে, status ফিল্ডে defaultValue = "ACTIVE" ব্যবহার করা হয়েছে যাতে PersonDTO তে status
যদি null থাকে, তবে ডিফল্ট হিসেবে "ACTIVE"
সেট হবে।
MapStruct ব্যবহার করে আপনি আপনার ডোমেইন অবজেক্ট এবং DTO এর মধ্যে ডিফল্ট মান সেট করতে পারেন। এটি @Mapping অ্যানোটেশন বা কাস্টম মেথড ব্যবহার করে করা যায়। MapStruct ডিফল্ট ভ্যালু সেট করার মাধ্যমে আপনার কোডে কোনো অপর্যাপ্ত বা null ভ্যালু থাকলে তা সহজেই পূর্ণ করতে সহায়ক হয়। এতে কোডের কর্মক্ষমতা বৃদ্ধি পায় এবং এটি আরও কার্যকরীভাবে কাজ করে।
MapStruct হল একটি Java annotation processor ভিত্তিক মডেল ম্যাপিং টুল যা ডোমেইন অবজেক্ট এবং DTO (Data Transfer Object) এর মধ্যে ডেটা ট্রান্সফার করতে ব্যবহৃত হয়। MapStruct আপনাকে বিভিন্ন ম্যাপিং কাস্টমাইজেশন, যেমন Ignore এবং Default Value ব্যবহারের সুযোগ দেয়। এটি বিশেষত তখন ব্যবহারী হয় যখন আপনি কিছু ফিল্ড বা ভ্যালু ম্যাপিং করতে চান না বা ডিফল্ট মান প্রদান করতে চান।
এই টিউটোরিয়ালে আমরা MapStruct এর মাধ্যমে Ignore এবং Default Value এর ব্যবহার দেখব, যা আপনার ম্যাপিং প্রক্রিয়াকে আরও কাস্টমাইজড এবং কার্যকরী করতে সহায়তা করবে।
কিছু ক্ষেত্রে, আপনি চাইবেন না যে একটি নির্দিষ্ট প্রপার্টি বা ফিল্ড ম্যাপিংয়ে অংশগ্রহণ করুক। তখন আপনি @Mapping অ্যানোটেশন ব্যবহার করে সেই ফিল্ডটিকে ignore করতে পারেন। এটি MapStruct কে নির্দেশ দেয় যে সে ওই ফিল্ডটি ম্যাপিং করবে না।
ধরা যাক, আমাদের দুটি ক্লাস Person এবং PersonDTO আছে এবং আমরা চাই age
ফিল্ডটি DTO তে ম্যাপ না হোক।
Person.java:
public class Person {
private String name;
private int age;
// Getters and Setters
}
PersonDTO.java:
public class PersonDTO {
private String name;
// Getters and Setters
}
এখন, age
ফিল্ডটি PersonDTO তে না যাওয়ার জন্য আমরা @Mapping অ্যানোটেশন ব্যবহার করব।
PersonMapper.java:
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface PersonMapper {
PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);
@Mapping(target = "age", ignore = true) // Ignore the 'age' field
PersonDTO personToPersonDTO(Person person);
}
এখানে, @Mapping(target = "age", ignore = true)
ব্যবহার করে আমরা age
ফিল্ডটি PersonDTO তে ম্যাপ হওয়া থেকে আটকাচ্ছি। ফলে, PersonDTO তে age
ফিল্ডটি থাকবে না।
কিছু ক্ষেত্রে আপনি চাইবেন যে যদি কোনো ভ্যালু null থাকে বা নির্দিষ্ট কোনো ফিল্ডের জন্য মান না থাকে, তখন একটি default value সেট করা হোক। MapStruct আপনাকে এই কাজটি করতে সাহায্য করে।
ধরা যাক, PersonDTO তে age
ফিল্ডের জন্য যদি কোনো মান না থাকে, তবে আমরা এটি 0 দিয়ে ডিফল্ট করতে চাই।
Person.java:
public class Person {
private String name;
private Integer age; // Integer type to handle null
// Getters and Setters
}
PersonDTO.java:
public class PersonDTO {
private String name;
private int age; // Default value 0
// Getters and Setters
}
এখন, MapStruct এর মাধ্যমে আমরা age
ফিল্ডের জন্য একটি ডিফল্ট মান দিতে পারি, যখন সেটি null থাকে।
PersonMapper.java:
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;
@Mapper
public interface PersonMapper {
PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);
@Mapping(target = "age", defaultValue = "0") // Set default value for age
PersonDTO personToPersonDTO(Person person);
}
এখানে, @Mapping(target = "age", defaultValue = "0")
ব্যবহার করে আমরা PersonDTO তে age
ফিল্ডের জন্য ডিফল্ট মান 0 সেট করেছি। এর মানে হল যে যদি Person অবজেক্টের age
null থাকে, তবে PersonDTO তে age
এর মান 0 হবে।
MapStruct ব্যবহার করার সময় Ignore এবং Default Value এর সাহায্যে আপনি আরো কাস্টম ম্যাপিং করতে পারেন। এটি এমন পরিস্থিতিতে কার্যকর যেখানে কিছু ফিল্ডকে ম্যাপিং থেকে বাদ দিতে হয় বা কোনো ফিল্ডের জন্য ডিফল্ট মান সেট করতে হয়।
ধরা যাক, আপনার PersonDTO তে কিছু ফিল্ডকে null
বা অনুপস্থিত রাখতে চান এবং কিছু ফিল্ডে ডিফল্ট মান সেট করতে চান।
Person.java:
public class Person {
private String name;
private Integer age;
// Getters and Setters
}
PersonDTO.java:
public class PersonDTO {
private String name;
private int age = 0; // Default value 0
// Getters and Setters
}
PersonMapper.java:
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface PersonMapper {
PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);
@Mapping(target = "age", defaultValue = "0") // Default value for age
@Mapping(target = "name", ignore = true) // Ignore name field
PersonDTO personToPersonDTO(Person person);
}
এখানে:
name
ফিল্ডটি PersonDTO তে ignore করা হয়েছে, অর্থাৎ PersonDTO তে name
ফিল্ডটি ম্যাপ হবে না।age
ফিল্ডটির জন্য defaultValue ব্যবহার করা হয়েছে, যদি Person অবজেক্টে age
null থাকে, তবে সেটি 0 হয়ে যাবে।MapStruct এর মাধ্যমে Ignore এবং Default Value ব্যবহার করার মাধ্যমে আপনি সহজে কাস্টম ম্যাপিং করতে পারেন এবং আপনার কোডের কার্যকারিতা বাড়াতে পারেন। আপনি Ignore এর মাধ্যমে কিছু ফিল্ড বাদ দিতে পারেন এবং Default Value ব্যবহার করে ডিফল্ট মান সেট করতে পারেন, যা ডেটা ট্রান্সফার প্রক্রিয়া অনেক সহজ ও কার্যকরী করে তোলে। এটি বিশেষভাবে উপকারী যখন আপনি বিভিন্ন প্রকার ডোমেইন অবজেক্ট বা DTO (Data Transfer Object) এর মধ্যে ডেটা ম্যাপ করতে চান।
Read more