অ্যাফেরেন্ট / অ্যাফেরেন্ট মিলন কখন ভাল বা খারাপ


11

আমার কাছে এই সপ্তাহে একটি সফ্টওয়্যার নিদর্শন পরীক্ষা আছে এবং আমরা যে বিষয়গুলির বিষয়ে পড়াশোনা করব তার মধ্যে একটি হল এফেরেন্ট এবং এফেরেন্ট কাপলিং।

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

উদাহরণ স্বরূপ:

class Car{
    Engine engine;
    Wheel wheel;
    Body body;
}

এই শ্রেণীর একটি উচ্চ প্রসারণযুক্ত মিলন হবে কারণ এটি ইঞ্জিন, চাকা এবং শারীরিক ধরণের উপর নির্ভর করে।

অন্য কয়েকটি প্যাকেজ (গাড়ি, বিমান, সাইকেল) এর উপর নির্ভর করে যদি "হুইল" ধরণের একটি উচ্চ সিএ (অ্যাফেরেন্ট কাপলিং) থাকে have

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

যখন কখন / উচ্চ উত্তেজক বা অভিজাত যুগল ভাল / খারাপ এর কারও উদাহরণ আছে কি ??

ধন্যবাদ!


4
যদি কেবল তারা আরও বিভ্রান্তিকর শর্তগুলি বেছে নিয়েছিল যা আরও একই রকম
শোনায়

উত্তর:


11

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

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

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


5

সাধারণতায় কথা বলা, আলগা দম্পতি:

ধনাত্মক : সিস্টেমের কোনও অংশের উপর নির্ভর করে এমন কিছু পরিবর্তনের হাত থেকে রক্ষা করে (afferent coupling)

নেতিবাচক : সম্পর্ক বুঝতে আরও কঠিন হতে পারে

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

বিবেচনা করুন যে ডাব্লুএস * এর কিছু জটিলতা এইচটিটিপি থেকে একটি প্রোটোকল হিসাবে হ্রাস পেয়েছে।


স্মার্ট উত্তর, তবে আমি দেখতে পাচ্ছি না যে এটি প্রশ্নের সাথে কীভাবে সম্পর্কিত, যা অভিজাত / অভিজাত কাপলিং সম্পর্কে এবং টাইট / লুজ কাপলিংয়ের বিষয়ে নয়।
lbalazscs

আপনি সঠিক, @ লেব্লাজস্কস। প্রশ্নের উত্তর না দিয়ে কেন আমি সাড়া দিলাম জানিনা!
জয়রেনেট

1

অন্তর্বাহ

যদি কোনও কিছু বিভিন্ন সামগ্রীর (গুচ্ছ সংখ্যক সম্মিলিত সংখ্যক সংখ্যক) গোছা ব্যবহার করে তবে সেই জিনিসগুলির কোনও পরিবর্তন হলে তা ভাঙার প্রবণতা হতে পারে।

অস্থিরতা = 1

এখানে চিত্র বর্ণনা লিখুন

বহির্মুখ

যদি কিছু কিছু জিনিস বিভিন্ন গুচ্ছ দ্বারা ব্যবহার করা হয় (প্রচুর পরিমাণে অভিজাত কাপলিং), তবে এটি পরিবর্তিত হলে এটি অনেক কিছু ভাঙার প্রবণতা হতে পারে।

অস্থিরতা = 0

এখানে চিত্র বর্ণনা লিখুন

স্থায়িত্ব

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

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

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

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

স্থিতিশীল বিমূর্তি নীতি

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

পুনরায় ব্যবহারযোগ্যতা বনাম পুনরায় ব্যবহার use

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

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

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