Chcę (w tym momencie) przestrzegać zasad SOLID, ale mój umysł się rozwali.Laravel SOLID przy użyciu wzorca repozytorium
Przeczytałem wiele postów o Wzorze repozytorium w Laravel, aby przestrzegać zasad SOLID. Moje pytanie jest bardzo podobne do this question. Ale ja nie rozumiem jak można nie naruszają otwarte/zamknięte Principal w Wzorca Fabryki
Zajmuję system Two Factor Authentication i mam wiele metod do wykorzystania jako TFA.
Teraz:
- Authenticator App
- SMS
skok Let do kodu:
Kontroler: (bez fabrycznie)
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);
}
klasa TwoFactorMethod:
public function process($user, MethodInterface $method)
{
return $method->process($user);
}
Każda metoda ma swoje własne klasy. W porządku. Ale jeśli chcę dodać nową metodę, taką jak: E-mail, zepsuję OCP w klasie za pomocą przełącznika.
Jak mogę "naprawić"? Czy to po prostu nieporozumienie z mojej strony?
Dziękujemy!
Możesz użyć kontenera usługowego Laravel. Utwórz powiązanie, np. 'app() -> bind (" tfa.authenticator ", Authenticator :: class)' i 'app() -> bind (" tfa.sms ", SMS :: class)', a następnie możesz uzyskać poprawny z 'app() -> make (" tfa. ". $ request-> method)' bez potrzeby przełączania, po prostu dodawaj wiązania, gdy obsługujesz więcej metod (i nie powiodło się, jeśli otrzymasz null z kontenera). Czy nie rozumiem cię? – apokryfos