design patterns - Singletons সম্পর্কে এত খারাপ কি?




design-patterns (20)

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

স্ট্যাক ওভারফ্লো বিশেষ করে একমত যে প্রত্যেকেই একমত যে একালেটগুলি মন্দ। কেন?

"উত্তর , রেফারেন্স, বা নির্দিষ্ট দক্ষতার " সাথে আপনার উত্তর সমর্থন করুন।


সিঙ্গলটন একক ঘটনা সম্পর্কে নয়!

অন্যান্য উত্তরগুলির বিপরীতে আমি সিঙ্গলনগুলির সাথে কী ভুল বলছি তা নিয়ে কথা বলতে চাই না কিন্তু সঠিকভাবে ব্যবহার করার সময় তারা কতটা শক্তিশালী এবং সন্ত্রস্ত তা দেখায়!

  • সমস্যা : একাধিক থ্রেডিং পরিবেশে একক চ্যালেঞ্জ হতে পারে
    সমাধান : আপনার সিঙ্গল্টনের সমস্ত নির্ভরতা আরম্ভ করতে একটি একক থ্রেডেড বুটস্ট্র্যাপ প্রক্রিয়া ব্যবহার করুন।
  • সমস্যা : একলা ঠাট্টা করা কঠিন।
    সমাধান : mocking জন্য পদ্ধতি Factory প্যাটার্ন ব্যবহার করুন
    MyModel myModel = Factory.inject(MyModel.class); আপনি MyModel কে TestMyModel ক্লাসে MyModel পারেন যা এটি উত্তরাধিকারী করে, সর্বত্র যখন MyModel ইনজেক্ট করা হবে তখন আপনি MyModel পাবেন।
  • সমস্যা : তারা কখনও নিষ্পত্তি হিসাবে Singletons মেমরি leeks হতে পারে।
    সমাধান : ঠিক আছে, তাদের নিষ্পত্তি! আপনার অ্যাপের একটি কলব্যাকটি সঠিকভাবে একটি এককোনগুলির নিষ্পত্তি করার জন্য, তাদের সাথে সম্পর্কিত কোনও তথ্য মুছে ফেলতে হবে এবং অবশেষে: তাদেরকে ফ্যাক্টরী থেকে সরিয়ে দিন।

আমি শিরোনাম সিঙ্গল্ট এ বিবৃত হিসাবে একক ঘটনা সম্পর্কে না।

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

  1. এটি সহজেই (ab) একটি বৈশ্বিক পরিবর্তনশীল হিসাবে ব্যবহৃত হয়।
  2. একক উপর নির্ভর করে যে ক্লাস বিচ্ছিন্নতা ইউনিট পরীক্ষা তুলনামূলকভাবে কঠিন।

Singletons সম্পর্কে বরং একটি খারাপ জিনিস আপনি খুব সহজেই তাদের প্রসারিত করতে পারবেন না। আপনি যদি তাদের আচরণ পরিবর্তন করতে চান তবে আপনি মূলত কোন ধরণের শোভাকর প্যাটার্ন বা কিছু জিনিস তৈরি করতে হবে। এছাড়াও, যদি একদিন আপনি এক জিনিস করার একাধিক উপায় চান তবে আপনার কোডটি কিভাবে রেখেছেন তার উপর নির্ভর করে এটি পরিবর্তনের বদলে বেদনাদায়ক হতে পারে।

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

তাই মূলত:

public MyConstructor(Singleton singleton) {
    this.singleton = singleton;
}

বরং:

public MyConstructor() {
    this.singleton = Singleton.getInstance();
}

আমি এই ধরনের প্যাটার্ন নির্ভরতা ইনজেকশন বলা হয় এবং সাধারণত একটি ভাল জিনিস বলে মনে করা হয়।

যদিও কোন প্যাটার্ন লেগেছে ... এটি নিয়ে চিন্তা করুন এবং বিবেচনা করুন যে প্রদত্ত অবস্থায় এটির ব্যবহার অনুপযুক্ত কিনা বা না ... নিয়মগুলি ভাঙ্গার জন্য নিয়মগুলি তৈরি করা হয়, এবং patterns নিঃসন্দেহে নির্বিশেষে প্রয়োগ করা উচিত নয়।


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

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


