php - পিএইচপি ডাটাবেস এক্সেস সঙ্গে singletons জন্য একটি ব্যবহার কেস আছে?




স্ক্রিপ্টিং ভাষা কি (8)

আমি PDO এর মাধ্যমে আমার MySQL ডাটাবেস অ্যাক্সেস। আমি ডাটাবেসের অ্যাক্সেস সেট আপ করছি, এবং আমার প্রথম প্রচেষ্টা নিম্নলিখিত ব্যবহার করতে ছিল:

আমি চিন্তা প্রথম জিনিস global :

$db = new PDO('mysql:host=127.0.0.1;dbname=toto', 'root', 'pwd');

function some_function() {
    global $db;
    $db->query('...');
}

এটি একটি খারাপ অনুশীলন বলে মনে করা হয়। সামান্য অনুসন্ধানের পর, আমি সিঙ্গলটন প্যাটার্ন দিয়ে শেষ হলাম

"এমন পরিস্থিতিতে প্রযোজ্য যেখানে ক্লাসের একক দৃষ্টান্ত থাকা দরকার।"

ম্যানুয়াল উদাহরণ অনুযায়ী, আমরা এই কাজ করা উচিত:

class Database {
    private static $instance, $db;

    private function __construct(){}

    static function singleton() {
        if(!isset(self::$instance))
            self::$instance = new __CLASS__;

        return self:$instance;
    }

    function get() {
        if(!isset(self::$db))
            self::$db = new PDO('mysql:host=127.0.0.1;dbname=toto', 'user', 'pwd')

        return self::$db;
    }
}

function some_function() {
    $db = Database::singleton();
    $db->get()->query('...');
}

some_function();

কেন আমি এই অপেক্ষাকৃত বড় বর্গ প্রয়োজন যখন?

class Database {
    private static $db;

    private function __construct(){}

    static function get() {
        if(!isset(self::$db))
            self::$db = new PDO('mysql:host=127.0.0.1;dbname=toto', 'user', 'pwd');

        return self::$db;
    }
}

function some_function() {
    Database::get()->query('...');
}

some_function();

এই শেষ এক পুরোপুরি কাজ করে এবং আমি আর $db সম্পর্কে চিন্তা করতে হবে না।

আমি কীভাবে ছোট্ট সিঙ্গল্টন ক্লাস তৈরি করতে পারি, নাকি পিএইচপিতে অনুপস্থিত একটি একক জন্য একটি কেস-কেস আছে?


Singletons খুব সামান্য আছে - যদি না বলতে না - পিএইচপি ব্যবহার করুন।

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

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

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

পিএইচপি সিলেটেনের জন্য আমার স্লাইডগুলি দেখুন - তারা কেন খারাপ এবং অতিরিক্ত তথ্যের জন্য আপনার অ্যাপ্লিকেশানগুলি থেকে তাদের কীভাবে সরাতে পারবেন

এমনকি সিঙ্গলটন প্যাটার্নের উদ্ভাবক ইরিচ গামাও আজকাল এই প্যাটার্নকে সন্দেহ করেন:

"আমি সিঙ্গলটনকে ড্রপ করার পক্ষে আছি। এর ব্যবহার প্রায়শই একটি নকশা গন্ধ"

আরও পড়া

উপরে, পরে, আপনি এখনও সিদ্ধান্ত নিতে সাহায্য প্রয়োজন:


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

আরো চিন্তাভাবনা: আপনি নিদর্শনগুলির জন্য নিরপেক্ষ নকশার একটি মামলা অনুভব করছেন এবং আপনার অন্তর আপনাকে বানানো কারণগুলির জন্য "না, আপনাকে করতে হবে না" বলছে।

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


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


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


