বসন্ত কাঠামো কী করে? আমি এটি ব্যবহার করা উচিত? কেন অথবা কেন নয়?


236

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

যাইহোক, আমার পটভূমি এবং আমার অ্যাপ্লিকেশন সম্পর্কে এখানে কিছুটা বলা হয়েছে:

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

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

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

তাই দয়া করে। আমাকে শিক্ষিত কর আমার কি বসন্ত ব্যবহার করা উচিত? কেন অথবা কেন নয়?


10
আমার মনে হয় আপনার নিজের পছন্দ হয় কিনা তা আপনার প্রকল্পের জন্য উপযুক্ত কিনা তা দেখার জন্য আপনার সত্যিকার অর্থে কিছুক্ষণ চেষ্টা করা দরকার। ব্যক্তিগতভাবে আমি এটি ঘৃণা করি।
রিচার্ড

1
আপনি এক্সএমএল বা টীকাগুলি ব্যবহার করতে পারবেন; মনে রাখবেন যে বসন্তটি কনফিগারেশন মানসিকতার উপরে একটি সম্মেলন করে। এটি আপনাকে যে আইটেমগুলিতে সম্বোধন করতে হবে তা অবশ্যই চেকলিস্ট নয় ।
অ্যারন ম্যাকআইভার

14
যদিও এটি সত্য যে এই প্রশ্নটি বরং বিস্তৃত, আমি মনে করি এটি খোলা থাকা উচিত। আমি এটি "মধ্যম আকারের প্রকল্পের জন্য বসন্তের কী উপকার দেয়?" হিসাবে পড়েছি এবং এটি একটি ভাল প্রশ্ন।

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

4
এন্টারপ্রাইজ জাভা বিবেচনা করে, স্প্রিং কী করে না তার উত্তর দেওয়া আরও সহজ ...
m3th0dman

উত্তর:


108

বসন্ত কাঠামো কী করে? আমি এটি ব্যবহার করা উচিত? কেন অথবা কেন নয়?

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

এটিই আমি সর্বদা "নির্ভরতা ইনজেকশন" হতে বুঝতে পেরেছি।

আমি একটি আলাদা সংজ্ঞা প্রস্তাব করব:

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

এর বিপরীতে তুলনা করুন: "প্রতিটি বস্তুর বাইরে যাওয়া এবং সমস্ত কিছুর সন্ধান এবং এটি শুরু হওয়ার সাথে সাথে প্রত্যেকের প্রয়োজনের জন্য দায়ী" "

দেখে মনে হচ্ছে এটি XML কনফিগারেশনের পুরো গোছা প্রয়োজন

ঠিক আছে, বেশিরভাগ এক্সএমএল (বা টিকা-ভিত্তিক) স্টাফগুলি স্প্রিং স্টাফকে এইভাবে বলছে:

  • যখন কেউ "হ্যামারস্টোর" এর জন্য জিজ্ঞাসা করে, আমি চাই আপনি একটি উদাহরণ তৈরি করুন example.HammerStoreএবং এটি ফিরিয়ে দিন। পরের বারের জন্য উদাহরণটি ক্যাশে করুন, যেহেতু কেবলমাত্র একটি স্টোর থাকা দরকার।
  • যখন কেউ "সামারহ্যামার" এর জন্য জিজ্ঞাসা করেন, আমি চাই আপনি নিজেকে একটি "হ্যামারস্টোর" জিজ্ঞাসা করুন এবং স্টোরের makeHammer()পদ্ধতির ফলাফলটি ফিরিয়ে দিন । এই ফলাফলটি ক্যাশে করবেন না
  • যখন কেউ "সামারচঞ্চ" এর জন্য জিজ্ঞাসা করে, আমি চাই আপনি একটি উদাহরণ তৈরি example.WrenchImplকরুন, কনফিগারেশন সেটিংসটি ব্যবহার করুন gaugeAmountএবং এটিকে উদাহরণের setWrenchSize()সম্পত্তিতে রেখে দিন। ফলাফলটি ক্যাশে করবেন না।
  • যখন কেউ "লোকালপ্লবার" জন্য জিজ্ঞাসা করে, আমি আপনাকে একটি উদাহরণ তৈরি করতে চাই example.PlumberImpl। তার setName()পদ্ধতিতে "পেড্রো" স্ট্রিংটি রাখুন, তার পদ্ধতিতে একটি "সামারহ্যামার" রাখুন এবং তার setHammer()পদ্ধতিতে একটি "সামারচঞ্চ" রাখুন setWrench()। আমাদের কেবল একটি প্লাম্বার প্রয়োজন হওয়ায় ফলাফলটি ফেরত দিন এবং পরে ফলাফলটি ক্যাশে করুন।

