এই শ্রেণি নকশাটি কি একক দায়িত্বের নীতি লঙ্ঘন করে?


63

আজ কারও সাথে আমার তর্ক হয়েছিল।

অ্যানিমিক ডোমেন মডেলের বিপরীতে আমি একটি সমৃদ্ধ ডোমেন মডেল থাকার সুবিধাগুলি ব্যাখ্যা করছি। এবং আমি একটি সাধারণ শ্রেণীর মতো দেখতে আমার বক্তব্য ডেমোড করেছি:

public class Employee
{
    public Employee(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastname;
    }

    public string FirstName { get private set; }
    public string LastName { get; private set;}
    public int CountPaidDaysOffGranted { get; private set;}

    public void AddPaidDaysOffGranted(int numberOfdays)
    {
        // Do stuff
    }
}

তিনি যখন তাঁর রক্তস্বল্পতার মডেল পদ্ধতির পক্ষে ছিলেন, তখন তার একটি যুক্তি ছিল: "আমি সলিডের প্রতি বিশ্বাসী You আপনি একক দায়িত্বের নীতি (এসআরপি) লঙ্ঘন করছেন কারণ আপনি উভয়ই একই শ্রেণিতে ডেটা উপস্থাপন করছেন এবং যুক্তি প্রদর্শন করছেন।"

আমি এই দাবীটি সত্যই অবাক করে দিয়েছি কারণ এই যুক্তি অনুসরণ করে যে কোনও শ্রেণীর একটি সম্পত্তি এবং একটি পদ্ধতি থাকা এসআরপি লঙ্ঘন করে, এবং তাই সাধারণভাবে ওওপি সলিড নয়, এবং কার্যকরী প্রোগ্রামিংই স্বর্গের একমাত্র উপায়।

আমি তার অনেক যুক্তির জবাব না দেওয়ার সিদ্ধান্ত নিয়েছি, তবে সম্প্রদায় এই প্রশ্নটিতে কী ভাববে আমি আগ্রহী।

আমি যদি উত্তর দিয়েছি, আমি উপরে উল্লিখিত প্যারাডক্সটির দিকে ইঙ্গিত করে শুরু করেছিলাম এবং তারপরে ইঙ্গিত দিয়েছি যে এসআরপি আপনি যে গ্রানুলারিটির স্তর বিবেচনা করতে চান তার উপর অত্যন্ত নির্ভরশীল এবং আপনি যদি এটি যথেষ্ট পরিমাণে গ্রহণ করেন তবে একের অধিক সংবলিত যে কোনও শ্রেণী সম্পত্তি বা একটি পদ্ধতি এটি লঙ্ঘন করে।

কি বলতেন?

আপডেট: পদ্ধতিটিকে আরও বাস্তবসম্মত করতে এবং অন্তর্নিহিত আলোচনায় ফোকাস করতে আমাদের সহায়তা করতে উদাহরণটি উদাহরণস্বরূপ গন্টবার্ট দ্বারা আপডেট করা হয়েছে।


19
এই শ্রেণীর SRP লঙ্ঘন নয় এই কারণে যে যুক্তি দিয়ে ডেটা দ্রবণ, কিন্তু কারণ এটি কমে সংযোগ আছে - সম্ভাব্য ঈশ্বর বস্তুর
মশা

1
কোন উদ্দেশ্য কর্মচারীর সাথে ছুটি যুক্ত করছে? সম্ভবত কোনও ক্যালেন্ডার শ্রেণি বা এমন কিছু কিছু থাকতে হবে যা ছুটির দিন রয়েছে। আমি মনে করি আপনার বন্ধু ঠিক আছে।
জেমস ব্ল্যাক

9
"আমি এক্স এর প্রতি বিশ্বাসী" বলে এমন কাউকে কখনও শুনবেন না।
স্টিগ হেমার

29
এটি মোটামুটি ভাল মডেলিং কিনা তা এটি এসআরপি লঙ্ঘন কিনা তা এতটা নয়। ধরুন আমি একজন কর্মচারী। আমি যখন আমার ম্যানেজারকে জিজ্ঞাসা করি যে আমি যদি স্কিইংয়ে যাওয়ার জন্য দীর্ঘ সপ্তাহান্ত গ্রহণ করি তবে তার সাথে ঠিক আছে কিনা, আমার পরিচালক আমার সাথে ছুটি যোগ করেন না । এখানে কোডটি বাস্তবতার সাথে মডেল করার ইচ্ছাটির সাথে মেলে না এবং তাই সন্দেহজনক।
এরিক লিপার্ট

2
কার্যকরী প্রোগ্রামিংয়ের জন্য স্বর্গের একমাত্র উপায় হ'ল +1।
এরিপ

উত্তর:


68

