একক দায়িত্বের নীতিটি আপনার কোডটি সম্পর্কে কেবল 1 টি কাজ করে এবং আপনি 1 টি নির্দিষ্ট জিনিস করার জন্য বোঝানো সমস্ত ক্লাসে সমস্ত কার্যকারিতা বিভক্ত করতে পারেন। একটি বৈধতা যাচাই করার জন্য একটি নির্দিষ্ট শ্রেণি, কিছু ব্যবসায়িক যুক্তি করা, একটি মডেলকে সমৃদ্ধ করা, ডেটা পুনরুদ্ধার করা, ডেটা আপডেট করা, নেভিগেশন ইত্যাদি for
উদ্বেগের বিচ্ছেদটি আপনার কোডটি অন্য কয়েকটি শ্রেণি / সিস্টেমে দৃ tight়ভাবে মিলিত হচ্ছে না। আপনার কোডে ইন্টারফেস ব্যবহার করা আপনাকে অনেক সহায়তা করে, আপনি কোডের মাধ্যমে কয়েকটি ক্লাস / সিস্টেমগুলি লসলি করতে পারেন। এটির একটি প্লাসাইড হ'ল আপনার কোডটিও ইউনিট-টেস্ট করা সহজ। অনেকগুলি (আইওসি) ফ্রেমওয়ার্ক রয়েছে যা আপনাকে এটি অর্জনে সহায়তা করতে পারে, তবে আপনি অবশ্যই এ জাতীয় জিনিস বাস্তবায়ন করতে পারেন।
কিছু এসসির উদাহরণ, তবে এসআরপি নেই
public class Foo
{
private readonly IValidator _validator;
private readonly IDataRetriever _dataRetriever;
public Foo(IValidator validator, IDataRetriever dataRetriever)
{
_validator = validator;
_dataRetriever = dataRetriever;
}
public NavigationObject GetDataAndNavigateSomewhereIfValid()
{
var data = _dataRetriever.GetAllData();
if(_validator.IsAllDataValid(data))
{
object b = null;
foreach (var item in data.Items)
{
b = DoSomeFancyCalculations(item);
}
if(_validator.IsBusinessDataValid(b))
{
return ValidBusinessLogic();
}
}
return InvalidItems();
}
private object DoSomeFancyCalculations(object item)
{
return new object();
}
private NavigationObject ValidBusinessLogic()
{
return new NavigationObject();
}
private NavigationObject InvalidItems()
{
return new NavigationObject();
}
}
আপনি দেখতে পাচ্ছেন যে এই কোডটি ক্লাসে বা অন্যান্য সিস্টেমে দৃ tight়ভাবে মিলিত হয়নি, কারণ এটি স্টাফ করার জন্য কিছু ইন্টারফেস ব্যবহার করে। এটি SoC দৃষ্টিকোণ থেকে ভাল।
আপনি দেখতে পাচ্ছেন যে এই শ্রেণিতে 3 টি ব্যক্তিগত পদ্ধতি রয়েছে যা কিছু অভিনব জিনিস রয়েছে। একটি এসআরপি দৃষ্টিকোণ থেকে, এই পদ্ধতিগুলি সম্ভবত তাদের নিজস্ব কিছু শ্রেণির মধ্যে স্থাপন করা উচিত। তাদের মধ্যে 2 নেভিগেশন সহ কিছু করেন যা কিছু ইন্যাভিগেশন শ্রেণিতে ফিট করে। অন্যটি কোনও আইটেমটিতে কিছু অভিনব গণনা করে, এটি সম্ভবত কোনও আইবিউসনেজলজিক শ্রেণীর মধ্যে স্থাপন করা যেতে পারে।
এরকম কিছু থাকার পরে আপনার উভয়েরই এসসি এবং এসআরপি রয়েছে:
public class Foo
{
private readonly IValidator _validator;
private readonly IDataRetriever _dataRetriever;
private readonly IBusinessLogic _businessLogic;
private readonly INavigation _navigation;
public Foo(IValidator validator, IDataRetriever dataRetriever, IBusinessLogic businessLogic, INavigation navigation)
{
_validator = validator;
_dataRetriever = dataRetriever;
_businessLogic = businessLogic;
_navigation = navigation;
}
public NavigationObject GetDataAndNavigateSomewhereIfValid()
{
var data = _dataRetriever.GetAllData();
if(_validator.IsAllDataValid(data))
{
object b = null;
foreach (var item in data.Items)
{
b = _businessLogic.DoSomeFancyCalculations(item);
}
if(_validator.IsBusinessDataValid(b))
{
return _navigation.ValidBusinessLogic();
}
}
return _navigation.InvalidItems();
}
}
অবশ্যই এই বিতর্কটি যদি GetDataAndNavigateSomewhereIfValid
পদ্ধতিতে রাখা উচিত তবে আপনি বিতর্ক করতে পারেন । এটি আপনার নিজের জন্য সিদ্ধান্ত নেওয়া উচিত। আমার কাছে মনে হচ্ছে এই পদ্ধতিটি খুব বেশি স্টাফ করছে।