Série de documents qui introduisent les design patterns avec Ruby dans la Ruby Way
Design pattern Singleton (Object)
🎯 Objectif : garantir une instance unique d’un objet Anti-pattern On créé une Factory MyClassFactory pour MyClass Elle instance avec une memoization une seule instance de MyClass class MyClass def initialize end end class MyClassFactory def MyClassFactory::get(*args, &block) @myclass ||= MyClass::new(*args, &block) end end p MyClassFactory::get p MyClassFactory:

Design pattern Adapter
🎯 Objectif : éviter de faire une classe “Boite à outil”, cad qui fait plus que ce qu’elle doit, et qui intègre du code d’adaption et donc du savoir spécifique, on utilise le Design pattern Adapter pour limiter l’adaptation des inputs dans la classe elle même Anti-pattern class Hammer def swing! puts

Design pattern forwardable
🎯 Objectif : Construire une classe en exploitant une partie d’un autre et la charge active de l’autre 👆 Remarque : cas d’une Queue LIFO Anti-pattern Anti-pattern 1 : from scratch Construire from scratch, même pas en rêve Anti-pattern 2 : l’héritage class MyQueue < Array alias :enq :push alias :deq :shift end myqueue = MyQueue::new myqueue.

Design pattern Proxy
🎯 Objectif : éviter encore une fois d’implémenter dans une même classe des fonctions qui ne lui sont pas intrinsèques. Anti-pattern On créé une classe CompteBancaire qui intègre et implémente le contrôle d’accès class CompteBancaire attr_reader :balance def initialize(init_balance: , utilisateur: ) @utilisateur = utilisateur @liste_utilisateurs = [‘romain’,‘toto’,‘titi’] @balance = init_

Design Pattern Observer / Observable
🎯 Objectif : lancer une/actions quand un traitement se déclenche suivant un caractère événementiel Anti-Pattern class RecuperateurBoursier def initialize(code, limite_bas:, limite_haut: ) @limite_bas = limite_bas @limite_haut = limite_haut @code = code end def lancer dernierevaleur = nil loop do valeur = Valeur.recuperer(@code) print “Valeur courrante: #{valeur}\n” if

IOC & DI en Ruby
🎯 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
