নির্ভরতা-ইনজেকশন ফ্রেমওয়ার্কের বাইরে, নির্ভরতা ইনজেকশন (কনস্ট্রাক্টর ইনজেকশন বা সেটার ইনজেকশনের মাধ্যমে) খুব প্রায় শূন্য-সমীনের একটি খেলা: আপনি অবজেক্ট এ এবং এর নির্ভরতা বিয়ের মধ্যে সংযোগ হ্রাস করেন, তবে এখন যে কোনও অবজেক্টের জন্য এ এর উদাহরণ প্রয়োজন তার এখন অবশ্যই আবশ্যক এছাড়াও অবজেক্ট বি নির্মাণ করুন।
আপনি A এবং B এর মধ্যে সংযোগ সামান্য হ্রাস করেছেন, কিন্তু A এর এনক্যাপসুলেশন হ্রাস করেছেন এবং A এবং যে কোনও শ্রেণির মধ্যে A এর উদাহরণ তৈরি করতে হবে এমন সংযোগকে আরও বাড়িয়েছেন, পাশাপাশি এ এর নির্ভরতার সাথে সংযুক্ত করে।
সুতরাং নির্ভরতা ইনজেকশন (ফ্রেমওয়ার্ক ছাড়াই) প্রায় সমান ক্ষতিকারক যেমন এটি সহায়ক।
অতিরিক্ত ব্যয় প্রায়শই সহজেই ন্যায়সঙ্গত হয়, তবে: ক্লায়েন্ট কোড যদি অবজেক্টের নিজের তুলনায় নির্ভরতা কীভাবে তৈরি করতে হয় তা আরও জানতে পারে, তবে নির্ভরতা ইনজেকশন সত্যই মিলনকে কমিয়ে দেয়; উদাহরণস্বরূপ, কোনও স্ক্যানার কীভাবে ইনপুটটি পার্স করতে কোনও ইনপুট স্ট্রিম অর্জন করতে বা নির্মাণ করতে যায় না, বা ক্লায়েন্ট কোডটি কোন উত্স থেকে ইনপুট পার্স করতে চায় তাই কোনও ইনপুট স্ট্রিমের কনস্ট্রাক্টর ইনজেকশনই সুস্পষ্ট সমাধান।
মক নির্ভরতা ব্যবহার করতে সক্ষম হওয়ার জন্য টেস্টিং অন্য যুক্তিযুক্ত। এর অর্থ হওয়া উচিত কেবলমাত্র পরীক্ষার জন্য ব্যবহৃত অতিরিক্ত কন্সট্রাক্টর যুক্ত করা যা নির্ভরতাগুলিকে ইনজেকশনের অনুমতি দেয়: আপনি যদি পরিবর্তে আপনার কনস্ট্রাক্টরগুলিকে সর্বদা নির্ভরতা ইনজেকশনের প্রয়োজন হয়, হঠাৎ করে, আপনার নির্মাণের জন্য আপনার নির্ভরতাগুলির 'নির্ভরতা' নির্ভরতা সম্পর্কে জানতে হবে সরাসরি নির্ভরতা, এবং আপনি কোনও কাজ করতে পারবেন না।
এটি সহায়ক হতে পারে তবে প্রতিটি নির্ভরতার জন্য আপনাকে অবশ্যই নিজেকে জিজ্ঞাসা করা উচিত, পরীক্ষার সুবিধাটি কি মূল্য হিসাবে মূল্যবান এবং আমি কি পরীক্ষার সময় এই নির্ভরতাটিকে সত্যই উপহাস করতে চাই?
যখন নির্ভরতা-ইনজেকশন কাঠামো যুক্ত করা হয়, এবং নির্ভরতা তৈরির বিষয়টি ক্লায়েন্ট কোডগুলিতে নয় বরং পরিবর্তিত ফ্রেমওয়ার্কে অর্পিত হয়, তখন ব্যয় / উপকার বিশ্লেষণ ব্যাপকভাবে পরিবর্তিত হয়।
নির্ভরতা-ইনজেকশন কাঠামোটিতে, ট্রেড অফগুলি কিছুটা আলাদা; নির্ভরতা ইনজেকশনের মাধ্যমে আপনি যা হারাচ্ছেন তা হ'ল আপনি কী বাস্তবায়নের উপর নির্ভর করছেন তা সহজেই জানার ক্ষমতা এবং আপনি কোন স্বয়ংক্রিয় রেজোলিউশন প্রক্রিয়াতে নির্ভর করছেন আপনি কোন নির্ভরতা নির্ভর করছেন তা নির্ধারণের জন্য দায়িত্ব পরিবর্তন করা (উদাহরণস্বরূপ যদি আমাদের একটি @ ইনজেকশনযুক্ত ফু প্রয়োজন হয়) , এমন কিছু অবশ্যই থাকতে হবে যা @ প্রদত্ত ফু, এবং যার ইনজেকশন নির্ভরতা উপলব্ধ রয়েছে), বা কিছু উচ্চ-স্তরের কনফিগারেশন ফাইল যা প্রতিটি সংস্থার জন্য কোন সরবরাহকারীর ব্যবহার করা উচিত তা নির্ধারণ করে দেয়, বা দুটি সংকর সংখ্যায় (উদাহরণস্বরূপ, সেখানে থাকতে পারে) নির্ভরতাগুলির জন্য একটি স্বয়ংক্রিয় রেজোলিউশন প্রক্রিয়া হোন যা একটি কনফিগারেশন ফাইল ব্যবহার করে ওভাররাইড করা যেতে পারে, যদি প্রয়োজন হয়)।
কনস্ট্রাক্টর ইনজেকশন হিসাবে, আমি মনে করি যে এটি করার সুবিধাটি আবার শেষ হয়েছে, এটি করার ব্যয়ের সাথে খুব একই রকম: আপনি যে ডেটা নির্ভর করছেন তার ডেটা কে সরবরাহ করছে এবং আপনার যদি একাধিক সম্ভাবনা থাকে তবে আপনাকে জানতে হবে না সরবরাহকারীগণ, আপনাকে সরবরাহকারীর জন্য চেক করার জন্য পছন্দসই আদেশ জানতে হবে না, প্রতিটি সম্ভাব্য সরবরাহকারী ইত্যাদির জন্য প্রয়োজনীয় তথ্যের জন্য প্রয়োজনীয় প্রতিটি অবস্থান ইত্যাদি নিশ্চিত করুন, কারণ এগুলি সমস্ত নির্ভরতা ইনজেকশন দ্বারা একটি উচ্চ স্তরে পরিচালিত হয় প্ল্যাটফর্ম।
যদিও আমার ব্যক্তিগতভাবে ডিআই ফ্রেমওয়ার্কগুলির সাথে প্রচুর অভিজ্ঞতা নেই তবে আমার ধারণাটি হ'ল তারা ব্যয়ের চেয়ে আরও বেশি সুবিধা প্রদান করে যখন আপনার প্রয়োজনীয় ডেটা বা পরিষেবাটির সঠিক সরবরাহকারীর সন্ধানের মাথা ব্যথা মাথা ব্যথার চেয়ে বেশি হয়, যখন কোনও কিছু ব্যর্থ হয়, তাৎক্ষণিকভাবে স্থানীয়ভাবে না জানা কী কোডটি আপনার কোডটিতে পরবর্তীকালে ব্যর্থতার কারণ হিসাবে খারাপ ডেটা সরবরাহ করেছিল provided
কিছু ক্ষেত্রে, অন্যান্য প্যাটার্নগুলি যেগুলি অস্পষ্ট নির্ভরতা (উদাহরণস্বরূপ পরিষেবা লোকেটারগুলি) ইতিমধ্যে গ্রহণ করা হয়েছিল (এবং সম্ভবত তাদের যোগ্যতার প্রমাণও দেওয়া হয়েছিল) যখন দৃশ্যে ডিআই ফ্রেমওয়ার্কগুলি উপস্থিত হয়েছিল এবং ডিআই ফ্রেমওয়ার্কগুলি গ্রহণ করা হয়েছিল কারণ তারা কিছু প্রতিযোগিতামূলক সুবিধা দেয় যেমন প্রয়োজনীয় কম বয়লারপ্লেট কোড বা সম্ভাব্যত নির্ভরতা সরবরাহকারীকে অস্পষ্ট করার জন্য কম কাজ করার সময় যখন কোন সরবরাহকারী আসলে ব্যবহার করছেন তা নির্ধারণ করা প্রয়োজন হয়ে পড়ে becomes