শিমটি ইনস্ট্যান্ট করতে কখন বসন্ত ব্যবহার করবেন না?


14

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

নীচের কোড নমুনা হতে পারে আমার দ্বিধা বুঝতে আপনার সহায়তা করবে:

List<ClassA> caList = new ArrayList<ClassA>();
for (String name : nameList) {
    ClassA ca = new ClassA();
    ca.setName(name);
    caList.add(ca);
}

যদি আমি বসন্তটি কনফিগার করি তবে এটি এমন কিছু হয়ে যায়:

List<ClassA> caList = new ArrayList<ClassA>();
for (String name : nameList) {
    ClassA ca = (ClassA)SomeContext.getBean(BeanLookupConstants.CLASS_A);
    ca.setName(name);
    caList.add(ca);
}

আমি ব্যক্তিগতভাবে মনে করি এখানে স্প্রিং ব্যবহার করা একটি অপ্রয়োজনীয় ওভারহেড, কারণ

  1. কোড পড়ার / বুঝতে সহজ।
  2. নির্ভরতা ইনজেকশনটির পক্ষে এটি সত্যিই ভাল জায়গা নয় কারণ আমি আশা করছি না যে একাধিক / বৈচিত্র্যময় বাস্তবায়ন ClassAহবে, আমি পরবর্তী সময়ে স্প্রিং কনফিগারেশন ব্যবহার করে প্রতিস্থাপনের স্বাধীনতা চাই।

আমি কি ঠিক ভাবছি? যদি না হয় তবে আমি কোথায় ভুল করছি?

উত্তর:


14

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


9

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


এটিও আমার পক্ষে বৈধ উত্তর! দুঃখের বিষয়, আমি কেবল একটি উত্তর চয়ন করতে পারি।
habষভ

1

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

মৌলিক সিদ্ধান্তটি হ'ল এটি আসলেই শিম, বা কিছু সাধারণ বিষয় যা কিছু শিমের সম্মেলনগুলি অনুসরণ করে (যেমন, পদ্ধতিটির নামকরণ) follow আপনি যে ছোট্ট উদাহরণ দিয়েছেন তা থেকে আসলে কোনটি আমি অনুমান করতে পারি না।


হাই ডোনাল, ক্লাসএ যদি এমন একটি ডোমেন ক্লাস হয় যা ব্যবসার যুক্তিতে সমৃদ্ধ?
সমীর পাতিল

0

আমি ভুল বিশেষজ্ঞ হতে পারে দয়া করে সঠিক করুন।

বসন্তের প্রসঙ্গে বিনের পুরো ধারণাটি হ'ল স্প্রিং কনটেইনার অবজেক্টটির যত্ন নিচ্ছে। এটি জন্ম হ'ল এটি স্কোপ লাইফাইসাইকেল ডেথ ইত্যাদি ... এটি যেন বস্তুর তত্ত্বাবধায়ক। যে অ্যাপ্লিকেশনটির এটির প্রয়োজন তা এটি সংক্রামিত করে।

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

পূর্বে প্রস্তাবিত দাও অবজেক্টস জেএমএস কিউ অবজেক্টস ইত্যাদি ভারী এবং বিশেষজ্ঞের কাছে এটি আরও ভাল রেখে দেওয়া হয়েছে যে এটি যত্ন নেওয়ার জন্য স্প্রিং ফ্রেমওয়ার্ক।

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