Add legacy applications and rework the introduction

This commit is contained in:
Fred Pauchet 2022-01-03 10:54:01 +01:00
parent 14e0f6c73a
commit 920341511d
4 changed files with 43 additions and 29 deletions

View File

@ -12,6 +12,19 @@ Cédric Declerfayt <jaguarondi27@gmail.com>; Fred Pauchet <fred@grimbox.be>
:icons: font
[preface]
== Licence
Ce travail est licencié sous Attribution-NonCommercial 4.0 International Attribution-NonCommercial 4.0 International
This license requires that reusers give credit to the creator.
It allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, for noncommercial purposes only.
* *BY*: Credit must be given to you, the creator.
* *NC*: Only noncommercial use of your work is permitted. Noncommercial means not primarily intended for or directed towards commercial advantage or monetary compensation.
https://creativecommons.org/licenses/by-nc/4.0/?ref=chooser-v1
[preface]
== Préface
@ -19,7 +32,7 @@ Cédric Declerfayt <jaguarondi27@gmail.com>; Fred Pauchet <fred@grimbox.be>
-- Robert C. Martin
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.
Nous nous disions juste que ces tutoriaux restaient relativement haut-niveaux et se limitaient à un contexte donné, sans réellement préparer à la maintenance et au suivi de l'application nouvellement développée.
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.
@ -28,57 +41,66 @@ Ces deux sujets sont cependant de bons candidats et leur cadre de travail est bi
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]:
* Faible couplage et forte cohésion, pour que chaque composant dispose de son indépendance.
* Moins de code, plus de fonctionnalités.
* 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 ;-))
* Faible couplage et forte cohésion, pour que chaque composant dispose de son indépendance,
* Plus de fonctionnalités avec moins de code,
* https://fr.wikipedia.org/wiki/Ne_vous_r%C3%A9p%C3%A9tez_pas[Don't repeat yourself],
* Rapidité du développement, après une petite courbe d'apprentissage un peu ardue.
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.
Mis côte à côte, le suivi 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 énorme flexibilité qui permet de se laisser le maximum d'options ouvertes tout en permettant d'expérimenter facilement plusieurs pistes, jusqu'au moment de prendre une vraie décision.
Dans la majorité des cas problématiques pouvant être rencontrés lors du développement d'une application Web, Django proposera une solution pragmatique, compréhensible et facile à mettre en place.
En résumé de ce paragraphe, pour tout problème commun, vous disposerez d'une solution logique.
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.
Nous verrons rapidement comment gérer les dépendances, les versions et comment appliquer et suivre un score de qualité de notre code.
Ces quelques points pourront être appliqués pour n'importe quel langage ou cadre de travail.
Nous verrons aussi que la configuration proposée par défaut par le framework n'est pas idéale dans la majorité des cas.
Pour cela, nous présenterons différents outils, la rédaction de tests unitaires et d'intégration pour limiter les régressions, les règles de nomenclature et de contrôle du contenu, comment partir d'un squelette plus complet, ainsi que les bonnes étapes à suivre pour arriver à un déploiement rapide et fonctionnel avec peu d'efforts.
A la fin de cette partie, vous disposerez d'un code propre et d'un projet fonctionnel (mais encore inutile, parce qu'encore vide).
A la fin de cette partie, vous disposerez d'un code propre et d'un projet fonctionnel, bien qu'encore un peu inutile.
*Dans la deuxième partie*, nous détaillerons précisément les étapes de déploiement, avec la description et la configuration de l'infrastructure, des exemples concrets de mise à disposition sur deux distributions principales (Debian et CentOS), sur une _*Plateform as a Service*_, ainsi que l'utilisation de Docker et Docker-Compose.
*Dans la deuxième partie*, nous aborderons les grands principes de modélisation, en suivant les lignes de conduites du cadre de travail.
Nous aborderons les concepts clés qui permettent à une application de rester maintenable, les formulaires, leurs validations, comment gérer les données en entrée, les migrations de données et l'administration.
*Dans la troisième partie*, nous détaillerons précisément les étapes de déploiement, avec la description et la configuration de l'infrastructure, des exemples concrets de mise à disposition sur deux distributions principales (Debian et CentOS), sur une _*Plateform as a Service*_, ainsi que l'utilisation de Docker et Docker-Compose.
Nous aborderons également la supervision et la mise à jour d'une application existante, en respectant les bonnes pratiques d'administration système.
*Dans la troisième partie*, nous aborderons les grands principes de modélisation, en suivant les lignes de conduites du cadre de travail.
Nous aborderons les concepts clés qui permettent à une application de rester maintenable, les formulaires, leurs validations, comment gérer les données en entrée, les migrations de données et l'administration.
*Dans la quatrième partie*, nous aborderons les architectures typées _entreprise_, les services et les différentes manières de structurer notre application pour faciliter sa gestion et sa maintenance, tout en décrivant différents types de scénarii, en fonction des consommateurs de données.
*Dans la quatrième partie*, nous aborderons les architectures typées _entreprise_, les services et les différentes manières de structurer son application pour faciliter sa gestion et sa maintenance.
*Dans la cinquiè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!
*Dans la cinquième partie*, nous mettrons ces concepts en pratique en présentant le développement en pratique de deux applications, avec la description de problèmes rencontrés et la solution qui a été choisie: définition des tables, gestion des utilisateurs, ... et mise à disposition.
=== Pour qui ?
Ce livre s'adresse autant au néophyte qui souhaite se lancer dans le développement Web qu'à l'artisan qui a besoin d'un aide-mémoire et qui ne sait toujours
=== Pour quoi ?
Ce livre s'adresse autant au néophyte qui souhaite se lancer dans le développement Web qu'à l'artisan qui a besoin d'un aide-mémoire et qui ne se rappelle plus toujours du bon ordre des paramètres, ou à l'expert qui souhaiterait avoir un aperçu d'une autre technologie que son domaine privilégié de compétences.
Beaucoup de concepts présentés peuvent être oubliés ou restés inconnus jusqu'au moment où ils seront réellement nécessaires.
A ce moment-là, pour peu que votre mémoire ait déjà entraperçu le terme, il vous sera plus facile d'y revenir et de l'appliquer.
=== Pour aller plus loin
Il existe énormément de ressources, autant spécifiques à Django que plus généralistes.
Il ne sera pas possible de toutes les détailler; faites un tour sur https://duckduckgo.com, https://stackoverflow.com, https://ycombinator.com, https://lobste.rs/, https://lecourrierduhacker.com/ ou https://www.djangoproject.com/.
Restez curieux, ne vous enclavez pas dans une technologie en particulier et gardez une bonne ouverture d'esprit.
=== Conventions
=== Let's keep in touch
include::part-1-workspace/_main.adoc[]
include::part-2-deployment/_main.adoc[]
include::part-3-data-model/_index.adoc[]
include::part-4-services-oriented-applications/_main.adoc[]
include::part-3-data-model/_index.adoc[]
include::part-5-go-live/_index.adoc[]
include::part-9-resources/_index.adoc[]

View File

@ -13,3 +13,5 @@ Ensuite, nous pourrons traduire ces besoins en fonctionnalités et finalement ef
include::gwift/_main.adoc[]
include::khana/_main.adoc[]
include::legacy/_index_.adoc[]

View File

View File

@ -1,10 +0,0 @@
== Snippets utiles (et forcément dispensables)
=== Récupération du dernier tag Git en Python
L'idée ici est simplement de pouvoir afficher le numéro de version ou le hash d'exécution du code, sans avoir à se connecter au dépôt. Cela apporte une certaine transparence, *sous réserve que le code soit géré par Git*. Si vous suivez scrupuleusement les 12 facteurs, la version de l'application déployée n'est plus sensée conserver un lien avec votre dépôt d'origine... Si vous déployez votre code en utilisant un `git fetch` puis un `git checkout <tag_name>`, le morceau de code ci-dessous pourra vous intéresser :-)
[source,python]
----
----