নির্ভরতা ইনজেকশন ফ্রেমওয়ার্কগুলি কি নির্ভরতার ঝুঁকি তৈরি করে?


13

নির্ভরতা ইনজেকশন ব্যবহার করার জন্য আমি একটি বিদ্যমান সিস্টেমকে পুনঃনির্ধারণ করছি এবং সেই কাজটি সুচারুভাবে চলছে।

কিছুক্ষণ পরে আমি লক্ষ্য করেছি যে বিপুল সংখ্যক ইন-হাউস লাইব্রেরি আমার ব্যবহৃত ডিআই ফ্রেমওয়ার্কের উপর নির্ভরশীল হয়ে পড়েছে। ফলস্বরূপ পুরো প্রকল্পটি এখন এই তৃতীয় পক্ষের কাঠামোর উপর নির্ভর করে।

আমি সমস্ত নির্ভরতা ভাগ করে নেওয়া লাইব্রেরির উপর নির্ভরশীল করে তাদের নির্ভরশীলতা ডিক্লুং করার ক্ষেত্রে বিড়ম্বনা দেখেছি।

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

আমার উদ্বেগ হ'ল আমি যে ডিআই ফ্রেম ফ্রেমটি ব্যবহার করছি তা অপ্রচলিত হয়ে যায় বা প্রতিস্থাপনের প্রয়োজন।

ডিআই-এর সাথে কাজ করার সময় কি এমন কোনও বিকাশের প্যাটার্ন উপস্থিত রয়েছে যা কোনও প্রকল্প এবং ডিআই কাঠামোর মধ্যে সংযোগকে হ্রাস করে?


4
"একটি ডিআই ফ্রেমওয়ার্ক ব্যবহার করবেন না" প্যাটার্ন। যদিও আমি অবশ্যই ভাবছি যে আপনি যদি এমন কোনও সমস্যা সমাধান করছেন যা আপনার আসল সমস্যা নেই - আপনি ডিআই কাঠামোর পরিবর্তন করার সম্ভাবনা কতটা?
ওবেদ

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

8
আপনার সিস্টেমটি বিদ্যুতের উপরও নির্ভর করে। আমি আপনাকে প্রথমে ডিকুয়াল করার পরামর্শ দিচ্ছি।
ইদন আরে

3
পছন্দ করুন আপনি এটি করতে পারেন, তবে এটি নির্ভরতা নিখুঁত হিসাবে আপনার করা উচিত নয়।
মার্টিনাস

2
@ ম্যাথিউফোস্কারিনি DIFramework.Get<IService>()আসলে নির্ভরতা ইনজেকশন নয়; এটি সার্ভিস লোকেটার নামে সম্পর্কিত একটি প্যাটার্ন। প্রচুর লোক সার্ভিস লোকেটারকে অপছন্দ করে কারণ এটি আপনাকে কাঠামোর সাথে জুড়ে দেয় এবং এটি খুব সহজেই আপত্তিজনকভাবে ব্যবহৃত হয় (যেমন সিঙ্গলটনের)। মার্টিন ফওলারের
বেনিয়ামিন হডসন

উত্তর:


8

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

আপনার সমস্ত কোড একটি নির্দিষ্ট কাঠামোর উপর নির্ভর করে যতক্ষণ না এটি আপনার কাছ থেকে প্রত্যাশা করে এবং যতক্ষণ না এটি সঠিকভাবে বজায় থাকে ততক্ষণ কোনও সমস্যা হতে পারে না। তবে এটি ইস্যুতে পরিণত হতে পারে যদি এটি না হয়। সেই পরিস্থিতি মোকাবেলা করার জন্য কিছু কৌশল রয়েছে:

  • আপনার বিশ্বাস যে কোনও বিক্রেতার কাছ থেকে একটি কাঠামো চয়ন করুন যে তিনি আপনাকে এখন থেকে বেশ কয়েক বছর ধরে আপডেট এবং নতুন প্রকাশ করতে পারবেন

  • একটি ওপেন সোর্স ফ্রেমওয়ার্ক বেছে নিন যাতে কোডের কয়েকটি পর্যাপ্ত লাইন থাকে (এবং একটি উপযুক্ত লাইসেন্স), যাতে বাজার থেকে বিক্রেতার অদৃশ্য হয়ে আপনি নিজেরাই যে কোনও রক্ষণাবেক্ষণ করতে পারেন you

  • আপনার নিজস্ব কাঠামো লিখুন

  • বিক্রেতার উপলভ্য অবস্থার সাথে বেঁচে থাকুন এবং যখন তিনি সত্যই নিখোঁজ হন, তখন একটি আলাদা কাঠামো বেছে নিন এবং একটি অ্যাডাপ্টার তৈরি করার চেষ্টা করুন যা পুরানো কাঠামোটি নতুন ব্যবহার করে অনুকরণ করে

