আমার অ্যাপ্লিকেশনগুলিতে আমি ডেটাবেস (সত্তা ফ্রেমওয়ার্ক) এবং এমভিসি-র বিভিন্ন মডেল সহ সর্বদা জিনিসগুলি আলাদা করে রেখেছি। আমি এগুলিও বিভিন্ন প্রকল্পে আলাদা করেছি:
- উদাহরণ.এটিটিটিস - EF এর জন্য আমার সত্ত্বা এবং তাদের অ্যাক্সেসের জন্য ডিবি প্রসঙ্গ অন্তর্ভুক্ত করে।
- উদাহরণ.মোডেলস - এমভিসি মডেলগুলি অন্তর্ভুক্ত করে।
- উদাহরণ.ওয়েব - ওয়েব অ্যাপ্লিকেশন। উভয় উদাহরণ.ডোমেন এবং উদাহরণ.মোডেলগুলির উপর নির্ভর করে।
ডোমেন সত্তার মতো অন্যান্য অবজেক্টের রেফারেন্স রাখার পরিবর্তে এমভিসি মডেলগুলি আইডিগুলি পূর্ণসংখ্যা হিসাবে ধারণ করে।
যখন কোনও পৃষ্ঠার জন্য জিইটি অনুরোধ আসে, এমভিসি কন্ট্রোলার ডাটাবেস কোয়েরি সম্পাদন করে, যা কোনও সত্তাকে ফিরিয়ে দেয়। আমি "রূপান্তরকারী" পদ্ধতি লিখেছি যা একটি ডোমেন সত্তা নিয়ে যায় এবং এটিকে একটি এমভিসি মডেলে রূপান্তর করে। অন্যান্য পদ্ধতি রয়েছে যা বিপরীত হয় (এমভিসি মডেল থেকে একটি ডোমেন সত্তা পর্যন্ত)। এরপরে মডেলটি ভিউতে এবং এভাবে ক্লায়েন্টকে দেওয়া হয়।
যখন কোনও পোস্টের অনুরোধ আসে, এমভিসি নিয়ন্ত্রক একটি এমভিসি মডেল পান। একটি রূপান্তরকারী পদ্ধতি এটিকে একটি ডোমেন সত্তায় রূপান্তর করে। এই পদ্ধতিটি এমন কোনও বৈধতাও সম্পাদন করে যা বৈশিষ্ট্য হিসাবে প্রকাশ করা যায় না এবং এটি নিশ্চিত করে যে যদি ডোমেন সত্তা ইতিমধ্যে বিদ্যমান থাকে যে আমরা একটি নতুন পাওয়ার চেয়ে এটি আপডেট করছি। পদ্ধতিগুলি সাধারণত এ জাতীয় কিছু দেখায়:
public class PersonConverter
{
public MyDatabaseContext _db;
public PersonEntity Convert(PersonModel source)
{
PersonEntity destination = _db.People.Find(source.ID);
if(destination == null)
destination = new PersonEntity();
destination.Name = source.Name;
destination.Organisation = _db.Organisations.Find(source.OrganisationID);
//etc
return destination;
}
public PersonModel Convert(PersonEntity source)
{
PersonModel destination = new PersonModel()
{
Name = source.Name,
OrganisationID = source.Organisation.ID,
//etc
};
return destination;
}
}
এই পদ্ধতিগুলি ব্যবহার করে আমি সদৃশটি বাইরে নিয়ে যা যা অন্যথায় প্রতিটি নিয়ামকের মধ্যে ঘটে। জেনেরিকের ব্যবহার জিনিসগুলিকে আরও নকল করতে পারে।
এভাবে কাজ করা একাধিক সুবিধা প্রদান করে:
- আপনি একটি নির্দিষ্ট ভিউ বা ক্রিয়ায় কোনও মডেলকে কাস্টমাইজ করতে পারেন। বলুন যে কোনও ব্যক্তির জন্য আপনার কাছে একটি সাইনআপ ফর্ম রয়েছে যা জমা দেওয়ার পরে বিভিন্ন আলাদা সত্ত্বা তৈরি করে (ব্যক্তি, সংস্থা, ঠিকানা)। পৃথক এমভিসি মডেলগুলি ছাড়াই এটি খুব কঠিন হবে।
- যদি অন্যথায় কেবল সত্তার মধ্যে পাওয়া যায়, বা দুটি সত্তাকে একক মডেলের সাথে একত্রিত করা হয় তার চেয়ে আমার যদি ভিউটিতে আরও তথ্য সরবরাহ করতে হয় তবে আমার মূল্যবান ডাটাবেস মডেলগুলি কখনই স্পর্শ করা যায় না।
- আপনি যদি কখনও এমভিসির মডেলটিকে জেএসএন বা এক্সএমএল হিসাবে সিরিয়াল করেন তবে আপনি কেবলমাত্র তাত্ক্ষণিক মডেলটিকে সিরিয়ালযুক্ত করে তোলেন, অন্য প্রতিটি সত্তাও এর সাথে লিঙ্কযুক্ত নয়।