কোনও শ্রেণি একক দায়িত্বের নীতিটি পূরণ করে কিনা তা কীভাবে নির্ধারণ করবেন?


34

একক দায়িত্ব নীতি উচ্চ সংহতি নীতি উপর ভিত্তি করে। উভয়ের মধ্যে পার্থক্য হ'ল একটি অত্যন্ত সম্মিলিত শ্রেণীতে এমন একাধিক দায়িত্বের বৈশিষ্ট্য উপস্থিত রয়েছে যা দৃ strongly়ভাবে সম্পর্কিত, যখন এসআরপি মেনে চলা ক্লাসগুলির কেবল একটি দায়িত্ব রয়েছে।

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



উত্তর:


21

কেন হ্যাঁ এটি খুব সাবজেক্টিভ এবং এটি অনেক উত্তপ্ত, লাল-মুখোমুখি বিতর্কের বিষয় যা প্রোগ্রামাররা intoুকে পড়ে।

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

আমি দিতে পারি শুধুমাত্র পরামর্শ সম্পর্কে এটি: আপনার (এবং আপনার সহকর্মীদের) সেরা রায় ব্যবহার করুন judgment এবং মনে রাখবেন যে ভুলগুলি শীঘ্রই ধরা পড়লে (সাধারণত) সংশোধন করা যায়।


আমি আশা করি কম্পিউটার বিজ্ঞানটি প্রকৃত বিজ্ঞানের মতোই ছিল। প্রকৃত বিজ্ঞানে সাবজেক্টিভিটির কোনও স্থান নেই। SOLID নীতিগুলি তাদের নিজস্বভাবে ঠিক থাকলেও তাদের সাবজেক্টিভিটি হ্রাস করতে এবং বস্তুনিষ্ঠতা সর্বাধিকতর করার জন্য তাদের পুনরাবৃত্তি করা দরকার। এটি এখনও ঘটেনি, যা আমাকে সত্যিকারের বিশ্বে তাদের বৈধতা নিয়ে প্রশ্ন তোলে।
ডার্কনিউরন

13

বোল মার্টিন (আঙ্কেল বব), যিনি এসআরপি প্রথম যে সোলিড নীতিগুলির উদ্ভব করেছিলেন তিনি এ সম্পর্কে বলেছেন (আমি প্যারাফ্রেস করছি, প্রকৃত শব্দগুলি মনে করতে পারি না):

একটি শ্রেণীর পরিবর্তনের কেবল একটি কারণ থাকতে হবে

যদি এর একাধিক কারণ থাকে তবে তা এসআরপিকে মানায় না।


14
এটি কেবল সংজ্ঞাটি সত্যই পুনরাবৃত্তি করছে তবে আসলে এসআরপি মেনে চলা এখনও বেশ বিষয়ভিত্তিক।
অ্যান্ডি

7

আমি আপনাকে থাম্বের বিভিন্ন বিধি দিতে পারি।

  • ক্লাসের নামকরণ করা কতটা সহজ? যদি কোনও শ্রেণীর নামকরণ করা কঠিন হয় তবে এটি সম্ভবত খুব বেশি করছে।
  • শ্রেণীর কতগুলি পাবলিক পদ্ধতি রয়েছে? 7 +/- 2 থাম্বের একটি ভাল নিয়ম। শ্রেণীর যদি এর চেয়ে বেশি থাকে, তবে আপনাকে এটি বিভিন্ন শ্রেণিতে বিভক্ত করার কথা ভাবা উচিত।
  • স্বতন্ত্র প্রসঙ্গে ব্যবহৃত পাবলিক পদ্ধতির সমন্বিত গোষ্ঠীগুলি কি রয়েছে?
  • কয়টি ব্যক্তিগত পদ্ধতি বা ডেটা সদস্য রয়েছে? যদি শ্রেণীর একটি জটিল অভ্যন্তরীণ কাঠামো থাকে তবে আপনার সম্ভবত এটির চুল্লী তৈরি করা উচিত যাতে ইন্টার্নালগুলি পৃথক ছোট ছোট শ্রেণিতে প্যাকেজ হয়।
  • এবং থাম্বের সহজতম নিয়ম: শ্রেণিটি কত বড়? আপনার যদি একটি সি ++ শিরোলেখ ফাইল থাকে যা একক শ্রেণিতে থাকে যা কয়েকশ লাইনের বেশি লম্বা থাকে তবে আপনার সম্ভবত এটি বিভক্ত হওয়া উচিত।

