নির্ভরতা বিপরীতমুখী নীতি: কীভাবে অন্যান্য ব্যক্তির কাছে "উচ্চ-স্তরের নীতি" এবং "নিম্ন-স্তরের বিশদ" সংজ্ঞায়িত করা যায়?


13

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

উত্তর:


11

দ্রষ্টব্য: এটি আমার পূর্ববর্তী উদাহরণ থেকে সম্পূর্ণরূপে আবার লিখিত হয়েছে

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

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

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

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

এটি নির্ভরতা বিপরীতকরণের একটি নিখুঁত উদাহরণ।

তবে এখানে আকর্ষণীয় কিছু রয়েছে: আমি প্রথমে যা বলেছিলাম তাতে ফিরে যান। "আপনি কোথা থেকে বিদ্যুৎ পাবেন তা বিবেচ্য নয়।" এটি একটি বাস্তবায়ন বিশদও। উচ্চ-স্তরের নীতিটি এখনও যে সমস্ত পাওয়ার সকেটগুলি একই আকার এবং একই ধরণের পাওয়ার নির্গত হয়। নিম্ন-স্তরের বাস্তবায়ন বিশদটি কোথায় বিদ্যুৎ আসে এবং এটি কী চলে runs

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

অ্যাডাপ্টারগুলি বিভিন্ন নীতিমালার ক্ষেত্রে একই প্রয়োগের জন্য ফিট করতে ব্যবহৃত হতে পারে।


+1 ক্রিকি আমি জানতাম না আমি একটি সাধারণ পাওয়ার সকেট থেকে এত কিছু শিখতে পারি :)
dreza

7

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

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

সুতরাং, "নির্ভরতা বিপর্যয়" নামটি কিছুটা বিভ্রান্তিকর - যেহেতু নির্ভরতাগুলি "বিপরীত" হয় না, তবে পুরোপুরি সরিয়ে ফেলা হয় (বা আরও সুনির্দিষ্টভাবে বলা যায়: মৌমাছি সংগ্রহের সময় নির্ভরতাগুলি রান টাইম নির্ভরতার মধ্যে পরিবর্তিত হয়েছে)।


1
বেশ না। বিপরীতটি ঘটে কারণ নিম্ন স্তরের ইন্টারফেসের উপর নির্ভরতা নেয়। ইন্টারফেস বিভাজন নীতি প্রয়োগ করে (IOL সালে IOL), সেই ইন্টারফেসটি ক্লায়েন্টের সাথে "সম্পর্কিত"। সুতরাং নিম্ন স্তরের রূপক ক্লায়েন্টের উপর নির্ভরতা নেয়।
মাইকেল ব্রাউন

2
@ মাইকব্রাউন: এটি একটি সম্ভাব্য দৃষ্টিভঙ্গি। আমি সেই দৃষ্টিভঙ্গিকেই পছন্দ করি যেখানে ইন্টারফেসটি A বা B এর সাথে নয় তবে এ এবং বি এর পরিকাঠামো বা পরিবেশের সাথে সম্পর্কিত
ডক ব্রাউন

1

আমি ডিআইপি ব্যাখ্যা করার জন্য একটি সাধারণ চিত্র ব্যবহার করি। সফ্টওয়্যার বিকাশের ক্লাসিক দৃশ্যটি প্রতিটি স্তরকে এটি সমর্থন করে এমন নিম্ন স্তরের উপরে বসা একটি নির্মাণ প্রক্রিয়া হিসাবে। ডিপেন্ডেন্সি ইনভার্সন প্রিন্সিপলটি মোবাইল তৈরির মতো।ঝুলন্ত মোবাইল

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


ভাল তুলনা জন্য +1। এই ছবিতে, আপনি আমার বক্তব্যটি দেখতে পাচ্ছেন - সমস্ত স্তর ইন্টারফেসের উপর নির্ভর করে তবে উচ্চ স্তরগুলির উপর বা তদ্বিপরীত নিম্ন স্তরগুলি নয়।
ডক ব্রাউন

আমি দেখছি আপনি কী বলছেন, ইন্টারফেসটি উচ্চতর বা নিম্ন স্তরের নয়।
মাইকেল ব্রাউন

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

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