আমি জানি এই প্রশ্নটি পুরানো তবে আমি আমার পাঁচটি সেন্ট যুক্ত করতে চাই,
আমি মনে করি নির্ভরতা ইনজেকশন (ডিআই) অনেকগুলি উপায়ে কনফিগারযোগ্য ফ্যাক্টরি প্যাটার্ন (এফপি) এর মতো, এবং সেই অর্থে আপনি ডিআই-এর সাথে যা কিছু করতে পারেন আপনি এই জাতীয় কারখানায় এটি করতে সক্ষম হবেন।
আসলে, যদি আপনি উদাহরণস্বরূপ বসন্ত ব্যবহার করেন তবে আপনার কাছে রিসোর্সিং রিসোর্স (ডিআই) বা এই জাতীয় কিছু করার বিকল্প রয়েছে:
MyBean mb = ctx.getBean("myBean");
এবং তারপরে কিছু করতে 'এমবি' উদাহরণটি ব্যবহার করুন। এটি কি কোনও কারখানার কল নয় যা আপনাকে একটি উদাহরণ ফিরিয়ে দেবে ??
বেশিরভাগ এফপি উদাহরণগুলির মধ্যে আমি যে সত্যিকারের পার্থক্য লক্ষ্য করি তা হ'ল আপনি যে কোনও এক্সএমএল বা অন্য ক্লাসে "মাইবিয়ান" কী তা কনফিগার করতে পারেন এবং একটি কাঠামো কারখানা হিসাবে কাজ করবে, তবে এটি ব্যতীত একই জিনিস, এবং আপনি অবশ্যই একটি ফ্যাক্টরি থাকতে পারে যা একটি কনফিগার ফাইল পড়ে বা এটি যেমন প্রয়োজন তেমন বাস্তবায়ন পায়।
এবং আপনি যদি আমার কাছে আমার মতামত জানতে চান (এবং আমি জানি আপনি করেননি), আমি বিশ্বাস করি যে ডিআই একই কাজ করে তবে কেবল উন্নয়নের ক্ষেত্রে আরও জটিলতা যুক্ত করে, কেন?
ভাল, একটি বিষয় হিসাবে, আপনি ডিআই-র সাথে স্বতন্ত্র যে কোনও শিমের জন্য বাস্তবায়ন কী ব্যবহৃত হচ্ছে তা জানতে, আপনাকে নিজেই কনফিগারেশনে যেতে হবে।
কিন্তু ... সেই প্রতিশ্রুতি সম্পর্কে কী যে আপনি যে অবজেক্টটি ব্যবহার করছেন তা বাস্তবায়ন করতে হবে না? pfft! গম্ভীরভাবে? আপনি যখন এই জাতীয় মতামত ব্যবহার করেন ... আপনি কি একইরকম হন না যা প্রয়োগটি লেখেন ?? এবং এমনকি যদি আপনি না করেন তবে আপনি প্রায় সবসময়ই এটি দেখতে যাচ্ছেন যা বাস্তবায়ন কী করার কথা বলে তা কী করে ??
এবং একটি শেষ কথা, কোনও ডিআই ফ্রেমওয়ার্ক আপনাকে কতটা প্রতিশ্রুতি দেয় যে আপনি এটি থেকে উদ্বেগিত জিনিসগুলি তাদের শ্রেণীর উপর নির্ভরশীলতা ছাড়াই তৈরি করবেন তা বিবেচনাধীন নয়, আপনি যদি কোনও ফ্রেমওয়ার্ক ব্যবহার করেন যা আপনি সবকিছু তৈরি করেন তা জাগিয়ে তোলে, যদি আপনাকে করতে হয় দৃষ্টিভঙ্গি বা কাঠামো পরিবর্তন করুন এটি কোনও সহজ কাজ হবে না ... কখনও! ... তবে, যেহেতু আপনি আপনার ব্যবসায়ের জন্য সর্বোত্তম সমাধান কী তা নিয়ে চিন্তা করার পরিবর্তে সেই নির্দিষ্ট কাঠামোর চারপাশে সমস্ত কিছু তৈরি করে ফেলেছেন, তখন এটি করার সময় আপনি একটি দ্বি-দ্বি সমস্যার মুখোমুখি হবেন।
আসলে, আমি দেখতে পাচ্ছি যে কোনও এফপি বা ডিআই পদ্ধতির একমাত্র আসল ব্যবসায়ের অ্যাপ্লিকেশনটি হ'ল রানটাইম ব্যবহারের সময় যদি আপনার প্রয়োগগুলি পরিবর্তন করা দরকার তবে তা কমপক্ষে আমার জানা ফ্রেমওয়ার্কগুলি আপনাকে এটি করতে দেয় না, আপনাকে ছেড়ে যেতে হবে বিকাশের সময় কনফিগারেশনে নিখুঁত সবকিছু আপনার যদি অন্য পদ্ধতির প্রয়োজন হয়।
সুতরাং, যদি আমার কাছে এমন একটি শ্রেণি থাকে যা একই অ্যাপ্লিকেশনে দুটি স্কোপে আলাদাভাবে সম্পাদন করে (বলুন, ধরুন যে একটি হোল্ডিংয়ের দুটি সংস্থা) আমাকে দুটি আলাদা মটরশুটি তৈরির জন্য ফ্রেমওয়ার্কটি কনফিগার করতে হবে এবং প্রতিটিটি ব্যবহারের জন্য আমার কোডটি অভিযোজিত করতে হবে। আমি কি এই জাতীয় কিছু লিখতে চাইছি তা হ'ল না:
MyBean mb = MyBeanForEntreprise1(); //In the classes of the first enterprise
MyBean mb = MyBeanForEntreprise2(); //In the classes of the second enterprise
এই হিসাবে একই:
@Autowired MyBean mbForEnterprise1; //In the classes of the first enterprise
@Autowired MyBean mbForEnterprise2; //In the classes of the second enterprise
এবং এই:
MyBean mb = (MyBean)MyFactory.get("myBeanForEntreprise1"); //In the classes of the first enterprise
MyBean mb = (MyBean)MyFactory.get("myBeanForEntreprise2"); //In the classes of the second enterprise
ক্লাস বা কনফিগারেশন ফাইল যাই হোক না কেন আপনাকে আপনার অ্যাপ্লিকেশনটিতে কিছু পরিবর্তন করতে হবে, তবে আপনাকে এটি পুনরায় চালু করতে হবে।
এই জাতীয় কিছু করা ভাল হবে না:
MyBean mb = (MyBean)MyFactory.get("mb");
এবং এইভাবে, আপনি লগইন হওয়া ইউজার এন্টারপ্রাইজের উপর নির্ভর করে রানটাইমে সঠিক প্রয়োগের জন্য কারখানার কোড সেট করেছেন ?? এখন এটি সহায়ক হবে। আপনি কেবলমাত্র নতুন ক্লাসগুলির সাথে একটি নতুন জার যুক্ত করতে পারেন এবং নিয়মগুলি এমনকি রানটাইম সময়েও সেট করতে পারেন (বা আপনি যদি এই বিকল্পটি উন্মুক্ত রেখে দেন তবে একটি নতুন কনফিগার ফাইল যুক্ত করুন), বিদ্যমান ক্লাসে কোনও পরিবর্তন নেই। এটি একটি ডায়নামিক কারখানা হবে!
প্রতিটি এন্টারপ্রাইজের জন্য দুটি কনফিগারেশন লেখার চেয়ে আরও কার্যকর হতে পারে না, এবং এমনকি প্রতিটিটির জন্য দুটি আলাদা অ্যাপ্লিকেশন থাকতে পারে ??
আপনি আমাকে বলতে পারেন, রানটাইমের সময় আমার কখনই স্যুইচ করার দরকার নেই, তাই আমি অ্যাপ্লিকেশনটি কনফিগার করে থাকি এবং যদি আমি শ্রেণীর উত্তরাধিকারী হই বা অন্য প্রয়োগ প্রয়োগ করি তবে আমি কেবল কনফিগারটি পরিবর্তন করে পুনরায় চালু করব। ঠিক আছে, এটি একটি কারখানা দিয়েও করা যেতে পারে। এবং সত্য কথা বলুন, আপনি কতবার এটি করেন? সম্ভবত যখন আপনার কাছে এমন একটি অ্যাপ রয়েছে যা আপনার সংস্থার অন্য কোথাও ব্যবহার করা হবে এবং আপনি কোডটি অন্য একটি দলে পাঠাতে যাচ্ছেন এবং তারা এই জাতীয় জিনিসগুলি করবে। তবে ওহে, কারখানার সাথে এটিও করা যেতে পারে, এবং গতিশীল কারখানার সাথে আরও ভাল হতে পারে !!
যাইহোক, যদি আপনি আমাকে হত্যা করার জন্য মন্তব্য বিভাগ খোলা।