পিএইচপি ডক্সে উপস্থাপিত এক থেকে আপনার সমাধানটি কীভাবে আলাদা হয় তা বিবেচনা করুন। প্রকৃতপক্ষে, কেবল একটি "ছোট" পার্থক্য রয়েছে: আপনার সমাধানটি PDO ইনস্ট্যান্সের সাথে PDO কলার সরবরাহ করে, যখন ডক্সগুলির মধ্যে একটি Database::singleton Database ইনস্ট্যান্সের সাথে কল করে দেয় (তারা তারপরে এটিতে গেট্টার ব্যবহার করে) একটি PDO উদাহরণ পেতে)।

সুতরাং আমরা কি উপসংহার পৌঁছাতে পারি?

  • ডকুমেন্টেশনের কোডে, কলকারীরা একটি Database উদাহরণ পায়। Database ক্লাস প্রকাশ করতে পারে (প্রকৃতপক্ষে, যদি আপনি এই সমস্ত সমস্যার জন্য যান তবে এটি প্রকাশ করা উচিত ) PDO বস্তুর তুলনায় এটি একটি সমৃদ্ধ বা উচ্চ-স্তরের ইন্টারফেস।
  • আপনি যদি PDO চেয়ে অন্য (সমৃদ্ধ) টাইপ ফিরিয়ে আনতে আপনার বাস্তবায়ন পরিবর্তন করেন তবে দুটি বাস্তবায়ন সমতুল্য। ম্যানুয়াল বাস্তবায়ন অনুসরণ থেকে আছে কোন লাভ নেই।

বাস্তব দিকে, Singleton একটি চমত্কার বিতর্কিত প্যাটার্ন। এটি প্রধানত কারণ:

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

সুতরাং, একটি চূড়ান্ত উপসংহার হিসাবে: আপনার সিঙ্গলটন ঠিক সূক্ষ্ম। এককভাবে সিঙ্গলটন ব্যবহার করা ঠিক সময়ে বেশিরভাগ সময়ই জরিমানা।


প্রথমত, আমি শুধু বলতে চাই যে সিঙ্গল্টন প্যাটার্নে আমি অনেক বেশি ব্যবহার করি না। কেন এক একক বস্তু পুরো আবেদন পুঙ্খানুপুঙ্খ রাখতে চান? বিশেষ করে ডাটাবেসের জন্য, যদি আমি অন্য ডাটাবেস সার্ভারের সাথে সংযোগ করতে চাই? আমি সংযোগ বিচ্ছিন্ন করতে এবং পুনঃসংযোগ করতে হবে ...? যাই হোক ...

অ্যাপ্লিকেশনটিতে গ্লোবাল ব্যবহার করার জন্য বেশ কয়েকটি ত্রুটি রয়েছে (যা সিঙ্গলন প্যাটার্নের ঐতিহ্যগত ব্যবহার যা করে):

  • ইউনিট পরীক্ষা কঠিন
  • নির্ভরতা ইনজেকশন সমস্যা
  • লকিং সমস্যা তৈরি করতে পারেন (মাল্টি থ্রেড অ্যাপ্লিকেশন)

সিঙ্গলটন ইনস্ট্যান্সের পরিবর্তে স্ট্যাটিক ক্লাসগুলি ব্যবহার করুন একই রকম ত্রুটিগুলিও প্রদান করে, কারণ getInstance সবচেয়ে বড় সমস্যা স্ট্যাটিক getInstance পদ্ধতি।

আপনি ঐতিহ্যগত getInstance পদ্ধতি ব্যবহার করে একটি ক্লাস থাকতে পারে উদাহরণ সংখ্যা সীমাবদ্ধ করতে পারেন:

class Single {

    static private $_instance = false;

    public function __construct() {
        if (self::$_instance)
           throw new RuntimeException('An instance of '.__CLASS__.' already exists');

        self::$_instance = true;
    }

    private function __clone() {
        throw new RuntimeException('Cannot clone a singleton class');
    }

    public function __destruct() {
        self::$_instance = false;
    }

}

$a = new Single;
$b = new Single; // error
$b = clone($a); // error
unset($a);
$b = new Single; // works

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


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

