Wie kann man die soliden Prinzipien in einem Laravel -Projekt umsetzen?
Jul 30, 2025 am 04:23 AMPrinzip der einzelnen Verantwortung: Jede Klasse sollte eine Verantwortung haben. Verschieben Sie daher die Gesch?ftslogik in Serviceklassen, verwenden Sie Formularanfragen zur Validierung und bew?ltigen Sie Nebenwirkungen über Ereignisse oder Jobs. 2. Offener/geschlossener Prinzip: Erweitern Sie die Funktionalit?t, ohne den vorhandenen Code durch die Verwendung von Schnittstellen und Abh?ngigkeitsinjektion zu ?ndern, z. 3.. 4. Prinzip der Schnittstellensegregation: Erstellen Sie kleine, fokussierte Schnittstellen wie UserFinder und Userupdater, sodass Clients nur von den von ihnen verwendeten Methoden abh?ngen und die Modularit?t verbessern. 5. Abh?ngigkeitsinversionsprinzip: H?ngen Sie von Abstraktionen ab, indem Schnittstellen in Module auf hoher Ebene injiziert werden, wodurch eine flexible Bindung von Implementierungen über den IOC-Beh?lter von Laravel erm?glicht wird. Die Anwendung dieser Prinzipien in Laravel verbessert die Wartbarkeit, Skalierbarkeit und Testbarkeit, indem die Trennung von Bedenken f?rdert und die Kopplung verringert wird und letztendlich verhindert, dass Controller und Modelle monolithisch werden.
Solide Prinzipien sind grundlegende objektorientierte Designkonzepte, die dazu beitragen, wartbare, skalierbare und überprüfbare Code zu erstellen. Laravel, ein modernes PHP -Framework, das auf Symfony -Komponenten basiert, bietet eine hervorragende Unterstützung für die Umsetzung dieser Prinzipien. So k?nnen Sie jedes feste Prinzip in einem Laravel -Projekt anwenden.

1. Prinzip der Einzelverantwortung (SRP)
Eine Klasse sollte nur einen Grund haben, sich zu ?ndern.
In Laravel ist es üblich, aufgebl?hte Controller oder Modelle zu viel zu sehen - die HTTP -Logik, Gesch?ftslogik, Datenbankabfragen und sogar E -Mails zu behandeln.

So wenden Sie SRP an:
- Bewegen Sie die Gesch?ftslogik aus Controllern und Modellen.
- Verwenden Sie Servicekurse für Gesch?ftslogik.
- Verwenden Sie Formularanforderungsklassen zur Validierung.
- Verwenden Sie Ereignisse/Zuh?rer oder Jobs für Nebenwirkungen (z. B. Senden von E -Mails).
Beispiel:

