দীর্ঘদিন ধরে আমি বিশ্বাস করেছিলাম যে আমরা যে সমস্ত এক্সএমএল ফাইল ব্যবহার করতাম তার মতো একটি "কেন্দ্রীভূত, ঘোষিত, কনফিগারেশন" থাকার একটি মূল্য রয়েছে। তখন আমি বুঝতে পেরেছিলাম যে ফাইলগুলির বেশিরভাগ স্টাফ কনফিগারেশন নয় - এটি কখনও কখনও বিকাশের পরে পরিবর্তিত হয়নি। তখন আমি বুঝতে পেরেছিলাম যে "কেন্দ্রীভূত" এর বেশিরভাগ ছোট সিস্টেমে মূল্য রয়েছে - কেবলমাত্র ছোট সিস্টেমে আপনি সামগ্রিকভাবে কোনও কনফিগারেশন ফাইল আঁকতে সক্ষম হবেন । এবং সামগ্রিকভাবে ওয়্যারিংগুলি বোঝার আসলে কী মূল্য হয়, যখন একই "ওয়্যারিংস" বেশিরভাগ কোডে নির্ভরতা দ্বারা নকল হয়? সুতরাং আমি কেবল একমাত্র জিনিসটি হ'ল মেটা ডেটা (টিকা), যা এখনও উদার-উদ্বেগজনক। এগুলি রানটাইমের সময় কখনও পরিবর্তন হয় না এবং সেগুলি কখনই হয় না "কনফিগারেশন" ডেটা যে কেউ ফ্লাইতে পরিবর্তিত হবে - তাই আমি মনে করি এটি কোডে রাখা ভাল।
আমি যতটা পারি পুরো অটো-ওয়্যারিং ব্যবহার করি। আমি এটা ভালোবাসি. বন্দুকের পয়েন্টে হুমকি না দেওয়া হলে আমি পুরানো ধাঁচের বসন্তে ফিরে যাব না। পুরোপুরি পছন্দ করার জন্য আমার কারণগুলি@Autowired
সময়ের সাথে সাথে পরিবর্তিত হয়েছে।
এই মুহুর্তে আমি মনে করি স্বয়ংক্রিয়তা ব্যবহারের সর্বাধিক গুরুত্বপূর্ণ কারণ হ'ল আপনার সিস্টেমে ট্র্যাক রাখতে আরও কম বিমূর্ততা রয়েছে। "শিমের নাম" কার্যকরভাবে চলে গেছে। এটি সিমের নামটি কেবলমাত্র xML- এর কারণে বিদ্যমান। সুতরাং অ্যাবস্ট্রাক্ট ইন্ডায়ায়ারেশনের একটি সম্পূর্ণ স্তর (যেখানে আপনি শিমের নাম "ফু" শিম "বার" তে যুক্ত করবেন) চলে গেছে। এখন আমি সরাসরি আমার শিমের মধ্যে "ফু" ইন্টারফেসটি ওয়্যার করি এবং বাস্তবায়ন রান-টাইম প্রোফাইল দ্বারা নির্বাচিত হয়। এটি আমাকে প্রয়োগের ক্ষেত্রে কী কোডনির্ভরতা এবং বাস্তবায়নগুলি ট্রেস । আমি যখন আমার কোডটিতে একটি স্বায়িত নির্ভরতা দেখি তখন আমি কেবল আমার আইডিইতে "প্রয়োগের দিকে যেতে" কী টিপতে পারি এবং পরিচিত বাস্তবায়নের তালিকাতে আসে। বেশিরভাগ ক্ষেত্রে একটি মাত্র বাস্তবায়ন হয় এবং আমি সরাসরি ক্লাসে আছি। করতে পারা' প্রয়োগ করা হচ্ছে তা নিয়ে কাজ করার অনুমতি দেয় (আমি দাবি করি যে এক্সএমএল ওয়্যারিংয়ের সাথে বিপরীত সত্যের আরও কাছাকাছি - কীভাবে আপনার দৃষ্টিভঙ্গি বদলে যায় মজার!)
এখন আপনি বলতে পারেন যে এটি কেবল একটি খুব সাধারণ স্তর, তবে বিমূর্ততার প্রতিটি স্তর যা আমরা আমাদের সিস্টেমগুলিতে যুক্ত করি তাতে জটিলতা বাড়ে । আমি সত্যিই মনে করি না যে এক্সএমএল আমি যে কোনও সিস্টেমে কাজ করেছি তাতে কোনও আসল মান যুক্ত করেছে।
বেশিরভাগ সিস্টেমে আমি এর সাথে কাজ করেছি কেবলমাত্র উত্পাদন রানটাইম পরিবেশের একটি কনফিগারেশন রয়েছে। পরীক্ষার জন্য অন্যান্য কনফিগারেশন ইত্যাদিও থাকতে পারে।
আমি বলব যে সম্পূর্ণ অটোরিয়িং হ'ল বসন্তের রুবি-অন-রেলস: এটি এমন ধারণাটি গ্রহণ করে যে একটি সাধারণ এবং সাধারণ ব্যবহারের ধরণ রয়েছে যা বেশিরভাগ ব্যবহারের ক্ষেত্রে অনুসরণ করা হয়। এক্সএমএল কনফিগারেশন আপনি অনুমতি যে / অভিপ্রেত হতে পারে সামঞ্জস্যপূর্ণ / অসঙ্গত কনফিগারেশন ব্যবহার অনেক। আমি দেখতে পেয়েছি যে অনেক এক্সএমএল কনফিগারেশনটি অসঙ্গতিগুলির সাথে ওভারবোর্ডে যায় - কোডের সাথে কি এটি একসাথে রিফ্যাক্টর হয়? না চিন্তা. এই কারণগুলি কি কোনও কারণে রয়েছে? সাধারণত না।
আমরা আমাদের কনফিগারেশনে খুব কমই বাছাইপর্ব ব্যবহার করেছি এবং এই পরিস্থিতিগুলি সমাধান করার জন্য অন্যান্য উপায় খুঁজে পেয়েছি। এটি আমাদের একটি স্পষ্ট "অসুবিধা" যার মুখোমুখি: আমরা এটিকে অটোয়ারিংয়ের সাথে মসৃণ ইন্টারেক্ট করার জন্য কোড করার পদ্ধতিটি কিছুটা পরিবর্তন করেছি: গ্রাহক সংগ্রহস্থল আর জেনেরিক Repository<Customer>
ইন্টারফেস প্রয়োগ করে না তবে আমরা একটি ইন্টারফেস তৈরি করিCustomerRepository
যা প্রসারিত হয় Repository<Customer>
। সাব-ক্লাসিংয়ের ক্ষেত্রে কখনও কখনও একটি কৌশল বা দুটিও থাকে। তবে এটি সাধারণত আমাদের আরও শক্তিশালী টাইপিংয়ের দিকে নির্দেশ করে, যা আমি পাই প্রায়শই একটি ভাল সমাধান।
তবে হ্যাঁ, আপনি ডিআই এর একটি নির্দিষ্ট স্টাইলে বেঁধে দিচ্ছেন যা বেশিরভাগ বসন্তে। আমরা এমনকি নির্ভরতার জন্য সর্বজনীন সেটটারগুলি আর করি না (সুতরাং আপনি তর্ক করতে পারেন যে আমরা এনক্যাপসুলেশন / তথ্য গোপনীয়করণ বিভাগে +1 করছি) আমাদের সিস্টেমে এখনও কিছু এক্সএমএল রয়েছে , তবে এক্সএমএলটি মূলত কেবলমাত্র ব্যতিক্রমগুলি ধারণ করে। সম্পূর্ণ অটোয়রিং xML এর সাথে দুর্দান্তভাবে সংহত করে।
আমাদের এখন প্রয়োজন কেবলমাত্র একটিটির জন্য @Component
, @Autowired
এবং বাকিগুলি জেএসআর-তে অন্তর্ভুক্ত করা হবে ( জেএসআর-250 ) যেমন আমাদের বসন্তের সাথে জোটে না। অতীতে ঘটনাগুলি এভাবেই ঘটেছিল ( java.util.concurrent
স্টাফগুলি মনে মনে স্প্রিংস), সুতরাং এটি আবার ঘটলে আমি পুরোপুরি অবাক হব না।