Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

Pour appliquer KISS, choisissez la solution la plus simple qui exprime clairement le besoin métier actuel et reste modifiable. Une facture qui passe de draft à pending, puis à paid, peut souvent être décrite par quelques méthodes explicites. Une machine à états n’est pas « trop compliquée » par nature : elle devient pertinente lorsque le nombre de transitions, de règles et d’effets secondaires rend le modèle direct plus difficile à comprendre.

À quoi ressemble la règle métier dans l’exemple de facture ?

Dans son article sur DEV Community, Rodolphe D. présente trois statuts : draft, pending et paid. La facture suit deux transitions successives : du brouillon à l’attente, puis de l’attente au paiement. La question qui permet de vérifier la règle est simple : « est-ce qu’une facture payée peut redevenir brouillon ? » Dans cet exemple, non : cette transition n’est pas permise. L’exemple de Rodolphe D. sur DEV Community illustre une règle métier, pas une preuve qu’une architecture donnée est toujours préférable.

Quand les méthodes directes suffisent

Si les transitions sont peu nombreuses et que la règle tient en quelques phrases, des méthodes nommées selon l’action métier peuvent rendre le comportement visible sur le modèle de facture : send() pour passer à pending, puis markAsPaid() pour passer à paid. La méthode peut refuser une action invalide, plutôt que laisser chaque appelant modifier le statut comme il le souhaite. Un lecteur voit ainsi où se trouvent les transitions autorisées.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Un détail lié à la pile technique de l’auteur

Dans le code de son exemple, Rodolphe D. indique qu’un getter Adonis doit recevoir le décorateur @computed() pour être sérialisé dans Inertia. C’est un détail de son application et de son environnement, pas une exigence générale de KISS ou une règle applicable à tous les frameworks.

#1 Best Overall
Elebase USB to USB C Adapter for iPhone 18 Pro Max,USBC Car Charger Adapter
  • Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
  • Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
  • Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
  • Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
  • 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.

Pourquoi la première conception peut coûter plus qu’elle ne rapporte

L’auteur raconte avoir commencé avec une machine à états, des classes abstraites et concrètes, une factory, un registre de guards et un bus d’événements. Il rapporte cinq fichiers et environ 150 lignes avant refactorisation, contre une vingtaine de lignes ensuite, et environ trois heures consacrées à la première conception. Ces chiffres décrivent son exemple personnel : ils ne mesurent ni un gain garanti ni le coût habituel d’une machine à états.

Le point utile n’est pas que moins de lignes signifie automatiquement meilleur code. C’est que chaque abstraction impose un coût de lecture et de maintenance. Si une règle élémentaire est dispersée entre plusieurs composants, il faut davantage de contexte pour répondre à des questions concrètes : quelles transitions sont permises ? Où une transition est-elle refusée ? Quels effets se déclenchent ? Une conception directe peut rendre ces réponses plus faciles à trouver, à condition de conserver les validations nécessaires.

Rank #2
Anker USB-C Hub, 5-in-1 USB Hub for Laptops, 4K HDMI Multiport Adapter
  • 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
  • 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
  • Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
  • 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
  • What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.

Comment choisir entre méthodes directes et machine à états ?

Il n’existe pas de nombre universel de statuts à partir duquel une machine à états devient indispensable. Comparez plutôt la complexité réelle des règles avec le coût de l’abstraction :

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Nombre de statuts et de transitions : quelques passages linéaires se décrivent souvent simplement avec des méthodes explicites ; des chemins nombreux ou conditionnels sont plus difficiles à suivre dans un modèle direct.
  • Règles croisées : si une transition dépend de plusieurs conditions métier, vérifiez que leur regroupement reste lisible et cohérent.
  • Effets secondaires : des courriels, webhooks ou autres actions déclenchés par les transitions peuvent justifier une structure dédiée lorsque leur gestion devient difficile à maintenir près des méthodes métier.
  • Indirection et compréhension : comptez le contexte qu’un développeur doit parcourir pour comprendre une transition, pas seulement les lignes du fichier qui la déclenche.
  • Évolution attendue et réelle : concevez pour rendre le changement possible, mais ne mettez pas en place toute une infrastructure pour une fonctionnalité encore hypothétique.

Ces critères servent à raisonner sur le compromis ; ils ne sont pas les résultats d’un benchmark. Une abstraction est utile lorsqu’elle réduit la complexité globale, même si elle ajoute des classes ou des fichiers. Elle l’est moins lorsqu’elle masque une règle qui tenait déjà clairement dans le modèle.

Rank #3
Anker USB C Hub, 7in1 Multi-Port USB Adapter, 4K@60Hz USBC to HDMI Splitter
  • Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
  • Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
  • Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
  • Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
  • What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Garder le code simple sans sacrifier les changements futurs

KISS et YAGNI ne demandent pas de refuser toute abstraction. YAGNI (« You Aren’t Gonna Need It ») conseille de ne pas construire aujourd’hui une capacité uniquement parce qu’on imagine qu’elle sera nécessaire plus tard. Martin Fowler rattache YAGNI à la pratique de conception simple d’Extreme Programming, tout en soulignant que différer une fonctionnalité hypothétique suppose de garder le code facile à modifier. Martin Fowler, « Yagni », 26 mai 2015.

La simplicité n’est pas non plus synonyme de facilité ou de travail bâclé. Dans l’extrait de « Simple Design » publié par O’Reilly, Kent Beck décrit la meilleure conception comme la plus simple qui prend en charge les fonctionnalités requises tout en offrant de la souplesse pour changer. Le sens pratique : démêler le code est un vrai travail. Une méthode directe et lisible peut être un meilleur point de départ qu’un cadre général, tant qu’elle protège les règles métier et qu’elle peut évoluer avec elles. O’Reilly, extrait de Clean Code: A Handbook of Agile Software Craftsmanship, 2nd Edition.

Best Value
Anker USB C Hub, 5-in-1 USBC to HDMI Splitter with 4K Display
  • 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
  • Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
  • Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
  • HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
  • What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
Rank #4
Sale
UGREEN USB to USB C Adapter Combo 4-Pack, 10Gbps USB C Converter Space Gray
  • Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
  • Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
  • Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
  • Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
  • Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft

Que faire si la règle devient plus complexe ?

  1. Écrivez les états et les transitions autorisées. Pour l’exemple, notez draft → pending → paid et identifiez explicitement les retours interdits.
  2. Repérez ce qui a changé. Ajoutez les nouveaux statuts, conditions ou effets réellement demandés, au lieu de construire sur la base d’hypothèses.
  3. Vérifiez où la logique est devenue difficile à suivre. Si les conditions se multiplient, si les transitions ne sont plus linéaires ou si les effets secondaires sont dispersés, une abstraction de machine à états peut alors clarifier l’ensemble.
  4. Refactorisez autour du problème concret. La structure choisie doit rendre les transitions autorisées et leurs conséquences plus faciles à comprendre que la version précédente.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.