প্রশ্নের উত্তর দিতে, আপনি সঠিক যে singletons এখানে overkill হয়। একটি সহজ পরিবর্তনশীল বা ফাংশন করতে হবে। একটি ভাল (আরো জোরালো) পদ্ধতি, তবে, বিশ্বব্যাপী ভেরিয়েবলগুলির সামগ্রিকভাবে প্রয়োজনীয়তা মুছে ফেলার জন্য নির্ভরতা ইনজেকশন ব্যবহার করতে হবে।


কে পিএইচপি singletons প্রয়োজন?

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

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

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

- তৃতীয় পক্ষের APIs , পরিষেবাদি এবং ওয়েবসাইটগুলির সাথে কাজ করার প্রয়োজন যারা।

আপনি যদি আরও ঘনিষ্ঠ হন তবে এটি পূর্বের ক্ষেত্রে তুলনায় অনেক ভিন্ন নয় - তৃতীয় পক্ষের APIs, পরিষেবাদি, ওয়েবসাইটগুলি কেবল বাহ্যিক, বিচ্ছিন্ন কোডবইসগুলির মতো, যার উপর আপনার কোন নিয়ন্ত্রণ নেই। কিছু ঘটতে পারে। তাই, এককন্টন অধিবেশন / ব্যবহারকারীর ক্লাসের মাধ্যমে, আপনি তৃতীয় পক্ষের সরবরাহকারীদের যেমন OpenID , Facebook , Twitter এবং আরও অনেক কিছু থেকে সেশন / অনুমোদন বাস্তবায়ন পরিচালনা করতে পারেন - এবং আপনি একই সিঙ্গল্টন বস্তুর একই সময়ে একই কাজ করতে পারেন। যা কোনও নির্দিষ্ট বিন্দুতে যে কোনও কোডের মধ্যে আপনি প্লাগ ইন সহজে অ্যাক্সেসযোগ্য, অ্যাক্সেসযোগ্য। আপনি নিজের ওয়েবসাইট / অ্যাপ্লিকেশনটিতে একই ব্যবহারকারীর জন্য একাধিক ভিন্ন, তৃতীয়-পক্ষ API / পরিষেবাদিতে একাধিক সেশন তৈরি করতে পারেন এবং আপনি তাদের সাথে যা করতে চান তা করতে পারেন।

অবশ্যই, স্বাভাবিক শ্রেণী ও বস্তুগুলি ব্যবহার করে এই সবগুলি প্রচলিত পদ্ধতির সাথে স্বতঃস্ফূর্ত হতে পারে - এখানে ধরা হয়, সিঙ্গলটন টিডিয়র, নিয়াটার এবং তাই ঐতিহ্যগত ক্লাস / বস্তুর ব্যবহারের তুলনায় এমন পরিচালনার যোগ্য / পরীক্ষার সহজতর।

- যারা দ্রুত উন্নয়ন করতে হবে

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

আপনি ধারণা পেতে। এখন আসুন আমরা একক আপত্তিজনক এবং অপ্রয়োজনীয় ক্রুসেডকে যা কিছু দরকারী বলে অভিহিত করতে পারি :

- সর্বাধিক আপত্তি এটি পরীক্ষা কঠিন করে তোলে।

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

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

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

কিন্তু যারা তাদের 'ক্লাইল' বিকাশের নোংরা খোঁচাগুলিতে কাজ করতে চায়, তাদের ক্লায়েন্ট / ম্যানেজার / প্রকল্প থেকে বিভিন্ন অনুরোধ (কখনও কখনও অযৌক্তিক) বাস্তবায়নের জন্য, একক আগেই ব্যাখ্যা করা কারণগুলির কারণে একত্রিতার জন্য একটি সঞ্চয় অনুগ্রহ।

- আরেকটি আপত্তি হল তার মেমরি পদচিহ্ন উচ্চ

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