এইভাবে, বসন্তটি আপনার সংযুক্ত উপাদানগুলিকে লেবেল করতে, তাদের জীবনচক্র / ক্যাশে নিয়ন্ত্রণ করতে এবং কনফিগারেশনের উপর ভিত্তি করে আচরণ পরিবর্তন করতে দেয়।

[পরীক্ষার] সুবিধার্থে আমি সাধারণত (কমপক্ষে) একটি পদ্ধতির দুটি সংস্করণ তৈরি করি: একটি যা উদাহরণের ভেরিয়েবল ব্যবহার করে এবং একটি এমন যে কেবল পদ্ধতিতে পাস হওয়া ভেরিয়েবল ব্যবহার করে।

এটি আমার পক্ষে খুব বেশি উপকার না করার জন্য প্রচুর ওভারহেডের মতো শোনাচ্ছে। পরিবর্তে, আপনার ইনস্টল ভেরিয়েবলগুলি protectedবা প্যাকেজ দৃশ্যমানতা তৈরি করুন এবং একই com.mycompany.whateverপ্যাকেজের অভ্যন্তরে ইউনিট পরীক্ষাগুলি সনাক্ত করুন । আপনি টেস্টের সময় যখনই চান ততক্ষণ আপনি উদাহরণটি পরিবর্তনশীলগুলি পরিদর্শন ও পরিবর্তন করতে পারবেন।


65

প্রথমে নির্ভরতা ইনজেকশন কী?

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

দ্বিতীয়ত, বসন্তটি এক্সএমএল (বা খুব অল্প) ব্যবহার করা যেতে পারে

যদি আপনি স্প্রিং 3.0.০.৫.জি.এ বা তারও বেশি উচ্চতার সাথে ডুব দেন তবে আপনি জেডি কে ++ থেকে নির্ভরতা ইনজেকশন সমর্থন ব্যবহার করতে পারেন। এর অর্থ হ'ল আপনি @Componentএবং @Resourceটীকাগুলি ব্যবহার করে নির্ভরতা বাড়িয়ে তুলতে পারেন ।

কেন আদৌ বসন্ত ব্যবহার করবেন?

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

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

RestTemplate restTemplate = new RestTemplate();
MyJaxbObject o = restTemplate.getForObject("https://secure.example.org/results/{param1}?param2={param2}",MyJaxbObject.class,"1","2");

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

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


4
হ্যাঁ রেস্টটেম্পলেটটি দুর্দান্ত দুর্দান্ত। আমার কাছে 100 লাইনের কোড রয়েছে যা আমি ফেলে দিতে পারি এবং 2-3 লাইনের সাথে প্রতিস্থাপন করতে পারি।
কেভিন

11
নিটপিক থেকে: নির্ভরতা ইনজেকশনটিতে কনস্ট্রাক্টর-ভিত্তিক পদ্ধতিও অন্তর্ভুক্ত। অগত্যা আপনার সেটটার লাগবে না।
দরিয়েন

28

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

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

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


ওপি ডিআই কে পুরোপুরি ভালভাবে বোঝে
বাসিলিভস

19

আপনি কেন স্প্রিং ব্যবহার করতে চান, আপনি এটি http://www.wrox.com/WileyCDA/Sication/Why-Use-the-Spring-Framework-.id-130098.html এ পড়তে পারেন

