2021-07-30 16:19:04 +02:00
|
|
|
|
[quote]
|
|
|
|
|
----
|
|
|
|
|
If you think good architecture is expensive, try bad architecture
|
|
|
|
|
-- Brian Foote and Joseph Yoder
|
|
|
|
|
----
|
|
|
|
|
|
|
|
|
|
|
2021-07-30 14:24:49 +02:00
|
|
|
|
[quote]
|
|
|
|
|
----
|
|
|
|
|
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,
|
|
|
|
|
c’est à nouveau dans les ressources proposées et les cas démontrés que l’on comprend leur intérêt:
|
|
|
|
|
plus que de la définition d’une architecture adéquate, c’est surtout dans la facilité de maintenance
|
|
|
|
|
d’une application que ces principes s’identifient.
|
|
|
|
|
|
2021-07-30 14:33:48 +02:00
|
|
|
|
Derrière une bonne architecture, il y a aussi un investissement quant aux ressources qui seront nécessaires
|
|
|
|
|
à faire évoluer l’application.
|
|
|
|
|
Ne pas investir dès qu’on le peut va juste lentement remplir la case de la dette technique.
|
|
|
|
|
|
2021-07-30 14:34:24 +02:00
|
|
|
|
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.
|
2021-07-30 14:33:48 +02:00
|
|
|
|
-- Robert C. Martin, Clean Architecture, Chapitre 15, what is architecture ?, page 137
|
|
|
|
|
|
2021-07-30 14:35:47 +02:00
|
|
|
|
L’objectif d'une bonne architecture est également de garder le plus d’options 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 d’informations possibles.
|
|
|
|
|
-- Robert C. Martin, Clean Architecture, page 141 - What is architecture ?
|
|
|
|
|
|
2021-07-30 15:55:19 +02:00
|
|
|
|
Une architecture ouverte et pouvant être étendue n’a d’intérêt que si le
|
2021-07-30 14:24:49 +02:00
|
|
|
|
développement est suivi et que les gestionnaires (et architectes) s’engagent à économiser du temps
|
|
|
|
|
et de la qualité lorsque des changements seront demandés pour l’évolution du projet.
|
|
|
|
|
|
2021-08-18 13:39:42 +02:00
|
|
|
|
==== Politiques et règles métiers
|
|
|
|
|
|
|
|
|
|
TODO: Un p'tit bout à ajouter sur les méthodes de conception ;)
|
|
|
|
|
|
|
|
|
|
|
2021-07-30 15:51:39 +02:00
|
|
|
|
==== Considération sur les frameworks
|
|
|
|
|
|
|
|
|
|
[quote]
|
|
|
|
|
----
|
|
|
|
|
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 qu'un framework n'est qu'un outil, et pas une obligation de structuration.
|
|
|
|
|
L'idée est que le framework doit se conformer à la définition de l'application, et non l'inverse.
|
|
|
|
|
Dans le cadre de l'utilisation de Django, c'est 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 d'un navigateur
|
|
|
|
|
- Les droits d'accè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 n'aurez pas voulu/eu le temps de développer) dépendront
|
|
|
|
|
de la bonne volonté de la communauté
|
|
|
|
|
|
|
|
|
|
Le point à comprendre ici n'est pas que "Django, c'est mal", mais qu'une 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*, c'est-à-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.
|
2021-07-30 15:55:19 +02:00
|
|
|
|
|
|
|
|
|
[quote]
|
|
|
|
|
----
|
|
|
|
|
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 l’application.
|
2021-07-30 16:25:18 +02:00
|
|
|
|
|
|
|
|
|
NOTE: A noter que les services et les « architectures orientées services » ne sont jamais qu’une définition
|
|
|
|
|
d’implémentation des frontières, dans la mesure où un service n’est jamais qu’une fonction appelée au travers d'un protocole
|
|
|
|
|
(rest, soap, ...).
|
|
|
|
|
Une application monolotihique est tout aussi fonctionnelle qu’une application découpée en microservices.
|
|
|
|
|
(Services: great and small, page 243).
|
2021-08-18 09:31:23 +02:00
|
|
|
|
|
|
|
|
|
==== Un point sur l'inversion de dépendances
|
|
|
|
|
|
|
|
|
|
Dans la partie SOLID, nous avons évoqué plusieurs principes de développement.
|
|
|
|
|
Django est un framework qui évolue, et qui a pu présenter certains problèmes liés à l'un de ces principes.
|
|
|
|
|
|
|
|
|
|
Les [https://docs.djangoproject.com/en/2.0/releases/2.0/](release notes) de Django 2.0 date de décembre 2017; parmi ces notes,
|
|
|
|
|
l'une d'elles cite l'abandon du support d'[https://docs.djangoproject.com/en/2.0/releases/2.0/#dropped-support-for-oracle-11-2](Oracle 11.2).
|
2021-08-18 09:33:54 +02:00
|
|
|
|
En substance, cela signifie que le framework se chargeait lui-même de construire certaines parties de requêtes,
|
|
|
|
|
qui deviennent non fonctionnelles dès lors que l'on met le framework ou le moteur de base de données à jour.
|
|
|
|
|
Réécrit, cela signifie que:
|
2021-08-18 09:31:23 +02:00
|
|
|
|
|
|
|
|
|
1. Si vos données sont stockées dans un moteur géré par Oracle 11.2, vous serez limité à une version 1.11 de Django
|
|
|
|
|
2. Tandis que si votre moteur est géré par une version ultérieure, le framework pourra être mis à jour.
|
|
|
|
|
|
|
|
|
|
Nous sommes dans un cas concret d'inversion de dépendances ratée: le framework (et encore moins vos politiques et règles métiers)
|
|
|
|
|
ne devraient pas avoir connaissance du moteur de base de données.
|
|
|
|
|
Pire, vos politiques et données métiers ne devraient pas avoir connaissance **de la version** du moteur de base de données.
|
|
|
|
|
|
2021-08-18 09:33:54 +02:00
|
|
|
|
En conclusion, le choix d'une version d'un moteur technique (*la base de données*) a une incidence directe sur les fonctionnalités
|
|
|
|
|
mises à disposition par votre application, ce qui va à l'encontre des 12 facteurs (et des principes de développement).
|
|
|
|
|
|
2021-08-18 09:31:23 +02:00
|
|
|
|
Ce point sera rediscuté par la suite, notamment au niveau de l'épinglage des versions, de la reproduction des environnements
|
|
|
|
|
et de l'interdépendance entre des choix techniques et fonctionnels.
|