যদিও, এটি কোডিংয়ের সময় আপনি যে কোনও পদ্ধতির জন্য গ্রহণযোগ্য। প্রশ্নগুলি জিজ্ঞেস করা উচিত, পদ্ধতি, ডেটা যা আটকানো এবং অপ্রয়োজনীয় দ্বারা প্রক্রিয়া করা হয়? যদি তারা অনেক অনুরোধের অ্যাপ্লিকেশন জুড়ে প্রয়োজনীয় হয়, তবে আপনি যদি এককটি ব্যবহার না করেন তবেও সেই পদ্ধতি এবং ডেটা আপনার ফর্মটিতে কোডের মাধ্যমে কোন ফর্ম বা অন্যটিতে উপস্থিত থাকবে। সুতরাং, এটি একটি প্রশ্ন হয়ে দাঁড়িয়েছে যে আপনি কতটি মেমরি সংরক্ষণ করবেন, যখন আপনি একটি প্রথাগত ক্লাস অবজেক্ট 1/3 কোড প্রক্রিয়াকরণে শুরু করেন এবং এটিতে 3/4 নষ্ট করেন।

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

- কিছু অবৈধ আপত্তি যেমন 'একাধিক ডাটাবেস সংহতকরণগুলিকে অসম্ভব / কঠিন' বজায় রাখে।

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

নীচে প্রদত্ত একটি ডাটাবেস সিঙ্গল্টনের ভিতরে কল্পনা করুন:

$ এই -> সংযোগ = অ্যারে (); (ভুল সিনট্যাক্স, আমি আপনাকে ছবিটি দেওয়ার জন্য এটি ঠিক টাইপ করেছি - পরিবর্তনশীলের সঠিক ঘোষণাটি সর্বজনীন $ সংযোগ = অ্যারে () এবং এটির ব্যবহার $ - সংযোগগুলি ['সংযোগকী'] স্বাভাবিকভাবেই)

আপনি সেট আপ করতে পারেন, এবং এই ফ্যাশন একটি অ্যারে যে কোনো সময়ে একাধিক সংযোগ রাখা। এবং একই প্রশ্নের জন্য, ফলাফল সেট এবং তাই ঘোষণা।

$ এই -> জিজ্ঞাস্য (QUERYSTRING, 'queryname', $ this-> সংযোগ ['particulrconnection']);

কোন নির্বাচিত ডাটাবেসের সাথে নির্বাচিত ডাটাবেসের একটি ক্যোয়ারী যা কেবলমাত্র আপনার মধ্যে সংরক্ষণ করতে পারে

$ এই -> ফলাফল

কী 'প্রশ্নের নাম' দিয়ে অ্যারে। অবশ্যই, আপনার জন্য এই কোডটি কোড করা দরকার - যা করতে তুচ্ছ।

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

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

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

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

আপনি লক্ষ্য করবেন যে বেশিরভাগ নিবন্ধে একলাবদ্ধতাগুলি একচেটিয়া, আপনি 'গ্লোবাল' থেকে 'মন্দ' হিসাবে উল্লেখগুলি দেখতে পাবেন।

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

এর জন্য অবিরাম উদাহরণ দেওয়া যেতে পারে, 'বিশ্বব্যাপী মন্দ' থেকে 'আইফ্রেমগুলি মন্দ' পর্যন্ত। প্রায় 10 বছর আগে, যেকোনো প্রদত্ত অ্যাপ্লিকেশনে আইফ্রেমের ব্যবহার প্রস্তাব করা বৈধ ছিল। তারপর ফেসবুক, সর্বত্র iframes আসে, এবং কি ঘটেছে দেখুন - iframes আর তাই মন্দ হয় না।

এখনও এমন লোক আছে যারা জোর করে বলে যে তারা 'মন্দ' - এবং কখনও কখনও ভাল কারণেও - কিন্তু, যেমন আপনি দেখতে পারেন, সেখানে প্রয়োজন, iframes প্রয়োজন পূরণ করে এবং ভাল কাজ করে, এবং সেইজন্য সমগ্র পৃথিবী শুধু চলতে থাকে।

প্রোগ্রামার / কোডার / সফটওয়্যার ইঞ্জিনিয়ারের সর্বাধিক সম্পদ একটি মুক্ত, খোলা এবং নমনীয় মন।







singleton