আমি ভাল / মন্দ যুক্তি নিয়ে মন্তব্য করতে যাচ্ছি না, কিন্তু Spring আসার পর থেকেই আমি তাদের ব্যবহার করিনি। নির্ভরতা ইনজেকশন ব্যবহার করে বেশিরভাগই সিঙ্গল্টন, servicelocators এবং কারখানা জন্য আমার প্রয়োজনীয়তা মুছে ফেলা হয়েছে। আমি এটি একটি খুব বেশি উত্পাদনশীল এবং পরিচ্ছন্ন পরিবেশ খুঁজে পাই, অন্তত আমি যে কাজটি করি তা (জাভা-ভিত্তিক ওয়েব অ্যাপ্লিকেশন)।


এককোন প্যাটার্ন নিজেই একটি সমস্যা নয়। সমস্যাটি হ'ল প্যাটার্নটি প্রায়ই OO ধারণার দৃঢ় উপলব্ধি ছাড়াই অবজেক্ট-ভিত্তিক সরঞ্জামগুলির সাহায্যে সফটওয়্যার বিকাশকারীদের দ্বারা ব্যবহৃত হয়। যখন এই প্রসঙ্গে একত্রিত করা হয় তখন তারা অপ্রয়োজনীয় ক্লাসে হ্রাস পায় যা প্রতিটি সামান্য ব্যবহারের জন্য সহায়ক পদ্ধতি ধারণ করে।

Singletons একটি পরীক্ষার দৃষ্টিকোণ থেকে একটি সমস্যা। তারা পৃথক ইউনিট পরীক্ষা লিখতে কঠিন ঝোঁক। কন্ট্রোল ইনভারশন (আইওসি) এবং নির্ভরতা ইনজেকশনটি এমন একটি বস্তু-ভিত্তিক পদ্ধতিতে এই সমস্যাটি অতিক্রম করতে নিদর্শন যা নিখুঁত ইউনিট পরীক্ষায় ধার দেয়।

একটি আবর্জনা সংগৃহীত পরিবেশে একত্রে মেমোরি ব্যবস্থাপনা সম্পর্কিত দ্রুত একটি সমস্যা হতে পারে।

একাধিক-থ্রেডেড দৃশ্যকল্প রয়েছে যেখানে সিঙ্গলনগুলি একটি বাধা এবং সেইসাথে সিঙ্ক্রোনাইজেশান সমস্যা হয়ে উঠতে পারে।


এটি ক্লাস্টার আসে যখন Singletons এছাড়াও খারাপ। তারপরে, তারপরে আপনার অ্যাপ্লিকেশনে এখন "একক সিঙ্গল্টন" নেই।

নিম্নলিখিত পরিস্থিতি বিবেচনা করুন: একটি বিকাশকারী হিসাবে, আপনাকে একটি ওয়েব অ্যাপ্লিকেশন তৈরি করতে হবে যা একটি ডাটাবেস অ্যাক্সেস করে। সমান্তরাল ডাটাবেস কল একে অপরের দ্বন্দ্ব না নিশ্চিত করার জন্য, আপনি একটি থ্রেড-সংরক্ষণ SingletonDao :

public class SingletonDao {
    // songleton's static variable and getInstance() method etc. omitted
    public void writeXYZ(...){
        synchronized(...){
            // some database writing operations...
        }
    }
}

সুতরাং আপনি নিশ্চিত যে আপনার অ্যাপ্লিকেশনে শুধুমাত্র একক্টোন বিদ্যমান এবং সমস্ত ডেটাবেস এই এক এবং SingletonDao মাধ্যমে চলে। আপনার উত্পাদন পরিবেশ এখন এই মত দেখাচ্ছে:

সবকিছু এতদূর জরিমানা।