একক দায়িত্ব আপনার সিস্টেমে যৌক্তিক কাজের বিমূর্ততা হিসাবে বোঝা উচিত। একটি শ্রেণীর একক, নির্দিষ্ট কাজ সম্পাদনের জন্য প্রয়োজনীয় সমস্ত কিছু করা উচিত) দায়িত্ব কী তা নির্ভর করে এটি প্রকৃতপক্ষে একটি সু-নকশাকৃত শ্রেণিতে অনেক কিছু আনতে পারে। আপনার স্ক্রিপ্ট ইঞ্জিনটি চালিত শ্রেণীর উদাহরণস্বরূপ, স্ক্রিপ্টগুলি প্রক্রিয়াকরণের সাথে প্রচুর পরিমাণে পদ্ধতি এবং ডেটা থাকতে পারে।

আপনার সহকর্মী ভুল জিনিসটির দিকে মনোনিবেশ করছেন। প্রশ্নটি নয় "এই শ্রেণীর সদস্যদের কী আছে?" তবে "এই শ্রেণিটি প্রোগ্রামের মধ্যে কোন কার্যকর অপারেশন (গুলি) করে?" এটি একবার বোঝা গেলে, আপনার ডোমেন মডেলটি ঠিক ঠিক দেখাচ্ছে।


যদি অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং তৈরি করা হয়েছিল এবং বাস্তব জীবনের বস্তু এবং শ্রেণি (ক্রিয়া + বৈশিষ্ট্য) মডেল করার উদ্দেশ্যে করা হয়েছে তবে কেন একাধিক দায়িত্ব (ক্রিয়া) যুক্ত কোড বর্গটি লেখবেন না ? একটি বাস্তব বিশ্বের বস্তুর একাধিক দায়িত্ব থাকতে পারে। উদাহরণস্বরূপ একজন সাংবাদিক সংবাদ পত্রগুলিতে সম্পাদকীয় লেখেন এবং একটি টিভি শোতে রাজনীতিবিদদের সাক্ষাত্কার দেন। বাস্তব জীবনের জন্য দুটি দায়িত্ব! আমি যদি ক্লাস জার্নালিস্ট লিখতে যাই?
user1451111

41

একক দায়িত্বের নীতিমালা কেবলমাত্র কোনও কোডের টুকরো (OOP- এ, আমরা সাধারণত ক্লাসের কথা বলছি) এর কার্যকারিতার এক টুকরোটির উপর দায়বদ্ধ কিনা তা নিয়েই উদ্বিগ্ন । আমি মনে করি আপনার বন্ধুটি বলছে যে ফাংশন এবং ডেটা সহ মিশ্রিত করতে পারে না সে ধারণাটি আসলে বুঝতে পারে নি। যদি Employeeতাঁর কর্মক্ষেত্র সম্পর্কে, তার গাড়িটি কীভাবে দ্রুত যায় এবং কুকুরটি কী ধরণের খাবার খায় সে সম্পর্কেও যদি আমাদের তথ্য থাকে তবে আমাদের সমস্যা হয় have

যেহেতু এই শ্রেণিটি কেবল একটির সাথেই কাজ করে Employee, আমি মনে করি এটি নির্বিচারে এসআরপি লঙ্ঘন করে না বলে ন্যায়সঙ্গত বলে মনে হয়, তবে লোকেরা সর্বদা তাদের নিজস্ব মতামত রাখে।

আমাদের উন্নতি করতে পারে এমন একটি জায়গা হ'ল কর্মচারীদের তথ্য (যেমন নাম, ফোন নম্বর, ইমেল) তার ছুটি থেকে আলাদা করা। আমার মনে, এর অর্থ এই নয় যে পদ্ধতি এবং ডেটা একত্রিত হতে পারে না, এর ঠিক অর্থ হ'ল সম্ভবত ছুটির কার্যকারিতা আলাদা জায়গায় থাকতে পারে।


20

আমার মতে এই শ্রেণিটি সম্ভাব্যত এসআরপি লঙ্ঘন করতে পারে যদি এটি Employeeএবং উভয়ই উভয়ের প্রতিনিধিত্ব করে EmployeeHolidays

যেমনটি রয়েছে, এবং এটি যদি পিয়ার রিভিউর জন্য আমার কাছে আসে, আমি সম্ভবত এটিটি দিয়ে দিয়েছি। যদি আরও কর্মচারীর নির্দিষ্ট বৈশিষ্ট্য এবং পদ্ধতি যুক্ত করা হয় এবং আরও ছুটির নির্দিষ্ট বৈশিষ্ট্য যুক্ত করা হয় তবে আমি সম্ভবত এসআরপি এবং আইএসপি উভয়কেই উদ্ধৃত করে একটি বিভক্তির পরামর্শ দেব।


