আমি একটি লেনদেনের স্ক্রিপ্ট বিশ্ব থেকে এসেছি এবং আমি সবে ডিডিডি একবার দেখতে শুরু করছি। ডেটাবেস অধ্যবসায়ের সাথে ডিডিডি ডিজাইনকে সংহত করার সঠিক উপায় সম্পর্কে আমি অনিশ্চিত। এটি আমার কাছে রয়েছে:
অর্গানাইজেশন সার্ভিস নামে একটি পরিষেবা শ্রেণি যার ইন্টারফেসে সংস্থাপনের ডোমেন অবজেক্টগুলির দৃষ্টান্তগুলি পুনরুদ্ধার এবং সংরক্ষণের জন্য পদ্ধতি রয়েছে। সংগঠন একটি সামগ্রিক মূল এবং এর সাথে সম্পর্কিত অন্যান্য ডেটা রয়েছে: সদস্য এবং লাইসেন্স। EF6 ডাটাবেস প্রথম DBContext সংগঠনসেবা মধ্যে সংগঠনডিবি সত্তা এবং সম্পর্কিত সদস্যডিবি এবং লাইসেন্সডিবি সত্তা পুনরুদ্ধার করতে ব্যবহৃত হয়। অর্গানাইজেশন সার্ভিসেস দ্বারা পুনরুদ্ধার করা এবং সংস্থার ডোমেন অবজেক্টে লোড করার পরে এগুলি সমস্ত তাদের ডোমেন অবজেক্ট শ্রেণির সমতুল্যে রূপান্তরিত হয়। এই অবজেক্টটি দেখতে এমন দেখাচ্ছে:
public class Organisation
{
public IList<Member> Members { get; set; }
public IList<License> Licenses { get; set; }
}
আমি সংস্থাপনার পরিষেবাতে রিপোজিটরি প্যাটার্নটি ব্যবহার করছি না ... আমি EF নিজেই সংগ্রহস্থল হিসাবে ব্যবহার করছি কারণ মনে হচ্ছে EF6 এখন বেশিরভাগই সংগ্রহস্থলকে অপ্রয়োজনীয় করে তুলেছে।
নকশার এই মুহুর্তে সংস্থার ডোমেন অবজেক্টটি রক্তশূন্য: এটি EF পোকো অর্গানাইজেশন শ্রেণির মতো দেখায়। অর্গানাইজেশন সার্ভিস ক্লাসটি দেখতে অনেকটা একটি সংগ্রহস্থলের মতো!
এখন আমার যুক্তি যুক্ত করা শুরু করা দরকার। এই যুক্তিতে একটি সংস্থা লাইসেন্স এবং সদস্যদের পরিচালনা অন্তর্ভুক্ত। এখন লেনদেনের স্ক্রিপ্টের দিনগুলিতে আমি এই ক্রিয়াকলাপগুলি পরিচালনা করার জন্য অর্গানাইজেশন সার্ভিসে পদ্ধতি যুক্ত করব এবং ডিবির সাথে যোগাযোগের জন্য একটি রিপোজিটরিতে ডাকব, তবে ডিডিডি সহ আমি বিশ্বাস করি যে এই যুক্তিটি সংস্থার ডোমেন অবজেক্টের মধ্যেই আবদ্ধ করা উচিত ...
এখানেই আমার কী করা উচিত তা সম্পর্কে আমি অনিশ্চিত: যুক্তির অংশ হিসাবে আমার এই তথ্যটি ডাটাবেসে ফিরিয়ে রাখতে হবে। এর অর্থ কি এটি করার জন্য আমার কাছে অর্গানাইজেশন ডোমেনের মধ্যে DbContext ব্যবহার করা উচিত? ডোমেন অবজেক্টের মধ্যে কী ভান্ডার / ইএফ ব্যবহার করা খারাপ অভ্যাস? যদি তা হয় তবে এই অধ্যবসায়ের বিষয়টি কোথায়?
public class Organisation
{
public IList<Member> Members { get; set; }
public IList<License> Licenses { get; set; }
public void AddLicensesToOrganisation(IList<License> licensesToAdd)
{
// Do validation/other stuff/
// And now Save to the DB???
using(var context = new EFContext())
{
context.Licenses.Add(...
}
// Add to the Licenses collection in Memory
Licenses.AddRange(licensesToAdd);
}
}
এর পরিবর্তে আমি কি কেবল সংগঠনের ডোমেন অবজেক্টটিকে মেমরির মধ্যে পরিবর্তন করতে এবং তারপরে অধ্যবসায়ের জন্য এটি সংস্থাপনসেবাতে ফিরিয়ে দিচ্ছি? তারপরে আমাকে অবজেক্টে আসলে কী বদলেছে তা ট্র্যাক করতে হবে (এটি যা ইএফ নিজস্ব পোকোগুলিতে করে! আমি এই ধরনের অনুভব করতে এসেছি যে EF কেবল একটি সংগ্রহস্থল প্রতিস্থাপন নয়, তবে এটি ডোমেন স্তরও হতে পারে!)
এখানে যে কোনও গাইডেন্স প্রশংসিত হয়।