একক দায়িত্বের নীতি এবং উদ্বেগ পৃথককরণের মধ্যে পার্থক্য কী


19

ক) এসআরপি এবং এসসির মধ্যে পার্থক্য কী ? সম্ভবত যে SRP , বর্গ পর্যায়ে প্রয়োগ করা হয় যখন SoC এ প্রয়োগ করা যেতে পারে সিস্টেম , সাব-সিস্টেম , মডিউল , বর্গ বা ফাংশন মাত্রা।

খ) যদি উত্তর ক) হ্যাঁ, হয় তাহলে SoC এ প্রয়োগ বর্গ স্তর জন্য একটি প্রতিশব্দ SRP ?

ধন্যবাদ

উত্তর:


13

একক দায়িত্বের নীতিটি আপনার কোডটি সম্পর্কে কেবল 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পদ্ধতিতে রাখা উচিত তবে আপনি বিতর্ক করতে পারেন । এটি আপনার নিজের জন্য সিদ্ধান্ত নেওয়া উচিত। আমার কাছে মনে হচ্ছে এই পদ্ধতিটি খুব বেশি স্টাফ করছে।


"জেবি কিংয়ের উত্তরে পুরো পোস্টটি পড়ার পরে, আমি মনে করি এটিও একটি ভাল পোস্ট।" তবে জেবি কিংয়ের উত্তরটি আপনার উত্তরের বিপরীতে দাবি করছে - যথা,
এসসিও

2

যেমন এসআরপি কেবলমাত্র শ্রেণির স্তরে প্রয়োগ করা হয়, তাঁর রবার্ট সি মার্টিন বইগুলিতে (যতদূর আমি জানি তিনি ধারণাটি সামনে না এলে জনপ্রিয় করেছেন) লিখেছেন:

পরিষ্কার কোড, পৃষ্ঠা। 138 : "একক দায়িত্বের নীতি (এসআরপি) বলেছে যে কোনও শ্রেণি বা মডিউলের পরিবর্তনের কারণ থাকতে হবে এবং তার মধ্যে একটিও হওয়া উচিত" "

সি #, পৃষ্ঠা 116 তে চৌকস নীতিগুলি, প্যাটার্নস এবং অভ্যাসগুলিতে : "[...] এবং সেই বাহিনীর সাথে সংযোগ স্থাপন করে যা মডিউল , বা শ্রেণীর পরিবর্তনের কারণ হয়ে থাকে।"

জোর আমার।

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

আপনার কারণে আপনার পরামর্শ অনুসারে আমি ক্লাস পর্যায়ে এসআরপিকে এসওসি হিসাবে যোগ্যতা অর্জন করব না।


সুতরাং যদি আমরা ধরে নিই যে এসআরপিও উচ্চতর স্তরে প্রয়োগ করা যেতে পারে, তবে এসআরপি এবং এসসির মধ্যে পার্থক্যটি হল যে এসআরপির একক দায়িত্ব থাকে, যখন এসসির ঘনিষ্ঠভাবে সম্পর্কিত একটি সেট থাকতে পারে?
ব্যবহারকারী 1483278

@ ব্যবহারকারী 1483278: ভাল আমি এসআরপির সাথে খুব পরিচিত কিন্তু এই প্রশ্নটি পড়ার সময় আমি প্রথমে এসসির কথা শুনেছি তাই আমি আপনার মন্তব্যে প্রশ্নের উত্তর দিতে পারি না। শব্দার্থবিজ্ঞান থেকে মনে হয় এসআরপি 1 টি দায়বদ্ধতা এবং এসসিসি পৃথকীকরণের উদ্বেগ সম্পর্কে রয়েছে, আমি জানি এটি একটি পেডেন্টিক উত্তর তবে প্রয়োগের ক্ষেত্রে নীতিগুলি একইরকম ফলাফল দেয়।
গিলস

0

এখানে আপনি একটি সংক্ষিপ্ত ভিডিও খুঁজে পেতে পারেন যা পরিষ্কারভাবে এই পরিভাষাগুলির মধ্যে পার্থক্য ব্যাখ্যা করে। https://www.youtube.com/watch?v=C7hkrV1oaSY

উদ্বেগের বিচ্ছেদ (এসসি)। আপনার অ্যাপ্লিকেশনটিকে স্বতন্ত্র বৈশিষ্ট্যে বিভক্ত করুন যথাসম্ভব কার্যকারিতা হিসাবে সামান্য ওভারল্যাপ দিয়ে। (মাইক্রোসফট)।

"উদ্বেগ" = "স্বতন্ত্র বৈশিষ্ট্য" = "স্বতন্ত্র বিভাগ"

"উদ্বেগ" উচ্চ এবং নিম্ন স্তরের উভয় ক্ষেত্রেই কাজ করে

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

"দায়বদ্ধতা" = "পরিবর্তনের কারণ"

কি পরিবর্তন? "সফ্টওয়্যার দ্বারা সরবরাহকৃত কার্যকারিতার একটি অংশ" = বেসিক ইউনিট

উপসংহার

একক দায়িত্বের নীতিটি বেসিক ইউনিটগুলিতে কাজ করে -> নিম্ন স্তরে কাজ করে

উদ্বেগ পৃথকীকরণ উভয় উচ্চ এবং নিম্ন স্তরে কাজ করে

উদ্বেগ পৃথক করার জন্য এসআরপি এবং এসসি একসঙ্গে কাজ করে। নিম্ন স্তরে এগুলি হুবহু এক


0

এই নীতিগুলি সম্পর্কে আমার বোঝার জন্য এখানে।

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

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

এছাড়াও আমি এই নীতিগুলি আমার ব্লগ পোস্টে আরও বিশদ বিবরণে বর্ণনা করেছি, দয়া করে একবার দেখুন।

https://crosp.net/blog/software-architecture/srp-soc-android-settings-example/

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