আমি রাজী. কোডটি এখানে প্রদত্ত মত সরল থাকলে আমি সম্ভবত এটি স্লাইড করতে দেব। তবে মনে মনে, কর্মচারীর নিজস্ব ছুটি পরিচালনা করার দায়িত্ব আমার হওয়া উচিত নয়। এই দায়িত্বটি যেখানে রাখা হয়েছে তার সাথে এটি কোনও বড় চুক্তির মতো মনে হচ্ছে না, তবে এটি এইভাবে দেখুন: আপনি যদি কোড বেসে নতুন হন এবং ছুটির নির্দিষ্ট কার্যকারিতা নিয়ে কাজ করতে চান - আপনি কোথায় প্রথম দেখবেন? ছুটির দিনটির জন্য, আমি ব্যক্তিগতভাবে কর্মচারী সত্তাটি শুরু করতে দেখব না।
নিক্লাস এইচ

1
পছন্দ করেছেন থো ব্যক্তিগতভাবে আমি এলোমেলোভাবে তাকিয়ে দেখি না এবং অনুমান করি যে ক্লাসটি আমি "হলিডে" শব্দের জন্য স্টুডিওতে অনুসন্ধান করব এবং কী ক্লাসে এসেছিল তা দেখব :) :)
নিকোলাইড্যান্ট

4
সত্য। তবে কী যদি এই নতুন সিস্টেমে "হলিডে" না বলা হয় তবে এটি "অবকাশ" বা "ফ্রি টাইম"। তবে আমি একমত, এটির সাথে আপনার সাধারণত সন্ধান করার দক্ষতা আছে বা কোনও সহকর্মীকে জিজ্ঞাসা করতে পারেন। আমার মন্তব্যটি প্রাথমিকভাবে মানসিকভাবে দায়িত্বকে মডেল করার জন্য ওপি পেতে এবং যেখানে যুক্তির সর্বাধিক সুস্পষ্ট স্থানটি হবে :-)
নিক্লাস এইচ

আমি আপনার প্রথম বক্তব্যের সাথে একমত যাইহোক, যদি এটি পিয়ারের পর্যালোচনাতে আসে তবে আমি মনে করি না যে আমি করব কারণ এসআরপি লঙ্ঘন করা একটি পিচ্ছিল slাল এবং এটি অনেকগুলি ভাঙ্গা উইন্ডোর প্রথম হতে পারে। চিয়ার্স।
জিম স্পিকার

20

ইতিমধ্যে দুর্দান্ত উত্তরগুলি দেখানো হয়েছে যে এসআরপি হ'ল যৌক্তিক কার্যকারিতা সম্পর্কে একটি বিমূর্ত ধারণা, তবে এমন সূক্ষ্ম পয়েন্ট রয়েছে যা আমি মনে করি যোগ করার উপযুক্ত।

এসআইএলআইডি, এসআরপি এবং ওসিপিতে প্রথম দুটি অক্ষর প্রয়োজনীয়তা পরিবর্তনের প্রতিক্রিয়াতে আপনার কোড কীভাবে পরিবর্তিত হয় সে সম্পর্কে উভয়ই। এসআরপি সম্পর্কে আমার প্রিয় সংজ্ঞাটি হ'ল: "একটি মডিউল / শ্রেণি / ক্রিয়াকলাপ পরিবর্তনের কেবল একটি কারণ থাকতে হবে।" আপনার কোডটি পরিবর্তিত হওয়ার সম্ভাব্য কারণগুলির বিষয়ে তর্ক করা আপনার কোডটি সলিড কিনা তা নিয়ে তর্ক করার চেয়ে অনেক বেশি উত্পাদনশীল।

আপনার কর্মচারী শ্রেণীর কতগুলি পরিবর্তন আছে? আমি জানি না, কারণ আপনি যে প্রসঙ্গে এটি ব্যবহার করছেন তা আমি জানি না এবং আমি ভবিষ্যতটিও দেখতে পাচ্ছি না। আমি যা করতে পারি তা হ'ল আমি অতীতে যা দেখেছি তার উপর ভিত্তি করে বুদ্ধিমত্তার সম্ভাব্য পরিবর্তনগুলি এবং আপনি সাবজেক্টিভালি তারা কতটা সম্ভাবনা রয়েছে তা নির্ধারণ করতে পারেন। যদি "যুক্তিসঙ্গত সম্ভাবনা" এবং "আমার কোডটি ইতিমধ্যে সেই সঠিক কারণে পরিবর্তিত হয়েছে" এর মধ্যে যদি একের বেশি স্কোর হয় তবে আপনি সেই ধরণের পরিবর্তনের বিরুদ্ধে এসআরপি লঙ্ঘন করছেন। এখানে একটি: দুটিরও বেশি নামের সাথে আপনার সংস্থায় যোগদান (বা কোনও স্থপতি এই দুর্দান্ত ডাব্লু 3 সি নিবন্ধটি পড়ে )। এখানে অন্যটি রয়েছে: আপনার সংস্থাটি কীভাবে ছুটির দিনগুলি বরাদ্দ করে তা পরিবর্তন করে।

