নির্ভরতা ইঞ্জেকশনের জন্য আমাদের ফ্রেমওয়ার্কগুলি কেন প্রয়োজন? [বন্ধ]


42

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

মনে হচ্ছে এটি মূলত 'আপনার শ্রেণীর সদস্যদের ক্লাসের মধ্যে ইনস্ট্যান্টেশনগুলি ঘোষণা করবেন না' বলে দিচ্ছে। বরং ইনস্ট্যান্টেশনগুলি কনস্ট্রাক্টরের মাধ্যমে পাস করা উচিত; বাইরের উত্স থেকে ক্লাসে 'ইনজেকশনেড'।

যদি এটি এত সহজ, যা এটি মনে হয়, তবে কেন আমাদের বসন্ত বা গুইসের মতো ফ্রেমওয়ার্ক দরকার যা এটিকে টীকাগুলি সহ প্রয়োগ করে? আমি কি এখানে মৌলিক কিছু মিস করছি? নির্ভরতা ইনজেকশন ফ্রেমওয়ার্কগুলির ব্যবহার কী তা বোঝার জন্য আমি সত্যিই লড়াই করছি।

সম্পাদনা: সম্ভাব্য নকল সম্পর্কে, আমি বিশ্বাস করি যে আমার প্রশ্নটি আরও অনন্য কারণ এটি কেবল স্প্রিং নয়, সাধারণভাবে ডিআই ফ্রেমওয়ার্কগুলি সম্পর্কে জিজ্ঞাসা করছে। বসন্ত কেবল একটি ডিআই কাঠামো নয়, তাই অনেকগুলি কারণ রয়েছে যে কেউ স্প্রিংটি ডিআইয়ের সাথে সম্পর্কিত নয় use



11
এগুলি সংকলন সময়ের পরিবর্তে ত্রুটিগুলি রানটাইমে স্থানান্তরিত করতে দরকারী।
ডেন

1
@den আমরা কেন এটি করতে চাই? এটি দ্রুত ব্যর্থ হয়েছে বলে মনে হচ্ছে
এই ব্যবহারকারী

উত্তর:


26

আমাদের ফ্রেমওয়ার্ক দরকার নেই। অপেক্ষাকৃত বড় প্রকল্পের জন্যও নির্ভরযোগ্যতা ইঞ্জেকশনটি ম্যানুয়ালি প্রয়োগ করা সম্পূর্ণভাবে সম্ভব।

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

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


8
মাথার উপর পেরেক আঘাত. আমরা না তাদের প্রয়োজন। এগুলি বড় প্রকল্পগুলির জন্য জীবনকে আরও সহজ করে তোলে। সত্যি বলতে, আমি দেখতে পেয়েছি যে ফ্রেমওয়ার্কগুলি ছোট প্রকল্পগুলির জন্য মূল্যবানদের চেয়ে বেশি ঝামেলাযুক্ত। আমি ওপিকে উত্সাহিত করতাম যে সমর্থনকারী ফ্রেমওয়ার্কগুলির সাথে নির্ভরশীল ইনজেকশনটিকে বিভ্রান্ত না করে।
রাবারডাক

1
ভাল বলেছ. এবং অন্য কেউ ইতিমধ্যে সুন্দর এবং বৃত্তাকার তৈরি করে রাখলে কেন চাকাটিকে পুনর্বহাল করা হবে?
jwenting

একদম ঠিক তাই। ছাড়া আমি কোনো ইনস্ট্যান্স কোড পরিবর্তন করার প্রয়োজন হবে না - অবশ্যই, কোন ইনস্ট্যান্স কোড ;-)
ম্যাথিউকে Guindon

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

2
রানটাইম প্রসেসিংয়ের প্রতিচ্ছবি ব্যবহার করা যে কেউ এটি ভুল করছেন। প্রতিবিম্ব হ'ল সেই প্রযুক্তিগুলির মধ্যে একটি যা কেবল আপনি কিছু করতে পারেন তার অর্থ আপনার উচিত নয়।
gbjbaanb

12
  1. আমাদের মোটেই ডিআই (নির্ভরতা ইনজেকশন) লাগবে কেন?

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

  2. এটা কিভাবে সম্পন্ন করা হয়?

    লক্ষ্য অর্জনের বিভিন্ন উপায় রয়েছে:

    • কনস্ট্রাক্টর ইনজেকশনের মাধ্যমে ইনজেকশন নির্ভরতা
    • গেটর / সেটারের মাধ্যমে ইনজেকশন
    • ইন্টারফেস ইনজেকশন
  3. আমাদের কি ডিআই ফ্রেমওয়ার্ক দরকার?

    না কোনভাবেই না. আপনি ম্যানুয়ালি অন্য বিষয়গুলিতে সমস্ত দৃষ্টান্তটি পাস করতে পারেন। আপনার যদি একটি ছোট অ্যাপ্লিকেশন থাকে তবে বসন্তের পাত্রে কোনও দরকার নেই।

    তবে অন্যদিকে, ফ্রেমওয়ার্কগুলি আপনাকে সাহায্যের হাত দেয়, অবজেক্টগুলি পরিচালনা করে:

    • তারা আপনাকে জটিল বস্তুগত সম্পর্কগুলি বাড়িয়ে তুলতে সহায়তা করে। আপনাকে কোনও বয়লারপ্লিট কোড লিখতে হবে না, দৃষ্টান্ত উত্পন্ন করতে এবং উপযুক্ত জিনিসগুলিতে এগুলি প্রেরণ করতে হবে

    • তারা নিয়ন্ত্রণ করতে আপনাকে সহায়তা যখন একটি বস্তু তৈরি করা হয়: আপনি আবেদন বুটস্ট্র্যাপিং সময় দৃষ্টান্ত তৈরি করতে পারে নি, কিন্তু কিছু ক্ষেত্রে একটি অলস সৃষ্টির - শুধুমাত্র প্রয়োজন হলে - উত্তম

    • কতগুলি ইনস্ট্যান্স তৈরি হয়েছে তা নিয়ন্ত্রণে তারা আপনাকে সহায়তা করে : অ্যাপ্লিকেশন আজীবন এক বা অনুরোধ অনুযায়ী একটি (আপনি ওয়েব-প্রোগ্রামিংয়ের ক্ষেত্রে)