2
আপনার দ্বিতীয় বিষয় সম্পর্কে, দেখুন uxmyths.com/post/931925744/…
ক্যামেরন মার্টিন

7
7 +/- 2 সম্পর্কে দৃ strongly়ভাবে অসম্মতি - একক দায়িত্বের নীতিটি সিমেন্টিক সংহতি সম্পর্কিত, স্বেচ্ছাসেবী সংখ্যার বিষয়ে নয়।
জ্যাকবিবি

1
থাম্বসের বিধি স্বতন্ত্র বৈজ্ঞানিক প্রমাণের প্রয়োজন হয় না। আধুনিক বৈজ্ঞানিক পদ্ধতিটি বহু শতাব্দী প্রাচীন, স্থাপত্য এবং প্রকৌশল হাজার বছরের পুরানো len পাবলিক পদ্ধতির জন্য থাম্বের নিয়ম "বেশ কয়েকটি" এবং পরামিতির কোনওটি "কয়েকটি" নয়। অন্যান্য খবরে, যদিও কিছু বাচ্চার আঁকাগুলি দেখায় অন্যথায় মানুষের হাত তাদের মাথা থেকে বের হয় না [উদ্ধৃতি প্রয়োজন]।
আবুজিটিন গিলিফিরকা

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

6

একক দায়িত্বের নীতিমালা বলছে যে প্রতিটি সফ্টওয়্যার মডিউল পরিবর্তনের একমাত্র কারণ থাকতে হবে। সাম্প্রতিক একটি নিবন্ধে আঙ্কেল বব "পরিবর্তনের কারণ" ব্যাখ্যা করেছিলেন,

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

তিনি ধারণাটি আরও এখানে উদাহরণ সহ ব্যাখ্যা করলেন ।


এটি একটি দুর্দান্ত নিবন্ধ, নিজেই লিখেছেন।
মিঃ ডাস্টপ্যান

4

এর উত্তরের জন্য, একধাপ পিছনে যান এবং একক দায়িত্বের নীতিটির উদ্দেশ্য বিবেচনা করুন । এটি কেন প্রথমে প্রস্তাবিত নকশার নীতি?

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

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

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


2

ওও বলেছে যে ক্লাসগুলি ডেটাগুলির একটি কার্যকারিতা group এই সংজ্ঞাটি সাবজেক্টিভ ব্যাখ্যার জন্য প্রচুর জায়গা ছেড়ে দেয়।

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

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

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


1

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

এই শ্রেণীর কয়েকটি বেসরকারী সদস্য রয়েছেন যা JUCE যে বিশেষ গাদা ব্যবহার করে তা স্থান বরাদ্দ দেওয়ার জন্য ব্যবহৃত হয়।

তবে এটিই অডিওসাম্পলবার্লার অনুপস্থিত (এবং এটি সম্পর্কে জুলসের সাথে আমার বেশ কয়েকটি আলোচনা হয়েছে): একজন সদস্য ডেকেছিলেন SampleRate। এটা কীভাবে মিস করা যায়?

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

তবে আপনাকে যা করতে হবে তা হ'ল এই স্যাম্পলরেটটি চালিয়ে যাওয়া, যা সর্বত্র সর্বত্র অডিওসাম্পলবারে নির্দিষ্ট অডিওর অন্তর্নিহিত। আমি এমন কোড দেখেছি যেখানে একটি ক্রমাগত 44100.0f একটি ফাংশনে পাস করা হয়েছিল, কারণ প্রোগ্রামারটি অন্য কি করতে হবে বলে মনে হয় নি।

এটি তার একক দায়িত্ব পালনে ব্যর্থ হওয়ার উদাহরণ।


1

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

অন্য উপায় হ'ল ওওপির খাঁটি বেসিকগুলি - আসল বস্তুর পরে মডেল। আসল বস্তুর দায়বদ্ধতা দেখতে এটি আরও অনেক সহজ। তবে, যদি সত্যিকারের বস্তুটি খুব জটিল হয় তবে এটিকে একাধিক সংঘবদ্ধ বস্তুতে ভাঙ্গা প্রতিটিটির নিজস্ব দায়িত্ব রয়েছে responsibility

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