এখন, আপনি একটি ক্লাস্টার আপনার ওয়েব অ্যাপ্লিকেশন একাধিক দৃষ্টান্ত স্থাপন করতে চান বিবেচনা করুন। এখন, আপনি হঠাৎ এই মত কিছু আছে:

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

অবশ্যই এটি একটি সিঙ্গলটন একটি খারাপ ব্যবহার উদাহরণ। কিন্তু এই উদাহরণের বার্তাটি হল: আপনি নির্ভর করতে পারেন না যে আপনার অ্যাপ্লিকেশনের এককটিনের একমাত্র উদাহরণ রয়েছে - বিশেষত যখন এটি ক্লাস্টারিংয়ের ক্ষেত্রে আসে।


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

একটি ক্লাসের একক উদাহরণ ব্যবহার করে আপনি যতক্ষণ কোডে নিম্নোক্ত উপায়ে প্রয়োগ করেন ততক্ষণ একটি বৈধ গঠন হয়:

  1. একটি সিঙ্গল্টন হিসাবে ব্যবহার করা হবে যে ক্লাস একটি ইন্টারফেস প্রয়োগ নিশ্চিত করুন। এটি stubs বা mocks একই ইন্টারফেস ব্যবহার করে প্রয়োগ করা যাবে

  2. সিঙ্গলটন থ্রেড-নিরাপদ কিনা তা নিশ্চিত করুন। যে একটি দেওয়া।

  3. এককটিন প্রকৃতির সহজ এবং জটিলভাবে জটিল হওয়া উচিত নয়।

  4. আপনার অ্যাপ্লিকেশনের রানটাইম চলাকালীন, যেখানে কোন একক বস্তুতে একত্রিত হওয়া দরকার, সেই বস্তুটি তৈরি করে এমন একটি ক্লাস কারখানা ব্যবহার করুন এবং ক্লাসের কারখানার এটির প্রয়োজন এমন ক্লাসে সিঙ্গলটন উদাহরণ প্রেরণ করুন।

  5. পরীক্ষার সময় এবং নির্ধারক আচরণ নিশ্চিত করার জন্য, একক শ্রেণী হিসাবে তৈরি করুন প্রকৃত ক্লাস নিজেই বা একটি স্টাব / মক যা তার আচরণ প্রয়োগ করে এবং এটির প্রয়োজন অনুসারে ক্লাসটিকে পাস করে। ক্লাসের ফ্যাক্টরটি ব্যবহার করবেন না যা পরীক্ষার সময় ঐক্যটি তৈরি করে পরীক্ষা করে যা সিঙ্গলটন পরীক্ষার সময় এটির একমাত্র বিশ্বব্যাপী উদাহরণ পাস করবে যা উদ্দেশ্যটিকে পরাজিত করে।

আমরা সমান্তরাল পরীক্ষার রান স্ট্রিমগুলির মধ্যে নির্ধারিত আচরণ নিশ্চিত করার জন্য পরীক্ষার যোগ্য যা প্রচুর সাফল্যের সাথে আমাদের সমাধানগুলিতে সিলেটট্যান্স ব্যবহার করেছি।


গুগল থেকে মিক্সো হেভিরি, এই বিষয়ে ঠিক কিছু আকর্ষণীয় নিবন্ধ আছে ...

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

Singletons বৈশ্বিক রাষ্ট্র আর কিছুই নেই। বিশ্বব্যাপী রাষ্ট্র এটি করে তোলে যাতে আপনার বস্তুগুলি গোপনভাবে তাদের API এ ঘোষিত নয় এমন জিনিসগুলিকে ধরে রাখতে পারে এবং ফলস্বরূপ, সিঙ্গলনগুলি আপনার API কে রোগী মিথ্যাবাদীগুলিতে করে তোলে।

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