যদি আপনার প্রকল্পটির উপযুক্ত আকার থাকে - আপনি যদি কম বয়লারপ্লেট কোড লেখার প্রয়োজন বোধ করেন - এটি কোনও (ডিআই) ফ্রেমওয়ার্ক ব্যবহার করে পুরোপুরি অর্থবোধ করে। কনস এর চেয়ে আরও বেশি সুবিধা রয়েছে।


2
আপনি কোনও ফ্রেমওয়ার্ক ব্যবহার না করেই ডিআই লাইব্রেরি ব্যবহার করতে পারেন।
ফ্লোরিয়ান মার্জাইন

5

বসন্ত সহ, এটি বেশিরভাগ সুবিধার বিষয়।

আপনার যদি ক্লাস থাকে TopLevelযা বর্গ গঠন করে MiddleLevelযা ক্লাস গঠন করে LowLevelএবং আপনি বুঝতে পারেন যে আপনার নতুন কনস্ট্রাক্টরের প্যারামিটার প্রয়োজন LowLevel, আপনাকে এটিতে যুক্ত করতে হবে TopLevel, এবং MiddleLevelকেবল, যাতে কোনও মান MiddleLevelনির্মানের সময়টি LowLevelউপলভ্য হবে যাতে এটি এর নির্মাণকারীর কাছে পৌঁছে দেওয়া যায়। বসন্তের সাথে, আপনি কেবল একটি টীকা যুক্ত করুন।

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

আরেকটি বিষয় হ'ল অনেকে নির্মাণকারীদের ভয় পান; তারা তাদের বোঝে না, তারা তাদের পছন্দ করে না, তারা বরং তাদের ব্যবহার করবে না।


3
বেশিরভাগ ক্ষেত্রে সম্মত হন, বিশেষত এক্সএমএল মন্তব্যে। আইএমএইচও, নির্মাতাদের ভয় করা সম্ভবত একটি ডিআই ফ্রেমওয়ার্ক ব্যবহারের খারাপ কারণ।
রবার্ট হার্ভে

2
আইএমএইচও, কনস্ট্রাক্টরদেরকে ভয় পাওয়া প্রোগ্রামিং থেকে দূরে থাকার একটি ভাল কারণ। সি -: =
মাইক নকিস

5
তবে কোনও কারখানার (স্ট্যাটিক বা অন্যথায়) এটি কীভাবে সুবিধা? (যার বিকল্পটি আপনি যথাযথ হিসাবে ব্যবহার করতে পারেন তবে বসন্তটি সব কিছুতে বা কিছুই মনে হচ্ছে না)
রিচার্ড

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

এটি ডিআই কী নয় এর উদাহরণ। OpTopLevel` তৈরি করা উচিত নয় MiddleLevel, তবে কনস্ট্রাক্টরের TopLevelএকটি আর্গুমেন্ট হিসাবে নির্মাণের সময় এটি গ্রহণ করা উচিত । তেমনিভাবে এর কনস্ট্রাক্টরে MiddleLevelএকটি গ্রহণ করা উচিত LowLevel
ক্লিয়ারার

1

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

পরে আমি খুঁজে পেয়েছি যে আউট স্প্রিং আপনার জন্য একই কাজ করবে এবং আরও অনেক কিছু।

সুতরাং আমার ক্ষেত্রে আমি এটি খুঁজে পেয়েছি

  1. নির্ভরতা ইনজেকশন কাঠামো ব্যবহার প্রোগ্রামকে নমনীয় করে তুলতে সহায়তা করে এবং এটি কীভাবে পরিচালিত হবে তা নির্দিষ্ট করে দেওয়া সহজ করে তোলে (অবশ্যই অবশ্যই নির্ধারিত প্যারামিটারগুলির মধ্যে)।

  2. তৃতীয় পক্ষের ডিআই ফ্রেমওয়ার্ক ব্যবহার করা আপনাকে চাকাটিকে পুনরায় সঞ্চারিত করা থেকে বিরত রাখে।


4
আপনি কোন কনক্রিটের ক্লাসটি ব্যবহার করবেন তা সংজ্ঞায়িত করা জাভা ফাইলের মধ্যে না থেকে কোনও এক্সএমএলের ভিতরে কেন আরও ভাল তা ব্যাখ্যা করতে পারেন। এ জিনিসটি আমি কখনই বুঝতে পারি নি।
রিচার্ড টিঙ্গল

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