Es ist eine sehr subjektive Frage und schwer, eine klare Antwort zu geben, aber hoffentlich kann ich dich davon abhalten, sich selbst zu hinterfragen: Was du machst, ist vollkommen in Ordnung und nicht weniger eloquent als das andere.
Persönlich mag ich, was du machst jetzt viel mehr als das, was du als "eloquenten Weg" präsentierst und schon früher in professionellen Projekten getan hast, aber letztendlich gibt es einen Unterschied in der Art, wie du den Code für ein Framework entwirfst oder Paket, das flexibel sein muss, um viele verschiedene Szenarien zu berücksichtigen, von denen die meisten Sie nicht einmal bei der ersten Version sehen können, im Gegensatz zu dem, wie Sie den Code für eine App entwerfen, die nur von sich selbst verbraucht wird. Wenn Sie die Geschäftslogik kennen, die Ihre App und die Ansichten, die sie ihren Benutzern präsentieren wird (nachfolgend die Abfragen, die sie ausführen muss), anstößt, warum würden Sie keine Methoden erstellen, die das einfach erreichen?
Eloquent beruht auf Verkettung, nicht nur weil es cool ist, sondern weil es nicht weiß (oder wissen möchte), was Ihre Geschäftslogik ist. Für mich ist der "eloquente Weg" mehr über fließenden, lesbaren Code, und ich finde, dass $user->runningMandates
besser lesbar ist als $user->mandates()->running()->accepted()->get()
.
Ich finde auch, dass der erste Ansatz leichter zu bekommen ist. Wenn Sie sich ständig dazu zwingen, Methoden zu trennen, damit sie miteinander verknüpft werden können, ist es schwieriger zu verstehen, welche Methode was macht und welche Methode davon abhängt. Abfragebereiche können die Abfrage nach Belieben ändern (Join, Alias usw.). Die Gefahr besteht also darin, dass eine Methode erfordert, dass eine andere zuerst kommt, da Sie auf einer Tabelle oder Spalte basieren, die nicht in der ursprünglichen Abfrage enthalten ist Eine Methode funktioniert nur in Verbindung mit einer anderen; oder vielleicht versuchen zwei Methoden, der gleichen Tabelle beizutreten oder dieselben Aliase zu verwenden, so dass sie nicht zusammen verwendet werden können.Es mag weit hergeholt scheinen, aber oft wird der Aufwand, die Dinge getrennt und ordentlich zu halten, dazu führen, dass Ihr Code schwerer zu verwenden ist. Aber selbst wenn die Dinge nicht code-weise explodieren, würde der Deal-Breaker für mich die Geschäftslogik vernachlässigen: Ist es in Ihrem Fall sinnvoll, zwei getrennte Bereiche für running
und accepted
zu haben? Kann ein Mandat running
sein, wenn es nicht akzeptiert wird? Wenn nicht, sollten Sie versuchen, zu verhindern, dass ein weniger sachkundiger Entwickler diese fehlerhafte Abfrage (logisch) erstellt. Und wie du schon sagtest, ist die Struktur vereinfacht, so dass es möglicherweise noch weitere Fehler gibt, und viele weitere werden kommen, wenn die App komplexer wird.
Wenn ich den Code von jemand anderem übernehme, würde ich lieber begrenzte, in sich abgeschlossene Methoden haben, die einfache, dezentralisierte Methoden nicht durchbrechen, die erfordern, dass Sie (oft nicht vorhandene) Dokumentation lesen müssen verhindern Sie die vielen Möglichkeiten, sie zu missbrauchen.
Danke für das Beispiel. Eine Frage jedoch, wie @Thomas in seiner Antwort darauf hingewiesen hat, würde der akzeptierte Umfang von vorherigem Mandatsantrag abhängen(), oder? sonst ist Pivot Null – Hyti
Ja, genau. Scope arbeitet mit der vorhandenen Abfrage. –