// App/Services/userregistrationService.php Klasse UserregistrationService { ?ffentliches Funktionsregister (Array $ Data): Benutzer { $ user = user :: create ($ data); Ereignis (neuer Benutzerregister ($ user)); $ user zurückgeben; } }
Dann in Ihrem Controller:
?ffentlicher Funktionsstore (UserRegistrationRequest $ Anfrage, userregistrationService $ Service) { $ user = $ service-> register ($ request-> validated ()); return Redirect ()-> Route ('user.show', $ user); }
Dies h?lt den Controller leicht und delegiert die Verantwortung angemessen.
2. Offener/geschlossenes Prinzip (OCP)
Die Klassen sollten für die Erweiterung ge?ffnet sein, aber für die ?nderung geschlossen werden.
Dies bedeutet, dass Sie in der Lage sein sollten, neue Funktionen hinzuzufügen, ohne den vorhandenen Code zu ?ndern.
So wenden Sie OCP in Laravel an:
- Verwenden Sie Schnittstellen und Abh?ngigkeitsinjektion .
- Nutzen Sie den Service -Container von Laravel, um Implementierungen zu binden.
Beispiel:
// eine Schnittstelle definieren Schnittstellenzahlunggateway { ?ffentliche Funktionsgebühr (Float $ Betrag): bool; } // für Stripe implementieren Klassenstreifenpayment implementiert PaymentGateway { / * ... * /} // für PayPal implementieren Klasse PayPalPayment implementiert PaymentGateway { / * ... * /}
In einem Dienstleister binden:
$ this-> app-> bind (paymentgateway :: class, stripepayment :: class);
Jetzt k?nnen Sie die Implementierung wechseln, ohne die Konsumklasse zu ?ndern:
Klasse CheckoutController { ?ffentliche Funktion __construct (geschützte Paymentgateway $ Gateway) {} ?ffentliche Funktionszahlung (Anfrage $ Anfrage) { $ this-> gateway-> Gebühr ($ Anfrage-> Betrag); // keine Code?nderung erforderlich, wenn Sie sp?ter zu PayPal wechseln } }
Sie k?nnen die Funktionalit?t erweitern, indem Sie neue Gateways hinzufügen und vorhandenen nicht ?ndern.
3. Liskov Substitution Prinzip (LSP)
Subtypen müssen durch ihre Grundtypen ersetzt werden.
Wenn Sie Vererbung (z. B. Klassen erweitern) verwenden, stellen Sie sicher, dass Kinderklassen nicht das erwartete Verhalten des Elternteils brechen.
Wie man LSP in Laravel folgt:
- Vermeiden Sie übergeordnete Methoden in einer Weise, die ihren Vertrag ?ndert.
- Schw?chen Sie die Voraussetzungen nicht oder st?rken Sie die Nachbedingungen in Kinderklassen.
Beispiel: Wenn Sie eine Basis NotificationSender
haben, stellen Sie sicher, dass sich alle Kinder (z. B. EmailSender
, SmsSender
) vorhersehbar verhalten, wenn send()
aufgerufen wird.
Vermeiden:
Die Klasse SMSSSender erweitert den Benachrichtigungsender { ?ffentliche Funktion senden ($ message, $ mail) // erwartet E -Mail, aber wir senden SMS? { // Ungültige Parameternutzung - verst??t gegen LSP } }
Stattdessen entwerfen Sie Schnittstellen, die verhaltensm??ig konsistent sind.
4. Prinzip der Schnittstellensegregation (ISP)
Kunden sollten nicht gezwungen sein, sich auf Schnittstellen zu verlassen, die sie nicht verwenden.
Erstellen Sie anstelle gro?er generischer Schnittstellen kleinere, spezifische.
So wenden Sie ISP in Laravel an:
- Erstellen Sie mit jeder Methode keine massive Repository -Schnittstelle.
- Schnittstellen durch Anwendungsfall geteilt.
Beispiel:
Schnittstelle UserFinder { ?ffentliche Funktion findById (int $ id):? Benutzer; ?ffentliche Funktion findByemail (Zeichenfolge $ E -Mail):? Benutzer; } Schnittstelle UserUpdater { ?ffentliche Funktionsaktualisierung (Benutzer $ user, Array $ data): bool; }
Jetzt h?ngt ein Dienst, der nur Benutzer finden muss, nur von UserFinder
ab, nicht von den nicht verwendeten Aktualisierungsmethoden.
Sie k?nnen immer noch eine Klasse implementieren lassen:
Klasse eloquentUSerRepository implementiert Userfinder, UserUpdater { // beide implementieren }
Aber die Verbraucher sind nur von dem angewiesen, was sie brauchen.
5. Abh?ngigkeitsinversionsprinzip (DIP)
H?ngen von Abstraktionen ab, nicht von Konkretionen.
Hochstufe Module (wie Controller oder Dienste) sollten nicht direkt von Details auf niedrigem Niveau abh?ngen (wie eloquente Modelle oder spezifische APIs).
Wie man Dip in Laravel anwendet:
- Verwenden Sie Schnittstellen und IOC -Beh?lter von Laravel .
- Injizieren Abh?ngigkeiten anstatt sie zu instanziieren.
Beispiel:
Klasse UserController erweitert den Controller { ?ffentliche Funktion __construct (geschützter Userfinder $ finder) {} ?ffentliche Funktionshow ($ id) { $ user = $ this-> finder-> findById ($ id); return view ('user.show', compact ('user')); } }
Binden Sie die Implementierung:
// AppServiceProvider.php ?ffentlicher Funktion Register () { $ this-> app-> bind (userfinder :: class, eloquentUseRepository :: class); }
Jetzt ist es dem Controller egal, wie der Benutzer gefunden wird - nur dass er gefunden werden kann.
Bonus -Tipps für Laravel
- Verwenden Sie Aktionen oder Aufgaben : Verwenden Sie für komplexe Operationen Single-Action-Klassen (z. B.
CreateOrderAction
), um die SRP-konformen Dinge zu erhalten. - Hebeljobs und Zuh?rer : Nebenwirkungen (z. B. Benachrichtigungen, Protokollierung) für Warteschl?ge oder Event -Zuh?rer.
- Repositories -Dienste : Verwenden Sie Repositories, um den Datenzugriff abstrahieren zu k?nnen, und Dienste, um die Logik zu orchestrieren.
- Vermeiden Sie Fassaden in der Gesch?ftslogik : Bevorzugen Sie die Abh?ngigkeitsinjektion gegenüber Fassaden für Testbarkeit und Klarheit.
Letzte Gedanken
Bei der Anwendung von Solid in Laravel geht es nicht um strenge Regeln - es geht darum, Code zu schreiben, das einfacher zu testen, zu ?ndern und zu skalieren ist. Die Architektur von Laravel (Service -Container, Vertr?ge, Veranstaltungen, Jobs) macht es natürlich, diese Prinzipien zu befolgen, wenn Sie Ihre App nachdenklich strukturieren.
Starten Sie klein: Reinigen Sie Controller, extrahieren Sie Logik in Dienste, verwenden Sie Schnittstellen und lassen Sie den Servicebeh?lter den Rest erledigen.
Lassen Sie sich einfach nicht zu, dass eloquente Modelle oder Controller für alles Dump -Gründe werden.
Das obige ist der detaillierte Inhalt vonWie kann man die soliden Prinzipien in einem Laravel -Projekt umsetzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen





In Laravel gibt es drei M?glichkeiten, benutzerdefinierte Validierungsregeln hinzuzufügen: Verwenden von Schlie?ungen, Regelklassen und Formularanfragen. 1. Verwenden Sie Verschlüsse, um für die leichte überprüfung geeignet zu sein, z. B. die Verhinderung des Benutzernamens "Admin". 2. Erstellen Sie Regelklassen (z. B. validusernamerule), um komplexe logische und aufrechterhalten zu machen; 3. Integrieren Sie mehrere Regeln in Formularanfragen und verwalten Sie die überprüfungslogik zentral. Gleichzeitig k?nnen Sie Eingabeaufforderungen über benutzerdefinierte Nachrichtenmethoden oder eingehende Fehlermeldungsarrays festlegen, um die Flexibilit?t und Wartbarkeit zu verbessern.

Zu den Kernmethoden für Laravel -Anwendungen zur Implementierung mehrsprachiger Unterstützung geh?ren: Einstellen von Sprachdateien, dynamischem Sprachwechsel, übersetzungs -URL -Routing und Verwaltung von übersetzungsschlüssel in Blade -Vorlagen. Organisieren Sie zun?chst die Zeichenfolgen jeder Sprache in den entsprechenden Ordnern (wie EN, ES, FR) im Verzeichnis /Ressourcen /Lang und definieren Sie den übersetzungsinhalt, indem Sie das assoziative Array zurückgeben. 2. übersetzen Sie den Schlüsselwert über den Helfer -Funktionsaufruf \ _ \ _ () und verwenden Sie App :: setLocale (), um Sitzungs- oder Routing -Parameter zu kombinieren, um das Sprachwechsel zu realisieren. 3. Für übersetzungs -URLs k?nnen Pfade für verschiedene Sprachen durch vorangestellte Routing -Gruppen definiert werden oder Alias ??in Sprachdateien dynamisch zugeordnet werden. 4.. Halten Sie die übersetzungsschlüssel pr?zise und

TOWORKEFEKTIVE Withpivottablessinlaravel, First AccesspivotDatAusing withpivot () orwithtimestamps (), dann updateEntries mit

LaravelProvidesacleanandflexiblewaytosendnotificationsViamultiPhannels-Likeemail, SMS, In-Appalerts und Pushnotifikationen

ServiceProvider ist der Kernmechanismus, der im Laravel -Framework zum Registrieren von Diensten und zur Initialisierungslogik verwendet wird. Sie k?nnen einen benutzerdefinierten ServiceProvider über den handwerklichen Befehl erstellen. 1. Die Registermethode wird verwendet, um Dienste zu binden, Singletonen zu registrieren, Aliase usw. festzulegen, und andere Dienste, die noch nicht geladen wurden, k?nnen nicht aufgerufen werden. 2. Die Boot -Methode wird ausgeführt, nachdem alle Dienste registriert wurden und zur Registrierung von Ereignish?rern, zur Anzeige von Synthesizern, Middleware und einer anderen Logik verwendet wird, die von anderen Diensten abh?ngt. Zu den gemeinsamen Verwendungen geh?ren Bindungsschnittstellen und Implementierungen, Registrieren von Fassaden, Ladekonfigurationen, Registrierung von Befehlszeilenanweisungen und Ansichtskomponenten; Es wird empfohlen, relevante Bindungen an einen ServiceProvider zu zentralisieren, um es zu verwalten und der Registrierung zu achten

Die Abh?ngigkeitsinjektion behandelt automatisch die Klassenabh?ngigkeiten über Servicebeh?lter in Laravel ohne manuelle neue Objekte. Sein Kern ist die Konstruktorinjektion und Methodeninjektion, z. B. automatisch in der Anforderungsinstanz im Controller weitergegeben. Laravel pariert Abh?ngigkeiten durch Typeingabeaufforderungen und erstellt rekursiv die erforderlichen Objekte. Die Bindungsschnittstelle und -implementierung k?nnen vom Dienstanbieter verwendet werden, um die Bind -Methode zu verwenden, oder Singleton, um einen Singleton zu binden. Wenn Sie es verwenden, müssen Sie die Eingabeaufforderungen sicherstellen, Konstruktorkomplikationen vermeiden, Kontextbindungen mit Vorsicht verwenden und automatische Parsingregeln verstehen. Das Beherrschen dieser kann die Code -Flexibilit?t und -wartung verbessern.

Die Laravel -Leistungsoptimierung kann die Anwendungseffizienz durch vier Kernrichtungen verbessern. 1. Verwenden Sie den Cache -Mechanismus, um doppelte Abfragen zu reduzieren, und speichern Sie die Daten selten über Cache :: Denken Sie daran () und andere Methoden, um die H?ufigkeit des Datenbankzugriffs zu reduzieren. 2. Die Datenbank aus dem Modell optimieren, um Anweisungen abzufragen, N 1 -Abfragen zu vermeiden, Feldabfragen anzugeben, Indizes hinzuzufügen, die Verarbeitung und Lesen von Paging und das Schreiben von Trennungen zu reduzieren und Engp?sse zu reduzieren. 3.. Verwenden Sie zeitaufw?ndige Vorg?nge wie E-Mail-Senden und Dateien exportieren in die asynchrone Warteschlangenverarbeitung, verwenden Sie den Supervisor, um Arbeitnehmer zu verwalten und Wiederholungsmechanismen einzurichten. 4. Verwenden Sie Middleware- und Dienstanbieter vernünftigerweise, um komplexe Logik- und unn?tige Initialisierungscode zu vermeiden und das Laden von Diensten zu verz?gern, um die Start -Effizienz zu verbessern.

Zu den Kernmethoden zum Umgang mit Ausnahmen und Aufzeichnungsfehlern in Laravel -Anwendungen geh?ren: 1. Verwenden Sie die App \ Ausnahmen \ Handler -Klasse, um unberührte Ausnahmen zentral zu verwalten und Ausnahmeinformationen über die Berichtsmethode () wie das Senden von Slack -Benachrichtigungen aufzunehmen oder zu benachrichtigen. 2. Konfigurieren Sie das Protokollsystem mit Monolog, setzen Sie die Protokoll- und Ausgangsmethode in config/logging.php und aktivieren Sie Fehler und über die überstufige Protokolle in der Produktionsumgebung. Gleichzeitig k?nnen detaillierte Ausnahmeinformationen in Bericht () in Kombination mit dem Kontext manuell erfasst werden. A. Passen Sie die Render () -Methode an, um eine einheitliche JSON -Formatfehlerreaktion zurückzugeben, wodurch die Zusammenarbeiteffizienz des vorderen und hinteren Ende der API verbessert wird. Diese Schritte sind
