मुझे पता है कि यह पुराना है, लेकिन Dr8k का जवाब लगभग वहाँ था ।
जब आप कोड का एक टुकड़ा लिखने पर विचार कर रहे हों, तो मान लें कि यह बदलने वाला है। इसका मतलब यह नहीं है कि आप भविष्य में किसी बिंदु पर उस पर उस प्रकार के बदलावों को मान रहे हैं, जो उस पर फहराए गए होंगे, बल्कि यह कि कुछ परिवर्तन किया जाएगा।
इसे एक लक्ष्य बनाएं भविष्य में परिवर्तन करने के दर्द को कम करें: एक वैश्विक खतरनाक है क्योंकि एक ही स्थान पर प्रबंधन करना मुश्किल है। क्या होगा अगर मैं भविष्य में उस डेटाबेस कनेक्शन संदर्भ को जागरूक करना चाहता हूं? क्या होगा अगर मैं चाहता हूं कि इसे हर 5 वीं बार बंद और फिर से खोल दिया जाए। क्या होगा यदि मैं यह तय करूं कि अपने ऐप को स्केल करने के हित में मैं 10 कनेक्शनों के पूल का उपयोग करना चाहता हूं? या कनेक्शन की एक विन्यास संख्या?
एक सिंगलटन फैक्ट्री आपको वह लचीलापन देती है। मैंने इसे बहुत कम अतिरिक्त जटिलता के साथ स्थापित किया और एक ही कनेक्शन तक पहुंच से अधिक प्राप्त किया; मैं इस बात को बदलने की क्षमता हासिल करता हूं कि बाद में एक साधारण तरीके से मेरे लिए कैसे कनेक्शन को पारित किया गया।
ध्यान दें कि मैं केवल सिंगलटन के विपरीत सिंगलटन फैक्ट्री को कहता हूं । एक सिंगलटन और एक वैश्विक, सच के बीच बहुत कम अंतर है। और उसके कारण, एक सिंगलटन कनेक्शन होने का कोई कारण नहीं है: जब आप इसके बजाय एक नियमित वैश्विक बना सकते हैं तो आप उस समय को क्यों सेट करेंगे?
आपको कौन सी फैक्ट्री मिलती है, आपको कनेक्शन प्राप्त करने के लिए एक क्यों है, और यह तय करने के लिए कि आपको क्या कनेक्शन (या कनेक्शन) मिलना है।
उदाहरण
class ConnectionFactory
{
private static $factory;
private $db;
public static function getFactory()
{
if (!self::$factory)
self::$factory = new ConnectionFactory(...);
return self::$factory;
}
public function getConnection() {
if (!$this->db)
$this->db = new PDO(...);
return $this->db;
}
}
function getSomething()
{
$conn = ConnectionFactory::getFactory()->getConnection();
.
.
.
}
फिर, 6 महीनों में जब आपका ऐप सुपर प्रसिद्ध है और डगिंग और स्लेशडॉट हो रहा है और आप तय करते हैं कि आपको एक से अधिक कनेक्शन की आवश्यकता है, तो आपको बस यह करना होगा कि गेटकनेक्शन () विधि में कुछ पूलिंग को लागू करें। या यदि आप तय करते हैं कि आप SQL लॉगिंग को लागू करने वाला रैपर चाहते हैं, तो आप PDO उपवर्ग पास कर सकते हैं। या यदि आप तय करते हैं कि आप हर आह्वान पर एक नया कनेक्शन चाहते हैं, तो आप ऐसा कर सकते हैं। यह कठोर होने के बजाय लचीली है।
कोड की 16 पंक्तियाँ, जिसमें ब्रेसिज़ भी शामिल हैं, जो आपको घंटों और घंटों और घंटों को बचाने के लिए लाइन से नीचे समान रूप से कुछ करने के लिए बचाएगी।
ध्यान दें कि मैं इस "फ़ीचर क्रीप" पर विचार नहीं करता क्योंकि मैं पहले गो राउंड में कोई फीचर लागू नहीं कर रहा हूँ। यह सीमा रेखा "फ्यूचर क्रीप" है, लेकिन कुछ बिंदु पर, यह विचार कि "कल के लिए कोडिंग" हमेशा एक बुरी चीज होती है, जो मेरे लिए मजाक नहीं करती।