লক্ষ্য করুন যে আপনি অ্যাডহ্ল্যাডস পদ্ধতিটি সরালেও এই কারণগুলি সমানভাবে বৈধ। প্রচুর অ্যানিমিক ডোমেন মডেলগুলি এসআরপি লঙ্ঘন করে। তাদের মধ্যে অনেকগুলি হ'ল কেবল ডাটাবেস-সারণী-ইন-কোড এবং ডাটাবেস টেবিলগুলিতে পরিবর্তনের 20+ কারণ থাকা খুব সাধারণ।

এখানে চাবানোর মতো কিছু: আপনার সিস্টেমের কর্মচারীদের বেতন ট্র্যাক করার জন্য যদি আপনার কর্মী শ্রেণি পরিবর্তন হয়? বক্তব্য রাখছেন? জরুরী যোগাযোগের তথ্য? যদি আপনি তাদের মধ্যে দুটিয়ের কাছে "হ্যাঁ" (এবং "সম্ভবত হওয়ার সম্ভাবনা") বলে থাকেন তবে আপনার ক্লাসটি এখনও কোনও কোড না থাকলেও এসআরপি লঙ্ঘন করবে! সলিড কোডগুলি যতটা প্রক্রিয়া এবং আর্কিটেকচার সম্পর্কে about


9

ক্লাসটি ডেটা উপস্থাপন করে যে ক্লাসের দায়িত্ব নয়, এটি একটি ব্যক্তিগত বাস্তবায়ন বিশদ।

শ্রেণীর একটি দায়িত্ব থাকে, একজন কর্মীর প্রতিনিধিত্ব করা। এই প্রসঙ্গে, এর অর্থ এটি কিছু পাবলিক এপিআই উপস্থাপন করে যা আপনাকে কর্মীদের সাথে ডিল করার জন্য প্রয়োজনীয় কার্যকারিতা সরবরাহ করে (অ্যাডহ্যালিডসগুলি একটি ভাল উদাহরণ কিনা বিতর্কযোগ্য)।

বাস্তবায়ন অভ্যন্তরীণ; এটি এমনটি ঘটে যে এর জন্য কিছু ব্যক্তিগত ভেরিয়েবল এবং কিছু যুক্তি প্রয়োজন। এর অর্থ এই নয় যে ক্লাসের এখন একাধিক দায়িত্ব রয়েছে।


চিন্তার
মজাদার

দুর্দান্ত - ওওপি-র উদ্দেশ্যে লক্ষ্যগুলি প্রকাশ করার ভাল উপায়।
user949300

5

যুক্তি এবং ডেটা মেশানো যে কোনও উপায়ে সর্বদা ভুল, এই ধারণাটি এতটাই হাস্যকর যে এটি আলোচনার যোগ্যও হয় না। যাইহোক, উদাহরণে প্রকৃতপক্ষে একক দায়বদ্ধতার একটি সুস্পষ্ট লঙ্ঘন রয়েছে, তবে এটি কোনও সম্পত্তি DaysOfHolidaysএবং একটি ক্রিয়াকলাপের কারণ নয় AddHolidays(int)

এর কারণ কর্মচারীর পরিচয় হলিডে ম্যানেজমেন্টের সাথে মিলিত হয়েছে, যা খারাপ। কর্মচারীর পরিচয় একটি জটিল জিনিস যা অবকাশ, বেতন, ওভারটাইম ট্র্যাক করতে হয়, কোন দলে রয়েছে তার প্রতিনিধিত্ব করতে, পারফরম্যান্স প্রতিবেদনের সাথে লিঙ্ক করতে পারে ইত্যাদি An কর্মচারী। কর্মীদের এমনকি তাদের নামের একাধিক বানান থাকতে পারে যেমন একটি ASCII এবং একটি ইউনিকোড বানান। লোকের 0 থেকে n প্রথম এবং / অথবা শেষ নাম থাকতে পারে। বিভিন্ন বিচার বিভাগে তাদের আলাদা আলাদা নাম থাকতে পারে। কোনও কর্মীর পরিচয় সনাক্ত করা একটি দায়িত্ব যথেষ্ট যে ছুটির দিন বা ছুটির ব্যবস্থাপনাকে দ্বিতীয় দায়িত্ব না বলে শীর্ষে যুক্ত করা যায় না।


