আমাদের ব্যবসায়িক যুক্তিতে আমরা মাঝে মাঝে পদ্ধতিগুলির এমন কিছু সংজ্ঞায়িত করে থাকি:
User.ResetCourse(Course courseToReset)
সমস্যাটি হ'ল ব্যবহারকারী এবং কোর্স উভয়ই সত্তা ফ্রেমওয়ার্ক প্রক্সি অবজেক্ট। এর অর্থ হ'ল আমরা যখন ব্যবহারকারী বা কোর্সের উভয় ক্ষেত্রে নেভিগেশন বৈশিষ্ট্যগুলিকে আঘাত করি তখন এটি ডাটাবেসগুলিতে একটি বিশাল আঘাতের কারণ হতে পারে কারণ objects বস্তুগুলি আইকুয়েরেবল নয় তাই এটি সাধারণত তাদের মাধ্যমে পুনরাবৃত্তি করে।
এটি সমাধানের জন্য আমরা স্বাক্ষরটি এতে পরিবর্তন করেছি:
User.ResetCourse(MyDBContext db, Course courseToReset)
এর অর্থ আমরা একটি দক্ষ পদ্ধতিতে আমাদের প্রয়োজনীয় পরিবর্তনগুলি করার জন্য সরাসরি ডাটাবেসকে জিজ্ঞাসা করতে পারি তবে একটি ব্যবসায়িক আইটেমে ডাটাবেস প্রসঙ্গটি পাস করা ঠিক ততটা ভুল বলে মনে হয়।
আমরা পরে ব্যবহারকারীর কাছে একটি পরিষেবা স্তরে স্থানান্তরিত হয়ে গেলাম যার অর্থ আমাদের কাছে এমন কিছু রয়েছে:
CourseService.ResetForUser(Course courseToReset, User forUser)
এই পরিষেবাদির তৈরিতে ইনজেকশন করা DBContext এর একটি উল্লেখ রয়েছে তবে এখন আমাদের ব্যবসায়িক অবজেক্টগুলি কোনও আচরণ ছাড়াই কেবল ডেটা ব্যাগ (যেমন একটি অ্যানিমিক ডোমেন মডেল)।
আমরা কীভাবে এড়াতে পারি?