সংক্ষেপে :

  • জে 2 ই ই অ্যাপ্লিকেশনগুলিতে অতিরিক্ত পরিমাণে "নদীর গভীরতানির্ণয়" কোড থাকে contain অনেকগুলি কোড পর্যালোচনা বারবার এমন একটি উচ্চ অনুপাতের প্রকাশ করে যা কিছু করে না: জেএনডিআই লুকিং কোড, ট্রান্সফার অবজেক্টস, জেডিবিসি রিসোর্সগুলি অর্জন এবং ছেড়ে দেওয়ার জন্য ব্লকগুলি চেষ্টা করুন / ধরুন। । । । এই জাতীয় নদীর গভীরতানির্ণয় কোড রচনা এবং বজায় রাখা এমন সংস্থানগুলিতে একটি বড় ড্রেন প্রমাণ করে যা অ্যাপ্লিকেশনটির ব্যবসায়িক ডোমেনে ফোকাস করা উচিত।

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

  • ইজেবি উপাদানটির মডেলটি অতীব জটিল। জে 2 ই ই অ্যাপ্লিকেশনগুলিতে ব্যবসায়িক যুক্তি প্রয়োগ করার সময় জটিলতা হ্রাস করার একটি উপায় হিসাবে EJB ধারণা করা হয়েছিল; এটি বাস্তবে এই লক্ষ্যে সফল হয়নি।

  • ইজেবি অতিরিক্ত ব্যবহার করা হয়। ইজেবি মূলত অভ্যন্তরীণ বিতরণ, লেনদেনমূলক অ্যাপ্লিকেশনগুলির জন্য ডিজাইন করা হয়েছিল। প্রায় সমস্ত অ-তুচ্ছ অ্যাপ্লিকেশন লেনদেনের ক্ষেত্রে, বিতরণটি মৌলিক উপাদানগুলির মডেল হিসাবে তৈরি করা উচিত নয়।

  • অনেকগুলি "জে 2 ই ই ডিজাইনের ধরণগুলি" আসলে নকশার ধরণগুলি নয়, তবে প্রযুক্তির সীমাবদ্ধতার জন্য কার্যনির্বাহী। অতিরিক্ত বিতরণ এবং EJB এর মতো জটিল API গুলি ব্যবহারের ফলে অনেকগুলি সন্দেহজনক ডিজাইনের নিদর্শন তৈরি করেছে; এগুলি সমালোচনামূলকভাবে পরীক্ষা করা এবং সহজ, আরও উত্পাদনশীল, পদ্ধতির সন্ধান করা গুরুত্বপূর্ণ।

  • জে 2 ই ই অ্যাপ্লিকেশনগুলি ইউনিট পরীক্ষা করা শক্ত। J2EE APIs এবং বিশেষত EJB উপাদান মডেলটি চতুর আন্দোলন শুরুর আগে সংজ্ঞায়িত করা হয়েছিল। সুতরাং তাদের নকশা ইউনিট পরীক্ষার স্বাচ্ছন্দ্যতা গ্রহণ করে না। উভয় এপিআই এবং অন্তর্নিহিত চুক্তির মাধ্যমে, ইজেবি এবং একটি অ্যাপ্লিকেশন সার্ভারের বাইরে থাকা আরও অনেক জে 2 ই ই এপিআইয়ের উপর ভিত্তি করে অ্যাপ্লিকেশনগুলি পরীক্ষা করা আশ্চর্যজনকভাবে কঠিন। তবুও উচ্চ অ্যাপ্লিকেশন সার্ভারের বাইরে ইউনিট টেস্টিং উচ্চ পরীক্ষার কভারেজ অর্জন করতে এবং অনেকগুলি ব্যর্থতার পরিস্থিতি যেমন ডেটাবেজে সংযোগ হারাতে পুনরুত্পাদন করার জন্য প্রয়োজনীয়। উন্নয়ন বা রক্ষণাবেক্ষণ প্রক্রিয়া চলাকালীন পরীক্ষা দ্রুত চালানো যেতে পারে তা নিশ্চিত করার পক্ষেও অপরিহার্য, পুনর্বার নিয়োগের অপেক্ষায় থাকা অনুন্নত সময়কে কমিয়ে আনা।

  • কিছু জে 2 ই ই প্রযুক্তি সহজেই ব্যর্থ হয়েছে। এখানে প্রধান অপরাধী সত্তা মটরশুটি, যা উত্পাদনশীলতার জন্য এবং অবজেক্ট অভিমুখীকরণের ক্ষেত্রে তাদের প্রতিবন্ধকতায় খুব কম বিপর্যয়কর প্রমাণ করেছে।


13

ব্যবহৃত হত আমরা কেবল কোর জাভা, সার্ভলেটস এবং জেএসপি, এইচটিএমএল এবং এক্সএমএল, জেডিবিসি এপিআই ব্যবহার করে সহজ, দক্ষ, দ্রুত অ্যাপ্লিকেশন এবং ওয়েব পরিষেবাদি রচনা করেছি। এটি যথেষ্ট ভাল ছিল; JUnit পরীক্ষা করার জন্য একটি ভাল সরঞ্জাম ছিল। আমাদের কোডটি কার্যকর হয়েছিল তা আমরা সহজেই বিশ্রাম নিয়েছিলাম।

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

