का उपयोग करके लैरावेल सोलीड मैं सोलिड सिद्धांतों का पालन करने के लिए (इस पल में) चाहता हूं, लेकिन मेरा दिमाग उड़ाएगा।रेस्पोजिटरी पैटर्न
मैंने रिपोर्टर पैटर्न को लारवेल में सोलिड सिद्धांतों का पालन करने के लिए बहुत सी पोस्ट पढ़ीं। मेरा प्रश्न this question के समान है। लेकिन मुझे समझ नहीं आता कि कैसे मैं फैक्टरी पैटर्न
मैं एक दो फैक्टर प्रमाणीकरण प्रणाली विकसित कर रहा हूँ में खुला/बंद प्रधान का उल्लंघन नहीं करते कर सकते हैं और मैं TFA के रूप में उपयोग करने के लिए कई तरीके होते है।
अब अधिकार:
- प्रमाणक ऐप्स
- एसएमएस
कोड के लिए आइए कूद:
नियंत्रक: (कारखाने के बिना)
public function index(Request $request)
{
// Violate the OCP. I'm modyfing the class.
switch ($request->method) {
case 'authenticator':
$tfaMethod = new Authenticator;
break;
case 'sms':
$tfaMethod = new SMS;
break;
}
return (new TwoFactorMethod)->process($this->currentUser, $tfaMethod);
}
TwoFactorMethod वर्ग:
public function process($user, MethodInterface $method)
{
return $method->process($user);
}
प्रत्येक विधि अपने ही वर्ग है। यह ठीक है। लेकिन अगर मैं एक नई विधि जोड़ना चाहता हूं, जैसे: ई-मेल मैं स्विच केस का उपयोग कर कक्षा में ओसीपी तोड़ दूंगा।
मैं "ठीक" कैसे कर सकता हूं? या सिर्फ मेरी तरफ से एक गलतफहमी है?
धन्यवाद!
आप लार्वेल के सेवा कंटेनर का उपयोग कर सकते हैं। उदाहरण के लिए बाध्यकारी बनाएं 'ऐप() -> बाइंड (" tfa.authenticator ", प्रमाणीकरणकर्ता :: वर्ग)' और 'ऐप() -> बाइंड (" tfa.sms ", एसएमएस :: कक्षा) 'और फिर आप सही एक प्राप्त कर सकते हैं 'ऐप() -> बनाना (" tfa। "। $ request-> विधि) 'स्विच करने की आवश्यकता के बिना, जब आप अधिक विधियों का समर्थन करते हैं तो बस बाइंडिंग जोड़ें (और अगर आप कंटेनर से शून्य हो जाते हैं तो विफल हो जाते हैं)। या क्या मैं आपको गलत समझ रहा हूँ? – apokryfos