Hallo dedlfix,
ich glaube, ihr seit euch über die Spezifität der Validatoren uneins.
Mir scheint, dass MB sehr spezifische Validatoren bauen will, die nur an einer einzigen Ecke der Businesslogik verwendet werden. Die können dann auch spezifische Fehler erzeugen.
Den Nutzen des Routings der Prüfung über eine Klassenmethode (= static function?) habe ich allerdings auch nicht verstanden.
Und das Auslagern von Code in eigene Klassen, um Klassen zu haben, scheint mir auch nicht die beste Idee. Ich weiß nicht wie gut PHP das unter Fast CGI oder mit anderen Code-Caching Verfahren optimieren kann, aber grundsätzlich ist eine Klasse erstmal eine Struktur, die PHP zur Laufzeit aufbaut. Jede zusätzliche Klasse ist zusätzliche Arbeit, die pro Request vom Server geleistet werden muss.
Es gibt verschiedene Anlässe, technische Klassen zu bilden (ich rede nicht von Businessklassen!):
- rein statisch mit statischen Methoden. Sowas macht man bspw. in Java oder C#, um einen Namespace für eine Funktionensammlung zu haben. In PHP bieten sich da eher Funktionen und Namespaces an
- ich baue eine Methode, und sie wird gigantisch. Es ist viel zu tun, und ich brauche eine Menge Arbeitsvariablen. Es wird gruselig, diese Methode zu testen, und es wird unüberschaubar, das Monster über Testargumente in allen Facetten zu validieren. Statt nun Code aus der Methode in private Methoden der Klasse auszulagern, die dann entweder viele Parameter haben oder die Klasse mit Instanzvariablen zumüllen, lagere ich das in eine Worker-Klasse aus, die ich dann auch separat testen kann.
- ich möchte in Test und Produktion unterschiedlichen Code laufen lassen. Insbesondere im Bereich Logging, oder auch Fehlerprüfungen. Im Test prüfe ich vielleicht deutlich aufwändiger, und logge mehr. Man kann das so lösen, dass man den Code in zwei Klassen unterbringt, eine für Test, eine für Produktion, die beide das gleiche Interface haben. Und ich stelle an geeigneter Stelle eine Instanz dieser Klasse zur Nutzung durch den Rest des Codes zur Verfügung. Dann muss ich genau 1x testen, ob ich in Test oder Prod bin, den Rest erledigt die Polymorphie.
Sicherlich gibt's noch mehr Anlässe.
Deine Validatoren könnten durch Anlass 3 gerechtfertigt sein.
Rolf
sumpsi - posui - clusi