Ich lerne sauber und überlege daher sehr dramatisch, wie ich Software entwerfe und schreibe.
Ich habe eine Sache, mit der ich immer noch ringe, aber für Geschäftsregeln wie "Beim Speichern von Updates für einen Artikel, zuerst laden Alle Liste der Artikel, die ich zum Anzeigen / Bearbeiten usw. habe, bestätigen, dass dieser Artikel in der Liste ist, und dass die Elementkategorie derzeit nicht für die Verwendung gesperrt ist (und andere Regeln usw. usw.) ".., da dies eine (komplexe, aber nicht atypische) Geschäftsregel ist und daher in der Anwendungsdomäne behandelt werden sollte, anstatt die Geschäftslogik zu verschieben die DB / Persistenz-Schicht.
Es scheint mir jedoch, dass zur effizienten Überprüfung dieser Bedingungen häufig am besten eine gut gestaltete Datenbankabfrage durchgeführt wird, anstatt alle Daten in die Anwendungsdomäne zu laden ...
Was ist ein empfohlener Ansatz oder einige Artikel von Onkel Bob, die sich ohne vorzeitige Optimierung mit dieser Frage befassen? Oder würde er sagen "Validieren in der Domain, bis es ein Problem wird"?
Ich habe wirklich Mühe, gute Beispiele / Beispiele für etwas anderes als die grundlegendsten Anwendungsfälle zu finden.
Aktualisieren:
Hallo zusammen, danke für die Antworten. Ich hätte klarer sein sollen, ich habe lange Zeit (meistens Web-App) Software geschrieben und definitiv bereits alle Themen erlebt und bin damit einverstanden, die Sie gemeinsam beschreiben (Validierung durch das Backend, Vertrauen in Kundendaten im Allgemeinen nicht Verfolgen Sie die Roheffizienz nur bei Bedarf, erkennen Sie jedoch die Stärken der DB-Tools an, wenn diese verfügbar sind (usw. usw.), und durchlaufen Sie den Lernlebenszyklus des Entwicklers "Alles zusammenwerfen", um "einen riesigen Fettregler mit N-Ebenen-Anwendungen zu erstellen", Code-Trends und jetzt den Clean / Single Responsibility-Stil usw. wirklich zu mögen und zu untersuchen, im Grunde genommen als Ergebnis einiger Projekte, die sich in letzter Zeit zu ziemlich klobigen und weit verbreiteten Geschäftsregeln entwickelten, als sich die Projekte weiterentwickelten und weitere Kundenanforderungen ans Licht kamen.
Insbesondere beschäftige ich mich mit der Architektur im sauberen Stil im Zusammenhang mit der Erstellung von REST-APIs für kundenorientierte und interne Funktionen, bei denen viele der Geschäftsregeln möglicherweise viel komplexer sind als im Grunde jedes Beispiel, das Sie im Internet sehen (Auch von den Leuten der Clean / Hex-Architektur selbst).
Ich habe also wirklich gefragt (und nicht klar angegeben), wie Clean und eine REST-API zusammenpassen würden, wo die meisten MVC-Inhalte, die Sie heutzutage sehen, Validatoren für eingehende Anforderungen haben (z. B. FluentValidation-Bibliothek in .NET), aber wo viele Meine "Validierungs" -Regeln lauten nicht so sehr "ist dies eine Zeichenfolge mit weniger als 50 Zeichen", sondern mehr "kann dieser Benutzer, der diesen Benutzer / Interaktor aufruft, diesen Vorgang für diese Datensammlung ausführen, da ein verwandtes Objekt derzeit von Team X gesperrt ist bis später im Monat etc etc "... diese Art von tiefgreifenden Validierungen, bei denen VIELE Geschäftsdomänenobjekte und Domänenregeln anwendbar sind.
Sollte ich diese Regeln in eine bestimmte Art von Validator-Objekttyp umwandeln, um jeden Usecase-Interaktor zu begleiten (inspiriert vom FluentValidator-Projekt, aber mit mehr Geschäftslogik und Datenzugriff), sollte ich die Validierung wie ein Gateway behandeln, sollte ich Setzen Sie diese Validierungen in ein Gateway (was ich für falsch halte) usw. usw.
Als Referenz gehe ich auf einige Artikel wie diesen ein , aber Mattia diskutiert nicht viel über Validierung.
Aber ich denke, die kurze Antwort auf meine Frage ähnelt der Antwort, die ich akzeptiert habe: "Es ist nie einfach und es kommt darauf an".