Irgendwie muss ich das OOP-Prinzip "Sag, frage nicht" in all den Jahren übersehen haben, weil ich erst vor ein paar Tagen zum ersten Mal davon erfahren habe.Gilt "sagen, nicht fragen" für die Validierung der Benutzereingabe?
Der Kontext war jedoch eine Diskussion über Validierungscode, der aus einer ASP.NET-Webformularseite in ein Daten-/Geschäftsobjekt verschoben wurde, und es gab keine "Validate()" -Methode, nur eine Speichermethode selbst hat Validierung und (angeblich) eine Ausnahme ausgelöst. Ich fragte, warum das auf diese Weise entworfen wurde, und ich wurde auf OOPs "Sag, frage nicht" -Prinzip verwiesen, von dem ich noch nie gehört hatte, also schauten wir gemeinsam zu Google und ich wurde sofort erzogen. ;) Noch etwas riecht nicht richtig, sollten Daten nicht geschrubbt werden, bevor es vom Benutzer und in die Geschäftsschicht, wo es verarbeitet und/oder gesammelt wird, übergeben wird, anstatt umgekehrt ? Ich bin verwirrt, wie dies für gutes Design sorgt.
Es scheint, als ob die Regel von "tell, do not ask" die Idee betrifft, dass Sie das Zielobjekt nicht über den Zustand des Zielobjekts befragen sollten und dass das Prinzip nie wirklich auf die Daten angewendet werden sollte übergeben wird an das Zielobjekt.
Ausnahmen sind für die Behandlung unerwarteter Fälle zulässig (nicht genügend Arbeitsspeicher/Datenträger ist voll/Verbindung geschlossen/verteilte Transaktion fehlgeschlagen) - Die vom Benutzer übermittelten Daten sind nicht unerwartet gültig. Verwenden Sie stattdessen "Handler" -Ansatz - rufen Sie einfach validate_number (invalid_handler_callback) auf –