নির্ভরশীল ইনজেকশন কীভাবে মিলন বাড়ায়?


32

নির্ভরতা ইনজেকশন সম্পর্কিত উইকিপিডিয়া পৃষ্ঠায় , অসুবিধাগুলি বিভাগটি এটি আমাদের বলে:

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

নির্ভরতা ইনজেকশন বিরুদ্ধে একটি নিবন্ধ লিঙ্ক সহ ।

নির্ভরতা ইনজেকশন একটি শ্রেণিকে কংক্রিট বাস্তবায়নের পরিবর্তে ইন্টারফেসটি ব্যবহার করে। এর ফলে মিলন কমে যাবে , না?

আমি কী মিস করছি? ক্লাসের মধ্যে নির্ভরতা ইনজেকশন কীভাবে সংযোজন বাড়ছে?


2
এই অসুবিধাগুলির তালিকাটি কে লিখেছেন তা আমি নিশ্চিত নই, তবে আমি এটি লবণের দানা দিয়ে নিয়েছি। উদাহরণস্বরূপ, আমি ডিআই দেখেছি যে একটি টন রিডান্ট্যান্ট সেট-আপ কোড বাদ দিয়ে একটি কোড বেসের আকার 2/3 কমিয়ে আনা যায়।
রব

@ রবি আমি বেশিরভাগ নির্ভরতা ইনজেকশন করার জন্য কারখানাটি ব্যবহার করেছিলাম এবং আমার অভিজ্ঞতা হ'ল এটি কোডের আকার বাড়ায় তবে পরীক্ষাকে সহজ করে তোলে।
বি

রেজিস্ট্রি বা কনটেক্সট পাসিং এর মতো বিকল্প ব্যবহার করার চেষ্টা করুন;) অথবা অন্য কোড যা কেবলমাত্র বস্তুগুলিকে ইনস্ট্যান্ট করে এবং তারপরে কনফিগারেশন থেকে তাদের বৈশিষ্ট্যগুলি টান দেয়। প্রধানত, আমি এখন এবং 15 বছর আগের পার্থক্য সম্পর্কে কথা বলছি।
রব

সম্পর্কিত: স্ট্যাকওভারফ্লো . com / a / 9503612 / 264697 । মার্ক সিম্যানের উত্তরটি কীভাবে নির্ভরশীল ইনজেকশন ব্যবহার করে সামগ্রিক সংযোগটি হ্রাস করা যায় তা ব্যাখ্যা করে।
স্টিভেন

উত্তর:


42

তো, আমি কী মিস করছি?

নির্ভরতা ইনজেকশন একটি শ্রেণি এবং তার নির্ভরতার মধ্যে সংযোগ হ্রাস করে। তবে এটি একটি শ্রেণি এবং তার গ্রাহকের মধ্যে সংযোগ বৃদ্ধি করে (যেহেতু গ্রাহক এটি তৈরি করতে আরও তথ্যের প্রয়োজন হয়) এবং নির্ভরতা এবং তার গ্রাহক (যেহেতু ভোক্তাকে ব্যবহারের নির্ভরতা জানতে হবে)।

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


ঠিক আছে, মিলন একভাবে হ্রাস পেয়েছে এবং অন্যভাবে বেড়েছে increased
পল ড্রাগন

কিন্তু ভোক্তা এটি তৈরি করে না; এটা বরং বিন্দু।
কেসি

@ এমডেন্ড্রোকেট - এহ? নিয়ন্ত্রণের বিপরীতে গ্রাহকরা এটি তৈরি করতে দেয় না। নির্ভরতা ইনজেকশন এটি অরথোগোনাল।
তেলস্তিন

ঠিক আছে, আপনি একটি পার্থক্য তৈরি করছেন যার সাথে আমি পরিচিত নই, যেহেতু সাধারণত পদগুলি বিনিময়যোগ্যভাবে ব্যবহৃত হয়।
কেসি

22

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

