gwift-book/source/part-1-workspace/maintainable-applications/clean_architecture.adoc

4.4 KiB
Raw Blame History

A computer program is a detailed description of the policy by which inputs are transformed into outputs.
-- Robert C. Martin, Clean Architecture

Au delà des principes SOLID dont il est question plus haut, cest à nouveau dans les ressources proposées et les cas démontrés que lon comprend leur intérêt: plus que de la définition dune architecture adéquate, cest surtout dans la facilité de maintenance dune application que ces principes sidentifient.

Derrière une bonne architecture, il y a aussi un investissement quant aux ressources qui seront nécessaires à faire évoluer lapplication. Ne pas investir dès quon le peut va juste lentement remplir la case de la dette technique.

Good architecture makes the system easy to understand, easy to develop, easy to maintain and easy to deploy. The ultimate goal is to minimize the lifetime cost of the system and to maximize programmer productivity.Robert C. Martin, Clean Architecture, Chapitre 15, what is architecture ?, page 137

Lobjectif dune bonne architecture est également de garder le plus doptions possibles, de se concentrer sur les détails (le type de base de données, la conception concrète, …​), le plus tard possible, tout en conservant la politique principale en ligne de mire. Cela permet de délayer les choix techniques à « plus tard », ce qui permet également de concrétiser ces choix en ayant le plus dinformations possibles.Robert C. Martin, Clean Architecture, page 141 - What is architecture ?

Une architecture ouverte et pouvant être étendue na dintérêt que si le développement est suivi et que les gestionnaires (et architectes) sengagent à économiser du temps et de la qualité lorsque des changements seront demandés pour lévolution du projet.

Considération sur les frameworks

Frameworks are tools to be used, not architectures to be conformed to.
Your architecture should tell readers about the system, not about the frameworks you used in your system.
If you are building a health care system, then when new programmers look at the source repository,
their first impression should be, « oh, this is a health care system ».
Those new programmers should be able to learn all the use cases of the system,
yet still not know how the system is delivered.
-- Robert C. Martin, Clean Architecture, page 199

Le point soulevé ci-dessous est quun framework nest quun outil, et pas une obligation de structuration. Lidée est que le framework doit se conformer à la définition de lapplication, et non linverse. Dans le cadre de lutilisation de Django, cest un point critique à prendre en considération: une fois que vous aurez fait ce choix, vous aurez extrêmement difficile à faire machine arrière:

  • Votre modèle métier sera largement couplé avec le type de base de données (relationnelle, indépendamment

  • Votre couche de présentation sera surtout disponible au travers dun navigateur

  • Les droits daccès et permissions seront en grosse partie gérés par le frameworks

  • La sécurité dépendra de votre habilité à suivre les versions

  • Et les fonctionnalités complémentaires (que vous naurez pas voulu/eu le temps de développer) dépendront de la bonne volonté de la communauté

Le point à comprendre ici nest pas que "Django, cest mal", mais quune fois que vous aurez défini la politique, les règles métiers, les données critiques et entités, et que vous aurez fait le choix de développer en âme et conscience votre nouvelle création en utilisant Django, vous serez bon gré mal gré, contraint de continuer avec. Cette décision ne sera pas irrévocable, mais difficile à contourner.

Ceci dit, Django compense ses contraintes en proposant énormément de flexibilité et de fonctionnalités out-of-the-box, cest-à-dire que vous pourrez sans doute avancer vite et bien jusquà un point de rupture, puis revoir la conception et réinvestir à ce moment-là, mais en toute connaissance de cause.

When any of the external parts of the system become obsolete, such as the database, or the web framework,
you can replace those obsolete elements with a minimum of fuss.
-- Robert C. Martin, Clean Architecture, page 209

Avec Django, la difficulté à se passer du framework va consister à basculer vers « autre chose » et a remplacer chacune des tentacules qui aura pousser partout dans lapplication.