আমাদের ওয়েব অ্যাপ্লিকেশনগুলিতে মডেল ভিউ কন্ট্রোলার প্যাটার্ন যুক্ত করতে স্ট্রুটস এসেছিল, এটি ভাল ছিল।

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

উদাহরণস্বরূপ এখন আমরা আমাদের সাধারণ জেডিবিসি ইউআরএল, ব্যবহারকারী, প্রথমে jdbc.properties, তারপর দ্বিতীয় হাইবারনেট বৈশিষ্ট্য এবং তারপরে তৃতীয়বার স্প্রিং বিনের মধ্যে প্যাকেজ করি!

সর্বোপরি, আপনার যেখানে প্রয়োজন সেখানে একটি সংযোগ পাওয়ার কথা বিবেচনা করুন নিচে খাঁটি জাভাতে যেমন দেখানো হয়েছে তেমন সহজ, যা আমরা স্প্রিংয়ের সাথে সমস্ত গরম বায়ুতে যাওয়ার পরে যা করছি তা সত্যই:

Connection connection = DriverManager.getConnection(url, user, pass);

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

আর একটি উদাহরণ ব্যাচের আপডেট। স্প্রিংয়ের সাথে এটি বেশ কয়েকটি ক্লাস, ইন্টারফেসগুলিতে জড়িত যা আপনি ব্যাচ আপডেট করতে JdbcTemplate ব্যবহার করতে পারেন তার আগে ইন্টারফেসগুলি। সরল জেডিবিসি সহ এটি সহজভাবে:

Statement statement = connection.createStatement();
statement.addBatch(sqlquery);
statement.executeBatch();

এর চেয়ে সহজ বা দ্রুততর হতে পারে না।

আমি এই কাঠামো সমর্থন করি না। দুঃখিত। পৃথিবীতে কে প্রতিবার যখনই প্রয়োজন হয় তখন ইনজেকশন চায়?


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

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

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

13

বসন্ত কাঠামো কী করে?

বসন্ত আজকের মতোই নয়, যা সাধারণ কাঠামো হিসাবে পরিচিত ছিল, এটি একটি সম্পূর্ণ বাস্তুতন্ত্র।

বসন্তের বাস্তুসংস্থান দ্বারা আচ্ছাদিত বিষয়গুলি:

  • স্প্রিং ফ্রেমওয়ার্ক (যেমন নির্ভরতা ইনজেকশন, এওপি ...)

  • বসন্ত মেঘ

  • স্প্রিং ডেটা

  • বসন্ত সুরক্ষা

  • স্প্রিং ব্যাচ

  • বসন্ত সামাজিক

বাস্তুতন্ত্রের সম্পূর্ণ কভারেজের জন্য এখানে দেখুন । প্রকল্পগুলি চেরি-বাছাই করা সম্ভব, যাতে আপনি ডিআই এর জন্য গুগল গুইস এবং উদাহরণস্বরূপ স্প্রিং সিকিউরিটি সুরক্ষা সম্পর্কিত জিনিসগুলি পরিচালনা করতে পারেন। আপনার পুরো ইকোসিস্টেমটি কিনতে হবে না।

স্প্রিং-ফ্রেমওয়ার্ক নিজেই আজ মূলত কভার করে

  • ইনজেকশন নির্ভরতা

  • স্প্রিংয়ের ঘোষণামূলক লেনদেন পরিচালনা সহ पहलू-ওরিয়েন্টেড প্রোগ্রামিং

  • স্প্রিং এমভিসি ওয়েব অ্যাপ্লিকেশন এবং রেস্টস্টুল ওয়েব পরিষেবা কাঠামো

  • জেডিবিসি, জেপিএ, জেএমএসের জন্য প্রাথমিক সমর্থন

উত্স বসন্ত.io

সাধারণভাবে, আপনি বলতে পারেন যে স্প্রিং হ'ল কোডের প্রয়োগকৃত প্যাটার্নস এবং অভ্যাসগুলির সংকলন, যা আপনার অ্যাপ্লিকেশন বিকাশ চক্রটিকে উন্নত বা গতিময় করতে সহায়তা করতে পারে could

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

নির্ভরতা ইনজেকশন কী?