ইতিমধ্যে একটি মোড়কের লাইব্রেরি তৈরির ধারণাটি একেবারেই নতুন নয়, তবে আমি খুব কমই দেখেছি যে কাজ করা, যেহেতু আপনাকে ভবিষ্যতের পরিস্থিতির জন্য অনুমান করাতে হবে যার জন্য আপনি জানেন না যে এটি কখন আপনাকে আঘাত করবে, এবং কী? "নতুন" কাঠামোর মত দেখাবে। অন্যদিকে, কয়েক বছর আগে আমরা উপরে উল্লিখিত অ্যাডাপ্টার কৌশল প্রয়োগ করে ~ 120K কোডের লাইন দিয়ে একটি সি ++ প্রকল্পে আমরা একটি সফল ইউআই কাঠামো সাফল্যের সাথে বিনিময় করেছি।


19

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

ডিআই পাত্রে একটি "এন্টারপ্রাইজ সফ্টওয়্যার" প্যাটার্ন হয়, যখন অবজেক্ট গ্রাফটি খুব বড় এবং জটিল হয় used আমি সন্দেহ করি যে 95% অ্যাপ্লিকেশন এর প্রয়োজন হয় না।


5
আমি একমত যে ছোট প্রকল্পগুলির এটির প্রয়োজন হয় না, তবে 95%% প্রকল্পগুলি এটি থেকে লাভ করতে পারে।
মার্টিনাস

11
@ মাআর্টিনাস: ন্যূনতম সুবিধার জন্য অযৌক্তিক যুক্ত জটিলতা।
রবার্ট হার্ভে

1
কি? এগুলি প্রতি ক্লাসে আমার পরিসংখ্যান: 0.5 টি টীকা, 0.1 কনফিগারেশন লাইন। তাহলে কি জটিলতা বলতে চাচ্ছেন ???
maaartinus

2
@ রবার্টহারভে: যদিও আমি উপরে আপনার বিবৃতিগুলির সাথে 100% সম্মত, ওপিতে বলা হয়েছে যে তিনি ইতিমধ্যে একটি ডিআই কাঠামো চালু করেছেন। তাকে "আরও ভাল করবেন না" বলা তাঁর প্রশ্নের উত্তর নয়।
ডক ব্রাউন

1
@ মার্টিনাস আরও কাঠামো স্বয়ংক্রিয়ভাবে চালিত হবে এবং আরও স্টাফ এটি আরও জটিল ইনজেক্ট করতে পারে। এখানে এক্সএমএল কনফিগারেশন ফাইল, কনস্ট্রাক্টর ইনজেকশন, সম্পত্তি ইনজেকশন, স্বয়ংক্রিয় বস্তু উপহাস, অলস ইনজেকশন ইত্যাদি রয়েছে etc ইত্যাদি, এই ডিআই ফ্রেমওয়ার্কগুলি খুব জটিল হয়ে উঠতে পারে।
প্রতিক্রিয়াশীল

0

আমি মনে করি না ডিআই ফ্রেমওয়ার্কগুলি শীঘ্রই যে কোনও সময় সত্যই অচল হয়ে যেতে পারে। এটিকে অপ্রচলিত করার জন্য কী হওয়া উচিত?

  • নতুন এবং স্মার্ট প্যাটার্নের আবিষ্কার হতে পারে? তবে এটি দেখতে দেখতে দেখতে এটি কোডে অনেক বড় পরিবর্তন প্রয়োজন bigger
  • ভাষার কোনও পরিবর্তন হতে পারে? আরো খারাপ.

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

আমি নিশ্চিত যে ডিআই কাঠামো পরিবর্তন করা অন্য কোনও লাইব্রেরি পরিবর্তনের চেয়ে প্রসারের আদেশের চেয়ে সহজ হবে (যেমন, কোনও ইউআই পরিবর্তন মানে আরও অনেক বেশি কাজ)।

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