J'ai récemment lu un site Web sur le développement de code propre (je ne mets pas de lien ici car il n'est pas en anglais).
Un des principes annoncés par ce site est le principe ouvert fermé : chaque composant logiciel doit être ouvert pour extension et fermé pour modification. Par exemple, lorsque nous avons implémenté et testé une classe, nous ne devons la modifier que pour corriger des bogues ou ajouter de nouvelles fonctionnalités (par exemple de nouvelles méthodes qui n'influencent pas celles existantes). La fonctionnalité et l'implémentation existantes ne doivent pas être modifiées.
J'applique normalement ce principe en définissant une interface I
et une classe d'implémentation correspondante A
. Lorsque la classe A
est devenue stable (implémentée et testée), je ne la modifie normalement pas trop (éventuellement, pas du tout), c'est-à-dire
- Si de nouvelles exigences arrivent (par exemple des performances ou une implémentation totalement nouvelle de l'interface) qui nécessitent de gros changements dans le code, j'écris une nouvelle implémentation
B
et continue à l'utiliserA
tant qu'elleB
n'est pas mature. Une foisB
arrivé à maturité, il suffit de changer la façon dont ilI
est instancié. - Si les nouvelles exigences suggèrent également une modification de l'interface, je définis une nouvelle interface
I'
et une nouvelle implémentationA'
. AlorsI
,A
sont congelés et restent la mise en œuvre du système de production aussi longtemps queI'
etA'
ne sont pas assez stables pour les remplacer.
Ainsi, au vu de ces observations, j'ai été un peu surpris que la page Web suggère alors l'utilisation de refactorings complexes , "... car il n'est pas possible d'écrire du code directement dans sa forme finale".
N'y a-t-il pas une contradiction / conflit entre l'application du principe ouvert / fermé et la suggestion de l'utilisation de refactorings complexes comme meilleure pratique? Ou l'idée ici est que l'on peut utiliser des refactorings complexes pendant le développement d'une classe A
, mais quand cette classe a été testée avec succès, elle devrait être gelée?