ডিআই / আইওসি ধারক বনাম কারখানাগুলি: আমি আমার অ্যাপ্লিকেশনটি কোথায় কনফিগার করব এবং কেন?


9

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


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

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

এখন বলুন আমার কাছে IMotorকংক্রিটের ধরণের একটি প্লাগইন টাইপ রয়েছে Motor1এবং এটি Motor2কারখানা দ্বারা পরিচালিত হওয়া উচিত। আমার ডিভাইসটি কীভাবে কনফিগার করতে হয় তার সিদ্ধান্ত নেওয়ার জন্য এখন দুটি উপায় রয়েছে:

  1. আমি যে ডিভাইসটির উপর এসডাব্লু চলছে তা সম্পর্কে তথ্যটি পাস করি MotorFactoryএবং এটি সঠিক মোটরটি দেয়, হয় Motor1বা হয় Motor2। এই ক্ষেত্রে সিদ্ধান্ত নেওয়ার জন্য যুক্তি নেই ভিতরে কারখানার।
  2. আমি ডিভাইসটি চলছে এবং দুই কারখানায় তৈরি অনুযায়ী DIC কনফিগার Motor1Factoryএবং Motor2Factory, যেখানে একটা সৃষ্টি Motor1এবং অন্যান্য Motor2IMotorএক্ষেত্রে আমার ডিভাইস-নির্দিষ্ট রেজিস্ট্রিগুলিতে পৃথক পৃথক রেজিস্ট্রি এন্ট্রি থাকবে যা Motor1Factoryবা হয় ব্যবহার করেMotor2Factory

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

তাই আবার: আমি কখন একটি পদ্ধতি বা অন্যটি ব্যবহার করব? এবং আরও গুরুত্বপূর্ণ: কোন পথে যেতে হবে তা সিদ্ধান্ত নেওয়ার জন্য ভাল সূচকগুলি কী কী?


2
সহজ উপায় কোনটি? আরও জটিল পদ্ধতির সুবিধা কী অতিরিক্ত জটিলতার ব্যয়কে ছাড়িয়ে যায়?
রবার্ট হার্ভে

উত্তর:


2

যদি আপনি উভয়ই ব্যবহার করেন তবে আমি সাধারণ কিছু যাব:

  • ডিআই / আইওসি: প্রতিটি কনফিগারেশনের জন্য যা রানটাইমে পরিবর্তন হবে না।
  • কারখানা: রানটাইম অবজেক্টগুলির উদাহরণ তৈরির জন্য যা রানটাইম ইনপুট পরামিতিগুলির উপর নির্ভর করে। কারখানার উদাহরণগুলি ডিআই কনটেইনার দ্বারা ইনজেকশন করা হয়।

1

অ্যাবস্ট্রাক্ট ফ্যাক্টরিগুলি ব্যবহৃত হয় যখন আপনার হায়ারার্কির মাধ্যমে সম্পর্কিত বস্তু থাকে যা একসাথে পরিবর্তিত হওয়া প্রয়োজন। আমি এখানে এটি দেখতে পাচ্ছি না।

আমি যা দেখছি তা হ'ল আপনি ভাবছেন যে কোনও কারখানার মোটরটি বেছে নেওয়া উচিত বা ডিআইসির কোনও নির্দিষ্ট মোটর উত্পাদনকারী কোনও কারখানা চয়ন করা উচিত।

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

এটি এই প্রশ্নের অবতারণা করে: আপনার কি এমন কোনও কোডের দরকার আছে যা এই ইস্যুটির জন্য বিশেষ যে কারখানায় থাকবে? বা ফাইল থেকে কনফিগারেশন বিশদ পড়ার মতো আরও সাধারণ?

মনে রাখবেন যে আপনি যখন কেবল আজ Motor1এবং Motor2আজকের মধ্যেই বেছে নিতে পারেন , কাল সেখানে একটি হতে পারে Motor3Motor3যোগ করতে সহজ করতে পারে যে নকশা পছন্দ ।


0

আমি বিল্ডার (প্যাটার্ন) নামক একটি বিশেষ কারখানায় "কোন মোটরটি ব্যবহার করব" যুক্তিটি আলাদা করব would বাস্তবায়নের বিবরণ হিসাবে উভয় মোটরের আইওসি-কনটেইনার ব্যবহার করব।

একটি সাধারণ নিয়ম হিসাবে:

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