নির্ভরতা ইঞ্জেকশনটির অর্থ, আপনার বাহ্যিক বাহ্যিক প্রক্রিয়াটির মাধ্যমে অন্যান্য বস্তুর প্রতি প্রতিটি নির্ভরতা পান।

বলুন, আপনার একটি গাড়ি রয়েছে, সাধারণ উপায়, এটি বাস্তবায়িত হয়:

public class Car {

    Engine e;

    public Car() { 
        e = new Engine(); 
    }

}

গাড়ির অবজেক্টটি ইঞ্জিনের উপর নির্ভরশীল। ইঞ্জিনটি কার সদস্য হিসাবে বাস্তবায়িত হওয়ায় এটি কোনও পরীক্ষার ইঞ্জিনের জন্য অদলবদল করা যায় না।

এখন নির্ভরতা ইনজেকশনটি খেলতে আসে:

public class Car {

    Engine e;

    public Car(Engine e) { 
        this.e = e; 
    }

}

এর পরে, আপনি ইঞ্জিনগুলি স্যুইচ করতে সক্ষম হন। আপনি উপরে যা দেখেন তাকে কনস্ট্রাক্টর ইঞ্জেকশন বলে । অন্যান্য ধরণের যেমন যেমন সেটার- ইনিজেকশন বা পদ্ধতি- ইন্জেকশন। কীভাবে বসন্ত আপনাকে এটিতে সহায়তা করে? স্প্রিং এর ফলে উপাদানগুলিকে টীকাগুলির সাথে ইনজেকশনের চিহ্ন হিসাবে চিহ্নিত করতে দেয় @Autowiredএবং ইনজেক্টটিড বস্তুর তারগুলি স্বয়ংক্রিয়ভাবে করে - এটি সম্ভবত, আপনি যে উপাদানটি ইনজেক্ট করতে চান সেই উপাদানটির নিজস্ব নির্ভরতা রয়েছে। ইনজেকটেবলস - তাই বলা যায় - এর মাধ্যমে চিহ্নিত করা হয়@Component

public class Car {

    Engine e;

    @Autowired
    public Car(Engine e) { 
        this.e = e; 
    }

}

তবে স্প্রিংয়ের যে সমস্ত বৈশিষ্ট্য রয়েছে তা কেবলমাত্র এটির একটি।

আমার কি বসন্ত ব্যবহার করা উচিত? কেন অথবা কেন নয়?

যেহেতু বসন্ত খুব হস্তক্ষেপমূলক নয় এবং অনেকগুলি সহায়তা সরবরাহ করে যা আপনার বসন্ত ব্যবহারের কথা বিবেচনা করা উচিত। বিশেষত নতুন প্রকল্পগুলির জন্য, স্প্রিং বুটটি খুব আকর্ষণীয়। start.spring.io শুরু করার জন্য একটি প্রকল্পের টেমপ্লেট উত্পন্ন করতে point'n'clic- ইন্টারফেস ব্যবহার করার সহজ অফার দেয় । এমনকি curlকোনও টেমপ্লেট পুনরুদ্ধার করতে ব্যবহার করা সম্ভব :

curl start.spring.io

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/

:: Spring Initializr ::  https://start.spring.io

This service generates quickstart projects that can be easily customized.
Possible customizations include a project's dependencies, Java version, and
build system or build structure. See below for further details.

The services uses a HAL based hypermedia format to expose a set of resources
to interact with. If you access this root resource requesting application/json
as media type the response will contain the following links:
+-----------------+-----------------------------------------+
| Rel             | Description                             |
+-----------------+-----------------------------------------+
| gradle-build    | Generate a Gradle build file            |
| gradle-project  | Generate a Gradle based project archive |
| maven-build     | Generate a Maven pom.xml                |
| maven-project * | Generate a Maven based project archive  |
+-----------------+-----------------------------------------+

...

অন্যদিকে, স্পার্ক বা ড্রপউইজার্ডের মতো ফ্রেমওয়ার্কগুলি দ্রুত ওয়েব-অ্যাপ তৈরির জন্যও একটি ভাল সূচনা পয়েন্ট সরবরাহ করে।


1
খুব তথ্যপূর্ণ উত্তর!
GOXR3PLUS

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

4

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

স্প্রিং সম্পর্কে শেখার জন্য একটি ভাল বই হ'ল বিশেষজ্ঞ স্প্রিং এমভিসি এবং ওয়েব ফ্লো

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