Pour développer efficacement
✔️ Décomposition
✔️ Découplage, isolation
✔️ Abstraction
✔️ Testabilité
❌ Multitude d'états
❌ États partagés
❌ Trop d'abstractions
Keep It Simple Stupid
Exercice:
https://www.codewars.com/kata/valid-parentheses/
Ne pas rendre le code plus complexe que le problème à résoudre
Facilite la vie des autres (et de votre vous futur)
You ain't gonna need it
Ne pas coder plus que nécessaire, avant que nécessaire, par anticipation, "au cas où"
Exemple:
Profil d'un utilisateur de l'agenda collaboratif.
Avatar ? Bio ? Site perso ?
Exemple:
Prototype d'un site. Sortir Node, Socket.IO, React, Redux...
Cas | Conséquence |
---|---|
1. La bonne feature, bien faite (rare) | Délai sur le reste, et complexité inutile jusqu'au jour où la feature est nécessaire |
2. La bonne feature, mal faite | Coût de [1], et coût de réparation/ajustement |
3. La mauvaise feature | Coût de [1], et coût de suppression de la feature, et recodage complet |
Les risques de coder une feature trop tôt, par anticipation
Don't Repeat Yourself
"Every piece of knowledge must have a single, unambiguous, authoritative representation within a system."
"Tout bout de logique doit avoir une unique, non ambigüe, prédominante représentation au sein d'un système."
function validateProduct(product) {
if (!Object.prototype.hasOwnProperty.call(product, "color")) {
throw new Error("Import fail: the product attribute color is missing");
}
if (!Object.prototype.hasOwnProperty.call(product, "size")) {
throw new Error("Import fail: the product attribute size is missing");
}
if (!Object.prototype.hasOwnProperty.call(product, "type")) {
throw new Error("Import fail: the product attribute color is missing");
}
}
function validateProduct(product) {
const assessProductProp = prop => {
if (!Object.prototype.hasOwnProperty.call(product, prop)) {
throw new Error(`Import fail: the product attribute ${prop} is missing`);
}
};
["color", "size", "type"].forEach(assessProductProp);
}
Exemples de choses à ne pas dupliquer:
"Duplication is far cheaper than the wrong abstraction."
En dupliquant on évite complexité et couplage inutile
Une donnée ou un état devrait avoir un unique endroit où être stocké.
Sinon
One-way data binding