Ein Feature, das in einen Ordner passt
LaraBoom hält Resource, Felder und Service nebeneinander. Host-routes und app/Http sind Ordner, die ich nicht anlege.
Einen Morgen habe ich einen Notes-Bild-Bug durch fünf Laravel-Bäume gejagt. Model in app/Models, Controller in app/Http, FormRequest daneben, Service in app/Services, Seeder in database. Der Upload-Pfad in einer Datei passte nicht zur URL, die das Vue-Raster erwartete. Host-routes/ und app/Http waren die Ordner, die den Mismatch versteckten.
LaraBoom legt Definition, Attribute und Service nach Resources/Note. Routen ebenso unter Routes/Auth. Die Host-App hat kein routes/, kein app/Http, kein top-level Services. JSON bleibt unter /api.
Der Besucher sah das Ordnerlayout nicht. Ich schon, jedes Mal wenn eine Kachel auf eine Datei zeigte, die die Route woanders gespeichert hatte. Das ist kein Geschmack. Das ist die Regel, damit ein kleines Portfolio kein zweites Framework im ersten züchtet.
Was der Service besitzt
Bildspeicher, Normalisierung und Seed-Zeilen verließen die Route-Bodies und saßen im Service. Eine Route liest sich als validieren, Service rufen, Resource zurückgeben. Zwei doppelte Bild-Normalisierer wurden sichtbar und zusammengelegt.
Der nächste Schnitt ist Größe. Ein Service, der Dateien speichert und HTML formatiert, sind zwei Jobs. Die Grenze folgt den Daten, nicht dem Screen. Notes-Bilder bleiben bei Note. Auth-Cookies bei Auth. Einen SharedImageService lege ich erst an, wenn eine dritte Resource dieselben zehn Zeilen kopiert.
Als HTML-Sanitize neben Redis-Listenkeys im selben Service lag, hing ein Cache-Flush an einem DOM-Helper. Der Flush-Test fiel bei einer String-Änderung in einer Figure-Caption. Colocation ist nicht eine Datei für das ganze Produkt. Es ist ein Ordner pro Resource und ein Service, der noch einen Job hat.
Seeds als Spezifikation
Jede Seed-Zeile trägt en, ru und de. Das fing ein Formular, das nur die aktive Locale speicherte und die anderen zwei verwarf. Es übt auch das Raster: kurze Titel, lange, fehlende Bilder, jede Kachelgröße.
Der Preis ist, drei Sprachen per Hand zu halten. Die Regel: keine leere Locale in einer Seed-Zeile, und ein Test prüft das. Wuchs die Service-Datei über einen Screen Seed-HTML, wanderten die Artikel nach Note/Articles. Das ist schon passiert. Die Resource-Datei blieb klein.
Demo-Muster im Package sind die andere Hälfte der Spezifikation. Erfindet der Host einen Controller-Namespace, kopiert das nächste Feature ihn. Ich lese zuerst die Demo-Resource, dann kommt ein Host-Ordner in derselben Form. Tests treffen /api, keine benannte Route-Gruppe, die ich in routes/web.php neu bauen müsste.
Was ich daraus mitnehme
Wenn ein Feature bricht, öffne ich einen Ordner. Brauche ich fünf Bäume für den Bildpfad, hat das Feature die LaraBoom-Form schon verlassen.
Einem Host-app/Http und einem Shared-Service für zwei Kopien von zehn Zeilen traue ich nicht. Die Route validiert, der Service arbeitet, die Resource liefert JSON unter /api.
Die Regel, die ich behalte: alle drei Locales seeden, Artikel-HTML aus dem Service nehmen, wenn es nicht mehr auf einen Screen passt, Demo folgen. Kein zweites Framework im Host.
