java - সিঙ্গলটন বিকল্প কি




design-patterns singleton (9)

Singletons মন্দ না কিন্তু নকশা প্যাটার্ন ত্রুটিপূর্ণ হয়। আমার একটি শ্রেণী রয়েছে যা আমি রানটাইম সময় কেবল এটির একটি উদাহরণ তৈরি করতে চাই তবে নির্ধারিত ফলাফলগুলি নিশ্চিত করতে ইউনিট পরীক্ষার সময় একাধিক বিচ্ছিন্ন দৃষ্টান্ত তৈরি করতে চাই।

স্প্রিং ব্যবহার করে ডি, ইত্যাদি, একটি খুব ভাল বিকল্প কিন্তু একমাত্র বিকল্প নয়।

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

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


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


আমি এখানে সুস্পষ্ট বলছি, কিন্তু আপনি স্প্রিং বা Guice যেমন একটি নির্ভরতা-ইনজেকশন ফ্রেমওয়ার্ক ব্যবহার করতে পারবেন না কেন একটি কারণ আছে? (আমি বিশ্বাস করি স্প্রিংটি এখন নেটের জন্যও উপলব্ধ।)

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

এই পদ্ধতির আমি সাধারণত গ্রহণ করি!


একটি স্ট্যাটিক শুধুমাত্র স্ট্যাটিক পদ্ধতি এবং ক্ষেত্র রয়েছে যা সম্ভব? আমি আপনার পরিস্থিতি ঠিক কি নিশ্চিত না, কিন্তু এটা খুঁজছেন মূল্য হতে পারে।


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

অন্যথায় আপনি ক্লাসের তৈরি করতে একটি ফ্যাক্টরি ব্যবহার করতে পারেন এবং যখনই আপনি অনুরোধ করেন তখন একই দৃষ্টান্তটি ফেরত পাঠাতে পারেন - কিন্তু পরীক্ষার জন্য এটি একটি স্টাবড / মকড সংস্করণ ফেরত দিতে পারে


বিকল্পটি বস্তুর জন্য একটি বস্তু জিজ্ঞাসা করার পরিবর্তে আপনার যা প্রয়োজন তা পাস করছে।


সর্বোত্তম উপায় পরিবর্তে একটি কারখানা প্যাটার্ন ব্যবহার করা হয়। যখন আপনি আপনার বর্গের একটি নতুন উদাহরণ (কারখানায়) তৈরি করেন তখন আপনি নতুন তৈরি বস্তুর মধ্যে 'বিশ্বব্যাপী' তথ্য সন্নিবেশ করতে পারেন, হয় একটি উদাহরণের (যা আপনি কারখানার শ্রেণীতে সঞ্চয় করেন) একটি রেফারেন্স হিসাবে বা প্রাসঙ্গিক কপি করে নতুন বস্তুর মধ্যে তথ্য।

আপনার সমস্ত বস্তু তারপর এককটিতে থাকা ডেটা ধারণ করবে। আমি মোটামুটি একটি পার্থক্য অনেক আছে মনে হয় না, কিন্তু এটি আপনার কোড সহজ পড়তে করতে পারেন।


গুগল টেস্টিং ব্লগে সিঙ্গলটন এড়িয়ে চলার একটি সিরিজ রয়েছে (পরীক্ষাযোগ্য কোড তৈরি করার জন্য)। হয়তো এটি আপনাকে সাহায্য করতে পারে:

সর্বশেষ নিবন্ধটি বিস্তারিতভাবে ব্যাখ্যা করে কিভাবে নতুন বস্তুর একটি কারখানায় রূপান্তর করা যায়, যাতে আপনি একক ব্যবহারগুলি এড়াতে পারেন। নিশ্চিত জন্য পড়া মূল্যবান।

সংক্ষেপে আমরা সব নতুন অপারেটর একটি কারখানা থেকে সরানো। আমরা একটি একক কারখানায় একই জীবনকাল সব বস্তু গ্রুপ।


আপনি স্প্রিং ফ্রেমওয়ার্ক ব্যবহার করেন, আপনি শুধু একটি নিয়মিত শিম তৈরি করতে পারেন। ডিফল্টরূপে (অথবা আপনি যদি স্পষ্টভাবে scope="singleton" সেট করেন) scope="singleton" একমাত্র উদাহরণ তৈরি করা হয় এবং প্রতি বার কোনও নির্ভরতাতে শিম ব্যবহার করা হয় বা getBean() মাধ্যমে পুনরুদ্ধার করা হয়।

আপনি একক দৃষ্টান্তের সুবিধা পাবেন, সিঙ্গলটন প্যাটার্নের সংযোগ ছাড়া।





singleton