"একজন কর্মীর পরিচয় সনাক্তকরণ একটি যথেষ্ট দায়িত্ব যে ছুটির দিন বা ছুটির ব্যবস্থাপনাকে দ্বিতীয় দায়িত্ব না বলে শীর্ষে যুক্ত করা যায় না।" + কর্মচারীর বেশ কয়েকটি নাম ইত্যাদি থাকতে পারে ... একটি মডেলের মূল বিষয় হ'ল সমস্যাটির জন্য বাস্তব বিশ্বের প্রাসঙ্গিক তথ্যগুলিতে মনোনিবেশ করা। প্রয়োজনীয়তা রয়েছে যার জন্য এই মডেলটি সর্বোত্তম। এই প্রয়োজনীয়তাগুলিতে, কর্মচারীরা কেবলমাত্র তাদের ছুটিগুলিকে সংশোধন করতে পারে এমন মাত্রায় আকর্ষণীয় এবং আমরা তাদের বাস্তব জীবনের নির্দিষ্টকরণের অন্যান্য দিকগুলি পরিচালনা করতে খুব বেশি আগ্রহী নই।
tobiak777

@ রেডি "কর্মচারীরা কেবলমাত্র তাদের ছুটিগুলিকে সংশোধন করতে পারব" - তার অর্থ আপনার সঠিকভাবে সনাক্ত করা দরকার। আপনার কোনও কর্মী হওয়ার সাথে সাথেই তারা বিবাহ বা বিবাহ বিচ্ছেদের কারণে যে কোনও সময় তাদের শেষ নাম পরিবর্তন করতে পারেন। তারা তাদের নাম এবং লিঙ্গও পরিবর্তন করতে পারে। আপনি যদি কর্মীদের পদবি পরিবর্তন করে থাকেন যে তাদের নামটি অন্য কোনও কর্মীর সাথে মেলে? আপনি এই মুহুর্তে এই সমস্ত কার্যকারিতা যুক্ত করবেন না। পরিবর্তে আপনি যখন এটি প্রয়োজন হবে এটি যুক্ত করা হবে, যা ভাল। কতটুকু বাস্তবায়ন হয় তা নির্বিশেষে শনাক্তকরণের দায়িত্ব একই থাকে।
পিটার

3

"আমি সলিডে বিশ্বাসী You আপনি একক দায়িত্ব নীতি (এসআরপি) লঙ্ঘন করছেন যেহেতু আপনি উভয়ই ডেটা উপস্থাপন করছেন এবং একই শ্রেণিতে যুক্তি প্রদর্শন করছেন।"

অন্যদের মতো আমিও এর সাথে একমত নই।

আমি বলব যে আপনি যদি ক্লাসে একাধিক লজিক সম্পাদন করে থাকেন তবে এসআরপি লঙ্ঘিত হয়েছে । যুক্তির একক অংশটি অর্জন করতে শ্রেণীর মধ্যে কতটা ডেটা সংরক্ষণ করা দরকার তা অপ্রাসঙ্গিক।


না! এসআরপি লজিকের একাধিক টুকরো, একাধিক ডেটা টুকরো বা উভয়ের কোনও সংমিশ্রণ দ্বারা লঙ্ঘিত হয় না। একমাত্র প্রয়োজন হ'ল বস্তুটির উদ্দেশ্যটি আটকে থাকা উচিত। এর উদ্দেশ্যটি সম্ভাব্যভাবে অনেকগুলি অপারেশন জড়িত করতে পারে।
মার্টিন মাট