ব্রায়ান বোতাম থেকে paraphrased:

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

  2. তারা একক দায়িত্ব নীতির লঙ্ঘন করে: তারা নিজেদের সৃষ্টি এবং জীবনচক্র নিয়ন্ত্রণ করে এই সত্যের দ্বারা।

  3. তারা স্বতঃস্ফূর্তভাবে কোড শক্তভাবে coupled হতে হবে। এই পরীক্ষার অধীনে বরং অনেক ক্ষেত্রে কঠিন তাদের খুঁজে faking করে তোলে।

  4. তারা আবেদন জীবনকাল জন্য প্রায় রাষ্ট্র বহন। পরীক্ষার আরেকটি আঘাত, যেহেতু আপনি এমন পরিস্থিতির সাথে শেষ করতে পারেন যেখানে পরীক্ষার আদেশ দেওয়া দরকার যা ইউনিট পরীক্ষাগুলির জন্য বড় নয়। কেন? কারণ প্রতিটি ইউনিট পরীক্ষা অন্য থেকে স্বাধীন হতে হবে।


উইকিপিডিয়া Singleton_pattern দেখুন

এটি কিছু লোকের দ্বারা একটি বিরোধী-প্যাটার্ন হিসাবে বিবেচিত হয়, যারা মনে করেন যে এটি অতিরিক্ত ব্যবহার করা হয়েছে, এমন পরিস্থিতিতে অপ্রয়োজনীয় সীমাবদ্ধতা প্রবর্তন করা যেখানে একটি শ্রেণীর একমাত্র উদাহরণ আসলে প্রয়োজন হয় না। [1] [2] [3] [4]

রেফারেন্স (নিবন্ধ থেকে শুধুমাত্র প্রাসঙ্গিক রেফারেন্স)

  1. ^ অ্যালেক্স মিলার। প্যাটার্নস আমি ঘৃণা করি # 1: সিঙ্গলটন , জুলাই 2007
  2. ^ স্কট ডেন্সমোর। কেন একক খারাপ , মে 2004
  3. ^ স্টিভ Yegge। সিঙ্গলেটস বুদ্ধিমান বিবেচিত , সেপ্টেম্বর 2004
  4. ↑ জেবি রেনসবার্গার, আইবিএম। জুলাই ২001, আপনার বুদ্ধিগুলি বিজ্ঞতার সাথে ব্যবহার করুন

ভিনস হাস্টন এই মানদণ্ডটি আমার কাছে যুক্তিসঙ্গত বলে মনে করেন:

নিম্নলিখিত তিনটি মানদণ্ড সন্তুষ্ট হলে একাটনের বিবেচনা করা উচিত:

  • একক দৃষ্টান্ত মালিকানা যুক্তিসঙ্গতভাবে বরাদ্দ করা যাবে না
  • অলস সূচনা আকাঙ্ক্ষিত
  • গ্লোবাল অ্যাক্সেস অন্যথায় জন্য প্রদান করা হয় না

যদি একক দৃষ্টান্তের মালিকানা, কখন এবং কিভাবে শুরু হয় এবং বিশ্বব্যাপী অ্যাক্সেস কোনও সমস্যা হয় না, তবে সিঙ্গলটন যথেষ্ট আকর্ষণীয় নয়।


Singleton একটি প্যাটার্ন এবং ব্যবহার করা যেতে পারে বা অন্য কোন টুল মত ব্যবহার করা যেতে পারে।

একটি সিঙ্গল্টনের খারাপ অংশ সাধারণত ব্যবহারকারী (অথবা আমি যা করতে পারি তা নয় এমন জিনিসের জন্য সিঙ্গল্টের অনুপযুক্ত ব্যবহার বলতে হবে)। বৃহত্তম অপরাধী একটি জাল গ্লোবাল পরিবর্তনশীল হিসাবে একটি সিঙ্গলটন ব্যবহার করা হয়।


Singletons দেখুন একটি purist বিন্দু থেকে খারাপ।

একটি প্রকট দৃষ্টিকোণ থেকে, একটি সিঙ্গলটন একটি বাণিজ্য বন্ধ উন্নয়নশীল বনাম জটিলতা

