Objectif : produire un code structuré et maintenable
SOLID identifie 5 principes de programmation objet que doivent mettre en oeuvre les developpeurs pour construire des applications maintenables, scalables et structurées :
Cette série propose de parcourrir ces principes dans le langage Ruby.
SOLID : Single Responsibility Principle (SRP)
Objectif : une classe ne doit avoir qu’une seule responsabilité et defacto qu’une seule motivation pour être modifiée Anti-pattern On image une collecte de news sur un fournisseur, puis sa valorisation/formatage et la possibilité de l’envoyer par SMS ou Mail : Class News def collect(target:) # collect from target end def

SOLID : Open/Closed Principle (OCP)
Objectif : Une classe peut-être ouverte pour l’ajout ou l’extension mais fermée pour la modification On peut y ajouter des fonctionnalités mais doit éviter la surcharge et la modification de code existant. Remarque : En Ruby, la possibilité de sucharge se fait aussi bien via l’héritage que par le mixin ou l’inclusion,

SOLID : Liskov Substitution Principle (LSP)
Objectif : Les sous-classes doivent pouvoir remplacer leur classe de base sans changer le comportement attendu. Le Principe de Substitution de Liskov est l’un des cinq principes SOLID de la programmation orientée objet. Formulé par Barbara Liskov en 1987, il stipule que : “Si S est un sous-type de T, alors les

SOLID : Interface Segregation Principle (ISP)
Objectif : une classe ne doit pas être obligée d’implementer des méthodes dont elle n’a pas besoin (il existe undef en Ruby, mais au final cela reste une violation car c’est comme une redéfinition par une méthode vide). Anti-pattern class Command def perform raise NotImplementedError end def rollback raise NotImplementedError end

SOLID : Dependency Inversion Principle (DIP)
🎯 Objectif ; mettre en place un découplage fort et éviter l’effet “boite à outils” Cas d’étude, l’anti-pattern Un composant quelconque doit logger ses actions; l’anti-pattern pour : class Composant def initialize @log = open(‘composant.log’, ‘a’) end def action # a process puts ‘action made’ @log.puts “action made” end end Constat : * ❌ le
