বলুন আমাদের একটি টাস্ক লগিং সিস্টেম রয়েছে, যখন কোনও টাস্ক লগ হয় তখন ব্যবহারকারী কোনও বিভাগ এবং টাস্কটিকে 'আউটস্ট্যান্ডিং' এর স্ট্যাটাসে ডিফল্ট করে। এই উদাহরণ হিসাবে ধরে নিন যে বিভাগ এবং স্থিতি সত্তা হিসাবে প্রয়োগ করতে হবে। সাধারণত আমি এটি করতাম:
আবেদন স্তর:
public class TaskService
{
//...
public void Add(Guid categoryId, string description)
{
var category = _categoryRepository.GetById(categoryId);
var status = _statusRepository.GetById(Constants.Status.OutstandingId);
var task = Task.Create(category, status, description);
_taskRepository.Save(task);
}
}
সত্তা:
public class Task
{
//...
public static void Create(Category category, Status status, string description)
{
return new Task
{
Category = category,
Status = status,
Description = descrtiption
};
}
}
আমি এটি এরকম করি কারণ আমি ধারাবাহিকভাবে বলেছি যে সত্তাগুলি ভাণ্ডারগুলিতে অ্যাক্সেস করা উচিত নয়, তবে আমি যদি এটি করি তবে এটি আমার কাছে আরও বেশি অর্থবোধ করবে:
সত্তা:
public class Task
{
//...
public static void Create(Category category, string description)
{
return new Task
{
Category = category,
Status = _statusRepository.GetById(Constants.Status.OutstandingId),
Description = descrtiption
};
}
}
স্থিতি সংগ্রহস্থলটি যাইহোক নির্ভর করে ইনজেকশন করা হয়, সুতরাং কোনও প্রকৃত নির্ভরতা নেই এবং এটি আমার কাছে আরও বেশি অনুভূত হয় যে এটি একটি ডোমেন যা এই কাজটি বকেয়া ছাড়িয়ে ডিফল্ট করে তোলে a পূর্ববর্তী সংস্করণটিকে অ্যাপ্লিকেশন লেয়ারই সিদ্ধান্ত নিয়েছে বলে মনে হচ্ছে। যেহেতু কেন ডোমেনটিতে প্রায়শই সঞ্চিত হ'ল যদি এটি সক্ষমতা না হয়?
এখানে আরও চূড়ান্ত উদাহরণ, এখানে ডোমেন জরুরী সিদ্ধান্ত নিয়েছে:
সত্তা:
public class Task
{
//...
public static void Create(Category category, string description)
{
var task = new Task
{
Category = category,
Status = _statusRepository.GetById(Constants.Status.OutstandingId),
Description = descrtiption
};
if(someCondition)
{
if(someValue > anotherValue)
{
task.Urgency = _urgencyRepository.GetById
(Constants.Urgency.UrgentId);
}
else
{
task.Urgency = _urgencyRepository.GetById
(Constants.Urgency.SemiUrgentId);
}
}
else
{
task.Urgency = _urgencyRepository.GetById
(Constants.Urgency.NotId);
}
return task;
}
}
আপনি জরুরি ভিত্তিতে সমস্ত সম্ভাব্য সংস্করণে পাস করতে চান এমন কোনও উপায় নেই এবং আপনি কোনওভাবেই অ্যাপ্লিকেশন স্তরে এই ব্যবসায়িক যুক্তিটি গণনা করতে চান না, তবে অবশ্যই এটি সবচেয়ে উপযুক্ত উপায় হবে?
তাহলে কি এটি ডোমেন থেকে সংগ্রহস্থলগুলি অ্যাক্সেস করার বৈধ কারণ?
সম্পাদনা: অ স্থির পদ্ধতিতে এটিও হতে পারে:
public class Task
{
//...
public void Update(Category category, string description)
{
Category = category,
Status = _statusRepository.GetById(Constants.Status.OutstandingId),
Description = descrtiption
if(someCondition)
{
if(someValue > anotherValue)
{
Urgency = _urgencyRepository.GetById
(Constants.Urgency.UrgentId);
}
else
{
Urgency = _urgencyRepository.GetById
(Constants.Urgency.SemiUrgentId);
}
}
else
{
Urgency = _urgencyRepository.GetById
(Constants.Urgency.NotId);
}
return task;
}
}