সমৃদ্ধ বনাম অ্যানেমিক ডোমেন মডেলগুলির বিতর্কে, ইন্টারনেট দার্শনিক পরামর্শে পূর্ণ তবে অনুমোদনমূলক উদাহরণগুলির সংক্ষিপ্ত। এই প্রশ্নের উদ্দেশ্য হ'ল সঠিক ডোমেন-চালিত ডিজাইন মডেলগুলির সুনির্দিষ্ট গাইডলাইন এবং সুনির্দিষ্ট উদাহরণগুলি খুঁজে পাওয়া। (আদর্শভাবে সি # তে।)
বাস্তব-বিশ্বের উদাহরণের জন্য, ডিডিডি-র এই প্রয়োগটি ভুল বলে মনে হচ্ছে:
নীচের ওয়ার্ক আইটেম ডোমেন মডেলগুলি সম্পত্তি-ব্যাগ ব্যতীত কিছুই নয়, কোনও কোড-প্রথম ডাটাবেসের জন্য সত্তা ফ্রেমওয়ার্ক দ্বারা ব্যবহৃত হয়। প্রতি ফওলার, এটি রক্তাল্পতা ।
ওয়ার্কআইটেমসেবার স্তরটি স্পষ্টতই ডোমেন পরিষেবাদির একটি সাধারণ ভুল ধারণা; এতে ওয়ার্ক আইটেমের জন্য আচরণ / ব্যবসায়ের সমস্ত যুক্তি রয়েছে। ইয়েমেলিয়ানভ এবং অন্যদের জন্য, এটি পদ্ধতিগত । (পৃষ্ঠা 6)
সুতরাং নীচেরটি যদি ভুল হয় তবে আমি কীভাবে এটি সঠিক করতে পারি?
আচরণ, যেমন অ্যাডস্ট্যাটাসআপডেট বা চেকআউট , ওয়ার্ক আইটেম শ্রেণীর অন্তর্ভুক্ত হওয়া উচিত?
ওয়ার্কআইটেম মডেলটির কী নির্ভরতা থাকা উচিত?
public class WorkItemService : IWorkItemService {
private IUnitOfWorkFactory _unitOfWorkFactory;
//using Unity for dependency injection
public WorkItemService(IUnitOfWorkFactory unitOfWorkFactory) {
_unitOfWorkFactory = unitOfWorkFactory;
}
public void AddStatusUpdate(int workItemId, int statusId) {
using (var unitOfWork = _unitOfWorkFactory.GetUnitOfWork<IWorkItemUnitOfWork>()) {
var workItemRepo = unitOfWork.WorkItemRepository;
var workItemStatusRepo = unitOfWork.WorkItemStatusRepository;
var workItem = workItemRepo.Read(wi => wi.Id == workItemId).FirstOrDefault();
if (workItem == null)
throw new ArgumentException(string.Format(@"The provided WorkItem Id '{0}' is not recognized", workItemId), "workItemId");
var status = workItemStatusRepo.Read(s => s.Id == statusId).FirstOrDefault();
if (status == null)
throw new ArgumentException(string.Format(@"The provided Status Id '{0}' is not recognized", statusId), "statusId");
workItem.StatusHistory.Add(status);
workItemRepo.Update(workItem);
unitOfWork.Save();
}
}
}
(এই উদাহরণটি আরও পঠনযোগ্য হওয়ার জন্য সহজতর করা হয়েছিল The কোডটি অবশ্যই বিশৃঙ্খলাযুক্ত, কারণ এটি একটি বিভ্রান্ত প্রচেষ্টা but কেবল CRUD দ্বারা পরিচালিত হতে পারে))
হালনাগাদ
@ অ্যালেক্সায়েজিমেরেভ জিমি বোগার্ডের সি # তে এই বিষয়টির সেরা উত্তরটি দিয়েছেন, তবে এটি নীচে একটি মন্তব্যে স্থানান্তরিত হয়েছে কারণ এটি লিঙ্কের বাইরে যথেষ্ট তথ্য দেয়নি। আমার নীচে আমার উত্তরে ভিডিওটি সংক্ষেপে আমার নোটগুলির একটি রুক্ষ খসড়া রয়েছে। দয়া করে যেকোন সংশোধন করে উত্তরটি সম্পর্কে নির্দ্বিধায় মন্তব্য করুন। ভিডিওটি এক ঘন্টা দীর্ঘ তবে দেখার মতো মূল্যবান।
আপডেট - 2 বছর পরে
আমি মনে করি এটি ডিডিডির নবজাতকের পরিপক্কতার একটি চিহ্ন যে এটি 2 বছর অধ্যয়ন করার পরেও আমি এখনও প্রতিশ্রুতি দিতে পারি না যে এটি করার "সঠিক উপায়" আমি জানি। সর্বব্যাপী ভাষা, সামগ্রিক শিকড়, এবং আচরণ-চালিত নকশার কাছে এর কৌশল হ'ল শিল্পে DDD এর মূল্যবান অবদান। অধ্যবসায় অজ্ঞতা এবং ইভেন্ট সোর্সিং বিভ্রান্তির সৃষ্টি করে এবং আমি মনে করি যে এর মতো দর্শন এটিকে বৃহত্তর গ্রহণের থেকে ফিরিয়ে নিয়েছে। তবে আমি যা শিখেছি তা দিয়ে যদি আমাকে এই কোডটি আবার করতে হয় তবে আমি মনে করি এটি দেখতে এরকম কিছু দেখাচ্ছে:
আমি এখনও এই (খুব সক্রিয়) পোস্টে যে কোনও বৈধ ডোমেন মডেলের জন্য যে কোনও সেরা-অনুশীলন কোড সরবরাহ করে এমন কোনও উত্তরকে স্বাগত জানাই।
"I don't want to duplicate all my entities into DTOs simply because I don't need it and it violates DRY, and I also don't want my client application to take a dependency on EntityFramework.dll"
। সত্তা ফ্রেমওয়ার্ক জারগনে "সত্তা" "ডোমেন মডেল" এর মতো "সত্তা" হিসাবে একই নয়