de l'instanciation (passage de paramètres) (+) Meilleur contrôle de l'injection (+) Moins de magie (pas d'inflection) (+) Moins de code (= moins de bugs !) Exemple: pas bien: $obj->addFoo('fooObject'); bien: $obj->addFoo(new fooObject()); Factory / Proxy $obj->setFooFactory(new fooFactory());
objets jusqu'à ce que ce soit nécessaire (+) Permet d'éviter de flinguer l'interface d'un objet parce qu'on à pas les bonnes données au bon moment exemple: injectors (-) Plus de code (= plus de bugs) (+) mais c'est facile à tester unitairement (-) Moins facile de retrouver les utilisations d'un objet dans le codebase
privées surtout (+) Moins d'interactions avec l'environnement = moins d'effets de bord (+) Plus facile à tester (+) Signature plus explicite (-) Signature qui tend vers l'illisible (-) risque de mélange arguments / accès internes moins de lisibilité
réutilisation d'un objet ergo, pas testable = pas réutilisable (+) Un objet intestable est (souvent) un objet mal foutu (-) Ne pas tomber dans le travers de "coder pour le test unitaire"
that an object should have only a single responsibility. Open/closed principle the notion that “software entities … should be open for extension, but closed for modification”. Liskov substitution principle the notion that “objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program”. Interface segregation principle the notion that “many client specific interfaces are better than one general purpose interface.” Dependency inversion principle the notion that one should “Depend upon Abstractions. Do not depend upon concretions.”