আপনি যদি আপনার অ্যাপ্লিকেশানটি জানেন যে সেগুলি খুব বেশি পরিবর্তন করবে না তবে তারা বেশ ভাল থাকবে। আপনার প্রয়োজনীয়তাগুলি যদি অপ্রত্যাশিত ভাবে পরিবর্তিত হয় (যা বেশিরভাগ ক্ষেত্রে বেশ ঠিক আছে) তাহলে আপনাকে জিনিসগুলি পুনরায় প্রতিক্রিয়া করতে হবে।

Singletons কখনও কখনও ইউনিট পরীক্ষার জটিল ।


কারণ তারা মূলত বস্তু ভিত্তিক গ্লোবাল ভেরিয়েবলগুলি অবলম্বন করে, আপনি সাধারণত আপনার ক্লাসগুলিকে এমনভাবে ডিজাইন করতে পারেন যাতে আপনার তাদের প্রয়োজন হয় না।


প্যাটার্নের সাথে স্বাভাবিকভাবেই ভুল কিছু নেই, এটি আপনার মডেলের কিছু দিকের জন্য ব্যবহৃত হচ্ছে যা সত্যিকারের একক।

আমি বিশ্বাস করি যে ব্যাকল্যাশটি তার অতিরিক্ত ব্যবহারের কারণে, যার ফলে, এটি আসলে বুঝতে এবং বাস্তবায়ন করার সবচেয়ে সহজ প্যাটার্ন।


মন্তব্য ছাড়া কোডিং এ ক্রিস রিথ দ্বারা এই বিষয়ে সাম্প্রতিক নিবন্ধ ।

দ্রষ্টব্য: মন্তব্য ছাড়া কোডিং আর বৈধ নয়। যাইহোক, লিঙ্ক করা নিবন্ধ অন্য ব্যবহারকারী দ্বারা ক্লোন করা হয়েছে।

http://geekswithblogs.net/AngelEyes/archive/2013/09/08/singleton-i-love-you-but-youre-bringing-me-down-re-uploaded.aspx


Singletons খারাপ না। বিশ্বব্যাপী অনন্য নয় এমন বিশ্বব্যাপী অনন্য কিছু করার সময় এটি শুধুমাত্র খারাপ।

যাইহোক, "অ্যাপ্লিকেশন স্কোপ পরিষেবাদি" আছে (এমন একটি বার্তা সিস্টেমের কথা মনে করুন যা উপাদানগুলিকে ইন্টারঅ্যাক্ট করে) - এটি একটি সিঙ্গল্টনের জন্য কল করে, একটি "ম্যাসেজক্যুইউ" - যে শ্রেণীটিতে একটি পাঠ্য রয়েছে "SendMessage (...)"।

আপনি তারপর সর্বত্র নিম্নলিখিত থেকে নিম্নলিখিত করতে পারেন:

MessageQueue.Current.SendMessage (নতুন মেইলআরভড মেসেজ (...));

এবং, অবশ্যই, করবেন:

MessageQueue.Current.RegisterReceiver (এই);

IMessageReceiver বাস্তবায়ন যে ক্লাসে।


অনেকগুলি ব্যক্তি এমন বস্তুগুলি রাখে যা একটি সিঙ্গল্ট প্যাটার্নে থ্রেড নিরাপদ নয়। DataContext থ্রেড নিরাপদ নয় এবং সম্পূর্ণরূপে একটি ইউনিট-অফ-ওয়ার্ক অবজেক্ট, তা সত্ত্বেও আমি একটি একক্টন প্যাটার্নে সম্পন্ন ডেটাকন্টেক্স ( LINQ to SQL ) এর উদাহরণ দেখেছি ।


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

সব পছন্দ মত, সিঙ্গলটন আপ এবং ডাউন এর তার ন্যায্য ভাগ আছে। আমি মনে করি তারা সংযম ব্যবহার করা যেতে পারে, বিশেষত এমন বস্তুর জন্য যা অ্যাপ্লিকেশন জীবনকাল বেঁচে থাকে। তারা সম্ভবত (এবং সম্ভবত) বিশ্বব্যাপী অনুরূপ purists বন্ধ সেট আছে।





singleton