নির্ভরতা ইনজেকশন সহ, মিলন Sএবং Dআলগা হয়ে যায়, কারণ আপনি Sকীভাবে এটি তৈরি করবেন তা জ্ঞান থেকে সরিয়ে দেন DSএটি কীভাবে ব্যবহার করতে হয় তা কেবল জানতে হবে। ক্রমবর্ধমান সামগ্রিক সংযোজনটি এই বাস্তবতা থেকে আসে যে সিস্টেমের অন্যান্য অংশগুলিকে এখন Dকীভাবে এটি তৈরি করা যায় তা সম্পর্কে এবং সম্ভবত জানা দরকার । সংযুক্তির এই বৃদ্ধির পরিমাণ নির্ভর করে কীভাবে এর উপর নির্ভরতা Dইনজেকশনের উপর নির্ভর করে S:

  • কনস্ট্রাক্টর ইনজেকশন সহ স্রষ্টার Sউপর নির্ভরতা Dএবং সম্ভবত কীভাবে এটি তৈরি করতে হয় তার প্রয়োজন।
  • সঙ্গে পদ্ধতি পর্যায়ের ইনজেকশন , একটি পদ্ধতি প্রতিটি আহ্বানকারী Sযার মাধ্যমে Dইনজেকশনের পরার প্রয়োজনের উপর নির্ভরশীলতার Dএবং সম্ভবত জ্ঞান কিভাবে একটি তৈরি করতে।

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


ঠিক আছে, এটি কনস্ট্রাক্টর এবং সেটার ইঞ্জেকশনটির জন্য অর্থবোধ করে। তবে যদি কেউ কারখানা বা কৌশলের প্যাটার্ন ব্যবহার করে তবে সৃষ্টিটি সেখানে স্থানান্তরিত হয় এবং শ্রেণি কেবল ইনজেকশনযুক্ত বস্তু ব্যবহার করে। বা, এটি কি কোনও নির্ভরতা ইঞ্জেকশন নয় (কেবলমাত্র নিয়ন্ত্রণের বিপরীত)?
BЈовић

এমনকি কারখানার ইনজেকশন সহ, স্রষ্টাকে Sএকটি কারখানা সরবরাহ করতে হবে Dযার অর্থ এটি Sব্যবহার করা D(বা এটির অন্তত কিছু ইন্টারফেস) ব্যবহার করা উচিত know
ইদান আরে

7

আমি দৃ strongly়ভাবে একমত নই যে এটি মিলন বাড়িয়ে তোলে।

নির্ভরতা ইনজেকশন ছাড়াই আপনার একটি উপ-সিস্টেম এবং নির্ভরতার কংক্রিট বাস্তবায়নের মধ্যে দৃ tight় সংযোগ রয়েছে।

নির্ভরতা ইনজেকশন সহ আপনি সাব-সিস্টেমটিকে নির্ভরতার বাস্তবায়ন থেকে ডিকপল করেছেন।

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

কনস্ট্রাক্টর ইনজেকশন:

নির্ভরতা রেজোলিউশন নির্ভরতা ইনজেকশন ধারক বা কারখানা দ্বারা পরিচালিত হয়। গ্রাহক নির্ভরতা ইনজেকশন ধারক বা কারখানা থেকে সাব সিস্টেমের একটি কংক্রিট বাস্তবায়ন পেতে পারেন।

উপ-সিস্টেমটির নির্মাতা এমনকি দেখতে কেমন তা ভোক্তারও জানার দরকার নেই। সাব সিস্টেম নির্ভরতার সাথে কোনও মিলন নেই।

পদ্ধতি ইনজেকশন:

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

একটি সাব সিস্টেমে নির্ভরতা ইনজেকশনের জন্য টিএল; ডিআর সবচেয়ে খারাপ ক্ষেত্রে হ'ল এই সংযোগটি ভোক্তা কোডে স্থানান্তরিত হয়। এই দম্পতিতে কোনও অতিরিক্ত বৃদ্ধি নেই।

সেরা ক্ষেত্রে হ'ল সমস্ত সিস্টেম এখন আলগাভাবে মিলিত হয় এবং নির্ভরতা ইঞ্জেকশন পাত্রে বা কারখানার মাধ্যমে নির্ভরতা ইনজেকশন নিয়ন্ত্রণ করা হয়।

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