Rework some quotes
continuous-integration/drone/push Build is passing Details

This commit is contained in:
Fred Pauchet 2021-09-26 22:06:20 +02:00
parent e43f9fcf89
commit 059d7c1f99
5 changed files with 37 additions and 48 deletions

View File

@ -10,12 +10,13 @@ Cédric Declerfayt <jaguarondi27@gmail.com>; Fred Pauchet <fred@grimbox.be>
:source-highlighter: rouge
:icons: font
Nous n'allons pas vous mentir: il existe enormément de tutoriaux très bien réalisés sur "_Comment réaliser une application Django_" et autres "_Déployer votre code en 2 minutes_". Nous nous disions juste que ces tutoriaux restaient relativement haut-niveaux et se limitaient à un contexte donné.
Nous n'allons pas vous mentir: il existe enormément de tutoriaux très bien réalisés sur "_Comment réaliser une application Django_" et autres "_Déployer votre code en 2 minutes_".
Nous nous disions juste que ces tutoriaux restaient relativement haut-niveaux et se limitaient à un contexte donné, et ne préparaient pas réellement à la maintenance et au suivi d'une application.
L'idée du texte ci-dessous est de jeter les bases d'un bon développement, en survolant l'ensemble des outils permettant de suivre des lignes directrices reconnues, de maintenir une bonne qualité de code au travers des différentes étapes (du développement au déploiement) et de s'assurer du maintient correct de la base de code, en permettant à n'importe qui de reprendre le développement.
L'idée du texte ci-dessous est de jeter les bases d'un bon développement, en survolant l'ensemble des outils permettant de suivre des lignes directrices reconnues, de maintenir une bonne qualité de code au travers des différentes étapes menant jusqu'au déploiement et de s'assurer du maintient correct de la base de code, en permettant à n'importe qui de reprendre ce qui aura déjà été écrit.
Ces idées ne s'appliquent pas uniquement à Django et à son cadre de travail, ni même au langage Python.
Juste que ces deux sujets sont de bons candidats et que le cadre de travail est bien défini et suffisamment flexible.
Ces deux sujets sont cependant de bons candidats et leur cadre de travail est bien défini, documenté et suffisamment flexible.
Django se présente comme un "link:https://www.djangoproject.com/[Framework Web pour perfectionnistes ayant des deadlines]" et suit https://docs.djangoproject.com/en/dev/misc/design-philosophies/[ces quelques principes]:
@ -24,10 +25,8 @@ Django se présente comme un "link:https://www.djangoproject.com/[Framework Web
* https://fr.wikipedia.org/wiki/Ne_vous_r%C3%A9p%C3%A9tez_pas[Don't repeat yourself]: on ne se répète pas !
* Rapidité du développement (après une petite courbe d'apprentissage un peu ardue au début ;-))
Mis côte à côte, l'application de ces principes permet une meilleure stabilité du projet à moyen et long terme.
Comme nous le verrons par la suite, et sans être parfait, Django offre une flexibilité énorme
qui permet de laisser le maximum d'options ouvertes, mais également d'expérimenter facilement plusieurs pistes simultanément,
jusqu'au moment de prendre une vraie décision.
Mis côte à côte, l'application de ces principes permet une bonne stabilité du projet à moyen et long terme.
Comme nous le verrons par la suite, et sans être parfait, Django offre une flexibilité énorme qui permet de laisser le maximum d'options ouvertes, mais également d'expérimenter facilement plusieurs pistes simultanément, jusqu'au moment de prendre une vraie décision.
Tout pour plaire à n'importe quel directeur IT.
*Dans la première partie*, nous verrons comment partir d'un environnement sain, comment le configurer correctement, comment installer Django de manière isolée et comment démarrer un nouveau projet.
@ -47,7 +46,7 @@ Nous aborderons les concepts clés qui permettent à une application de rester m
*Dans la quatrième partie*, nous mettrons ces concepts en pratique en présentant le développement de deux "vraies" applications: définition des tables, gestion des utilisateurs, ... et mise à disposition!
Et tout ça à un seul et même endroit.footnote:[Avec un peu d'https://www.xkcd.com[XKCD] dedans] Oui. :-)
Et tout ça à un seul et même endroit.footnote:[Avec même un peu d'https://www.xkcd.com[XKCD]] et de Calvin & Hobbes dedans.
Bonne lecture.

View File

@ -33,9 +33,6 @@ dès que vous en aurez détourné le regard.
Un des objectifs ici est de placer les barrières et les gardes-fous (ou plutôt, les "*garde-vous*"), afin de péréniser au maximum les acquis, stabiliser les bases de tous les environnements (du développement à la production) qui pourraient accueillir notre application et fiabiliser les étapes de communication.
[quote, Robert C. Martin, Clean Architecture, Chapitre 15, What is architecture ?, page 137]
A software system that is hard to develop is not likely to have a long and healthy lifetime
Dans cette partie, nous allons parler de *méthodes de travail*, avec comme objectif d'éviter que l'application ne tourne que sur notre machine et que chaque déploiement ne soit une plaie à gérer.
Chaque mise à jour doit être réalisable de la manière la plus simple possible:

View File

@ -1,28 +1,28 @@
== Construire des applications ...
== Construire des applications
=== bien structurées ...
[quote, Robert C. Martin, Clean Architecture, Chapitre 15, What is architecture ?, page 137]
A software system that is hard to develop is not likely to have a long and healthy lifetime
=== Bien structurées
include::clean_architecture.adoc[]
=== évolutives ...
=== Evolutives
include::12-factors.adoc[]
=== maintenables ...
=== Maintenables
include::maintainable-applications.adoc[]
include::mccabe.adoc[]
=== robustes, flexibles, ...
=== Robustes, flexibles
include::solid.adoc[]
=== et testées.
=== Et testées
[quote]
----
[quote, Robert C. Martin, Clean Architecture, page 203, Inner circle are policies, page 250, Chapitre 28 - The Boundaries]
Tests are part of the system.
You can think of tests as the outermost circle in the architecture.
Nothing within in the system depends on the tests, and the tests always depend inward on the components of the system ».
-- Robert C. Martin, Clean Architecture, page 203, Inner circle are policies, page 250, Chapitre 28 - The Boundaries
----

View File

@ -70,12 +70,9 @@ Ceci dit, Django compense ses contraintes en proposant énormément de flexibili
*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.
[quote]
----
[quote, Robert C. Martin, Clean Architecture, page 209]
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.
@ -83,7 +80,7 @@ chacune des tentacules qui aura pousser partout dans lapplication.
NOTE: A noter que les services et les « architectures orientées services » ne sont jamais quune définition
dimplémentation des frontières, dans la mesure où un service nest jamais quune fonction appelée au travers d'un protocole
(rest, soap, ...).
Une application monolotihique est tout aussi fonctionnelle quune application découpée en microservices.
Une application monolotihique sera tout aussi fonctionnelle quune application découpée en microservices.
(Services: great and small, page 243).
==== Un point sur l'inversion de dépendances
@ -91,8 +88,8 @@ Une application monolotihique est tout aussi fonctionnelle quune application
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).
Les link:release notes[https://docs.djangoproject.com/en/2.0/releases/2.0/] de Django 2.0 date de décembre 2017; parmi ces notes,
l'une d'elles cite l'abandon du support d'link:Oracle 11.2[https://docs.djangoproject.com/en/2.0/releases/2.0/#dropped-support-for-oracle-11-2].
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:

View File

@ -1,14 +1,11 @@
= Déploiement
[quote]
----
[quote,Robert C. Martin, Clean Architecture, Chapitre 15, page 137]
To be effective, a software system must be deployable.
The higher the cost of deployements, the less useful the system is.
A goal of a software architecture, then, should be to make a system that can be easily deployed with a single action.
Unfortunately, deployment strategy is seldom considered during initial development.
This leads to architectures that may be make the system easy to develop, but leave it very difficult to deploy.
-- Robert C. Martin, Clean Architecture, Chapitre 15, page 137
----
Il y a une raison très simple à aborder le déploiement dès maintenant: à trop attendre et à peaufiner son développement en local,
on en oublie que sa finalité sera de se retrouver exposé sur un serveur.
@ -174,4 +171,3 @@ See https://mattsegal.dev/nginx-django-reverse-proxy-config.html
* https://docs.djangoproject.com/fr/3.0/howto/deployment/[Déploiement].
* Let's Encrypt !