@ মার্টিনম্যাট: অনেকগুলি অপারেশন, হ্যাঁ। ফলাফল হিসাবে যুক্তি এক টুকরা। আমি মনে করি আমরা একই কথা বলছি তবে বিভিন্ন পদ দিয়ে (এবং আমি এই বিষয়টি প্রায়শই অধ্যয়ন না করায়
আপনারাই

2

একক দায়বদ্ধতা বা পরিবর্তনের একক কারণ কি করে এবং কী করে না সে নিয়ে বিতর্ক করা আজকের দিনে আমার পক্ষে কার্যকর মনে হচ্ছে না। আমি তার জায়গায় ন্যূনতম শোকের নীতি প্রস্তাব করব:

ন্যূনতম শোকের নীতি: কোডটি হয় পরিবর্তনের প্রয়োজনীয়তার সম্ভাবনা হ্রাস করতে বা পরিবর্তিত হওয়ার স্বাচ্ছন্দ্যকে সর্বাধিক করে তোলা উচিত।

এটা কেমন ছিল? রক্ষণাবেক্ষণের ব্যয় হ্রাস করতে কেন এটি সাহায্য করতে পারে এবং এটি আশা করা যায় যে এটি অন্তহীন বিতর্কের বিষয় হওয়া উচিত নয়, তবে সাধারণভাবে সলিডের মতো, এটি সর্বত্র অন্ধভাবে প্রয়োগ করার মতো কিছু নয় figure ট্রেড-অফগুলিকে সামঞ্জস্য করার সময় এটি বিবেচনা করার মতো কিছু to

পরিবর্তনের প্রয়োজনীয়তার সম্ভাবনা হিসাবে, এটি নীচে চলে যায়:

  1. ভাল পরীক্ষা (উন্নত নির্ভরযোগ্যতা)।
  2. নির্দিষ্ট কিছু করার জন্য কেবল বেয়ার ন্যূনতম কোডের সাথে জড়িত হওয়া (এর মধ্যে অ্যাফেরেন্ট কাপলিং হ্রাস অন্তর্ভুক্ত থাকতে পারে)।
  3. কোডটি খারাপ করে তোলে যা এটি করে (দেখুন Badass নীতিটি তৈরি করুন)।

পরিবর্তনগুলি করতে অসুবিধা হিসাবে, এটি অভিজাত কাপলিংয়ের সাথে উঠে যায়। পরীক্ষার মাধ্যমে অভিজাত যুগলদের পরিচয় হয় তবে এটি নির্ভরযোগ্যতা উন্নত করে। সম্পন্ন হয়েছে, এটি সাধারণত ক্ষতির চেয়ে আরও ভাল কাজ করে এবং সর্বনিম্ন গ্রহণযোগ্য এবং সর্বনিম্ন দুঃখের নীতি দ্বারা প্রচারিত।

Badass নীতিমালা করুন: অনেক জায়গায় ব্যবহৃত ক্লাসগুলি দুর্দান্ত হওয়া উচিত। এগুলি নির্ভরযোগ্য, দক্ষ হওয়া উচিত যদি এটি তাদের মানের সাথে সম্পর্কিত হয় ইত্যাদি ties

এবং মেক বাডাস প্রিন্সিপাল ন্যূনতম দুঃখের নীতির সাথে আবদ্ধ, যেহেতু বদস জিনিসগুলি যা করে তার থেকে স্তন্যপান করে এমন জিনিসগুলির চেয়ে পরিবর্তনের প্রয়োজনের কম সম্ভাবনা খুঁজে পাবে।

আমি উপরে উল্লিখিত প্যারাডক্সটির দিকে ইঙ্গিত করে শুরু করেছিলাম এবং তারপরে সূচিত করব যে এসআরপি আপনি যে গ্রানুলারিটির স্তর বিবেচনা করতে চান তার উপর নির্ভরশীল এবং আপনি যদি এটি যথেষ্ট পরিমাণে গ্রহণ করেন তবে একাধিক সম্পত্তি বা এক পদ্ধতিযুক্ত কোনও শ্রেণি লঙ্ঘন করে এটা।

একটি এসআরপি দৃষ্টিকোণ থেকে এমন একটি শ্রেণি যা সবেমাত্র কিছু করে তার অবশ্যই পরিবর্তন করার একমাত্র (কখনও কখনও শূন্য) কারণ থাকতে পারে:

class Float
{
public:
    explicit Float(float val);
    float get() const;
    void set(float new_val);
};

বাস্তবে পরিবর্তনের কোনও কারণ নেই! এটি এসআরপি থেকে ভাল। এটা জেডআরপি!

আমি প্রস্তাব না দিলে এটি Make Badass নীতি লঙ্ঘনের মধ্যে রয়েছে। এটিও একেবারেই মূল্যহীন। যা কিছু খুব কম করে তা খারাপ হওয়ার আশা করতে পারে না। এটিতে খুব কম তথ্য রয়েছে (টিএলআই)। এবং স্বভাবতই যখন আপনার কাছে টিআইএল কিছু থাকে তবে এটি সত্যিকার অর্থে অর্থপূর্ণ কিছু করতে পারে না, এমনকি যে তথ্যটি তার দ্বারা আবৃত হয় তা দিয়েও নয়, সুতরাং বাইরের বিশ্বে এটিকে আশাবাদী এবং খারাপ কিছু করতে হবে এমন আশা করে এটিকে ফাঁস করতে হবে। এবং সেই ফাঁস হ'ল এমন কোনও কিছুর জন্য ঠিক আছে যা কেবলমাত্র ডেটাগ্রেট করা এবং আরও কিছু না বোঝার জন্য, তবে "প্রান্তিকতা" হিসাবে আমি "ডেটা" এবং "অবজেক্টস" এর মধ্যে যে পার্থক্যটি দেখি তার দ্বার হ'ল পার্থক্য।

অবশ্যই টিএমআই যা কিছু খারাপ তাও। আমরা আমাদের সম্পূর্ণ সফ্টওয়্যারকে এক শ্রেণিতে রেখে দিতে পারি। এমনকি এটিতে কেবল একটি runপদ্ধতি থাকতে পারে। এবং যে কেউ তর্ক করতে পারে যে এটির পরিবর্তনের এখন একটি বিস্তৃত কারণ রয়েছে: "সফ্টওয়্যারটির উন্নতির প্রয়োজন হলে কেবল এই শ্রেণিটি পরিবর্তন করা দরকার" " আমি মূর্খ হয়ে যাচ্ছি, তবে অবশ্যই আমরা এটির সাথে সমস্ত রক্ষণাবেক্ষণের বিষয়টি কল্পনা করতে পারি।

সুতরাং আপনার নকশা করা সামগ্রীর গ্রানুলারিটি বা খাঁটিতা সম্পর্কে একটি ভারসাম্যপূর্ণ কাজ রয়েছে। বাইরের বিশ্বে আপনার কতটা তথ্য ফাঁস হতে হবে এবং এটি কতটা অর্থবহ কার্যকরীতা সম্পাদন করতে পারে তা দ্বারা আমি প্রায়শই এটি বিচার করি। আমি প্রায়শই ন্যূনতম শোকের নীতিটি মিশ্রণের সময় ভারসাম্য বজায় রাখার জন্য ব্যাডাস নীতিটিকে সহায়ক মনে করি।


1

বিপরীতে, আমার জন্য অ্যানিমিক ডোমেন মডেল কিছু ওওপি মূল ধারণাটি ভাঙে (যা বৈশিষ্ট্য এবং আচরণকে একত্রিত করে) তবে স্থাপত্যিক পছন্দগুলির ভিত্তিতে অনিবার্য হতে পারে। অ্যানিমিক ডোমেনগুলি ভাবা সহজ, কম জৈব এবং আরও ক্রমযুক্ত।

অনেকগুলি সিস্টেমে এটি করার ঝোঁক থাকে যখন একাধিক স্তর অবশ্যই একই ডেটা (সার্ভিস স্তর, ওয়েব স্তর, ক্লায়েন্ট স্তর, এজেন্ট ...) দিয়ে খেলতে পারে।

এক জায়গায় ডেটা স্ট্রাকচার এবং অন্যান্য পরিষেবা ক্লাসের আচরণের সংজ্ঞা দেওয়া আরও সহজ। যদি একই ক্লাসটি একাধিক স্তরগুলিতে ব্যবহৃত হয়, তবে এটিটি বড় হতে পারে এবং এটি কোন স্তরের প্রয়োজনীয় আচরণটি সংজ্ঞায়িত করতে দায়বদ্ধ এবং কে পদ্ধতিগুলি কল করতে সক্ষম তা প্রশ্ন করে।

উদাহরণস্বরূপ, এটি কোনও এজেন্ট প্রক্রিয়ার চেয়ে ভাল ধারণা নাও হতে পারে যা আপনার সমস্ত কর্মচারীর পরিসংখ্যান গণনা করে অর্থের দিনগুলির জন্য একটি গণনা কল করতে পারে। এবং কর্মচারী তালিকার জিইউআই অবশ্যই এই পরিসংখ্যান এজেন্টে ব্যবহৃত নতুন একত্রিত আইডি গণনার প্রয়োজন হবে না (এবং প্রযুক্তিগত তথ্য এটির সাথে আসছে)। আপনি যখন পদ্ধতিগুলি এইভাবে আলাদা করেন, আপনি সাধারণত কেবলমাত্র ডেটা স্ট্রাকচার সহ একটি শ্রেণীর সাথে শেষ করেন।

আপনি খুব সহজেই "অবজেক্ট" ডেটা, বা তাদের মধ্যে কয়েকটি, বা অন্য কোনও ফর্ম্যাটে (জেসন) ডিজিটালাইজ / ডিজিটালাইজ করতে পারেন ... কোনও অবজেক্ট কনসেপ্ট / দায়িত্ব সম্পর্কে উদ্বিগ্ন না হয়ে। এটি কেবল ডাটা পাস হচ্ছে। আপনি সর্বদা দুটি ক্লাসের মধ্যে ডেটা ম্যাপিং করতে পারেন (কর্মচারী, কর্মচারী, কর্মচারী স্ট্যাটিস্টিক ...) তবে এখানে কর্মচারী আসলে কী বোঝায়?

সুতরাং হ্যাঁ এটি ডোমেন ক্লাসে ডেটা এবং পরিষেবা ক্লাসে ডেটা হ্যান্ডলিং সম্পূর্ণভাবে পৃথক করে তবে এটি এখানে প্রয়োজনীয়। এই জাতীয় ব্যবস্থাটি একই সাথে ব্যবসায়ের মূল্য আনার জন্য একটি কার্যকরী একটি এবং প্রযুক্তিগত একটিও যথাযথ দায়িত্বের সুযোগ রাখার সময় যেখানেই প্রয়োজনীয় তথ্যের প্রচার করতে হবে (এবং বিতরণকৃত বস্তু এটির সমাধানও করে না)।

যদি আপনার আচরণ স্কোপগুলি আলাদা করার প্রয়োজন না হয় তবে আপনি কীভাবে আপনার অবজেক্টটি দেখেন তার উপর নির্ভর করে পরিষেবাগুলি ক্লাসে বা ডোমেন ক্লাসগুলিতে পদ্ধতিগুলি আরও নির্ধারণ করতে আপনি আরও বেশি মুক্ত। আমি কোনও অবজেক্টকে "আসল" ধারণা হিসাবে দেখতে চাই, এটি স্বাভাবিকভাবেই এসআরপি রাখতে সহায়তা করে। সুতরাং আপনার উদাহরণস্বরূপ, এটি কর্মচারী বসের চেয়ে বেশি বাস্তববাদী যা তার পেডএএকউন্টে মঞ্জুরিপ্রাপ্ত পে-ডে অফ off কোনও কর্মচারী কোম্পানী দ্বারা নিযুক্ত হয়, ওয়ার্কস, অসুস্থ হতে পারে বা কোনও পরামর্শ চাইতে পারে, এবং তার একটি পে-ডে অ্যাকাউন্ট রয়েছে (বস সরাসরি তার কাছ থেকে বা পে-ডেএকাউন্টের রেজিস্ট্রি থেকে পুনরুদ্ধার করতে পারেন ...) তবে আপনি একটি সমন্বিত শর্টকাট তৈরি করতে পারেন সরলতার জন্য এখানে যদি আপনি কোনও সাধারণ সফ্টওয়্যারটির জন্য খুব বেশি জটিলতা না চান।


আপনার ইনপুট ভিন্সের জন্য ধন্যবাদ মুল বক্তব্যটি হ'ল আপনার যখন একটি সমৃদ্ধ ডোমেন থাকে তখন আপনাকে কোনও পরিষেবা স্তর লাগবে না। আচরণের জন্য দায়বদ্ধ একমাত্র শ্রেণি এবং এটি আপনার ডোমেন সত্তা। অন্যান্য স্তরগুলি (ওয়েব স্তর, ইউআই ইত্যাদি ...) সাধারণত ডিটিও, এবং ভিউমোডেলগুলি নিয়ে কাজ করে এবং এটি ঠিক আছে। ডোমেন মডেলটি হল ডোমেনকে মডেল করা, ইউআই কাজ না করা বা ইন্টারনেট জুড়ে বার্তা প্রেরণ করা। আপনার বার্তাটি এই সাধারণ ভ্রান্ত ধারণাকে প্রতিবিম্বিত করে, যা এ থেকে আসে যে লোকে কেবল তাদের নকশায় কীভাবে ওওপি ফিট করতে পারে তা জানে না। এবং আমি মনে করি এটি অত্যন্ত দুঃখজনক - তাদের জন্য।
tobiak777

আমি মনে করি না যে আমি সমৃদ্ধ ডোমেন ওওপি-র একটি ভুল ধারণা রয়েছে, আমি সেভাবে প্রচুর সটওয়ার তৈরি করেছি এবং এটি সত্য যে এটি রক্ষণাবেক্ষণ / বিবর্তনের জন্য খুব ভাল। তবে আমি আপনাকে জানাতে দুঃখিত যে এটি কোনও রূপালী বুলেট নয়।
ভিন্স

আমি এটা বলছি না। একটি সংকলক লেখার জন্য এটি সম্ভবত নয়, তবে বেশিরভাগ ব্যবসায় / সাস অ্যাপ্লিকেশনগুলির জন্য, আমি মনে করি এটি আপনি যে পরামর্শ দেন তার চেয়ে কম শিল্প / বিজ্ঞান। ডোমেন মডেলটির প্রয়োজনীয়তা গাণিতিকভাবে প্রমাণিত হতে পারে, আপনার উদাহরণগুলি আমাকে
ওওপিতে

0

আপনি উভয়ই ডেটা উপস্থাপন করছেন এবং একই শ্রেণিতে যুক্তি প্রদর্শন করছেন বলে আপনি একক দায়িত্বের নীতি (এসআরপি) লঙ্ঘন করছেন।

এটি আমার পক্ষে খুব যুক্তিসঙ্গত মনে হচ্ছে। কোনও পদক্ষেপ প্রকাশ করলে মডেলটির সর্বজনীন সম্পত্তি থাকতে পারে না। এটি মূলত একটি কমান্ড-কোয়েরি পৃথককরণ ধারণা। দয়া করে নোট করুন যে কমান্ডের নিশ্চিতভাবে ব্যক্তিগত রাষ্ট্র থাকবে।


0

আপনি একক দায়িত্বের নীতি লঙ্ঘন করতে পারবেন না কারণ এটি প্রকৃতির নিয়ম নয়, কেবল একটি মর্যাদাপূর্ণ মানদণ্ড। বৈজ্ঞানিকভাবে শোনানো নাম এবং বড় হাতের অক্ষর দ্বারা বিভ্রান্ত হবেন না।


1
এটি খুব কমই সত্যিকারের উত্তর, তবে প্রশ্নের মন্তব্যে এটি দুর্দান্ত হত।
জে এলস্টন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.