IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

3 solutions au problème des 3 couches: le développeur Ophir Lojkine propose d'éliminer la complexité accidentelle et la duplication des efforts
En choisissant la technologie adaptée à chaque problème

Le , par gayepej

14PARTAGES

18  0 
Citation Envoyé par Stéphane Le Calme
Pour situer les lecteurs dans le contexte, le développeur Ophir Lojkine est revenu sur le billet qu'il a co-écrit avec Yurii Rashkovskii au sujet du modèle d’architecture logicielle à trois niveaux (base de données, backend et frontend), souvent utilisé pour développer des applications web. Ils ont expliqué que ce modèle impose aux développeurs de nombreuses tâches fastidieuses et répétitives, qui les empêchent de se concentrer sur l’innovation et la création de nouvelles fonctionnalités pour les utilisateurs.

Pour apporter plus d'éclaircissements sur les points éventuellement mal compris, il s'est proposé de rédiger ce message.

Bonjour à tous,

Je suis Ophir Lojkine, le contributeur principal du serveur d'application open-source SQLPage, et co-auteur de l'article original "Repeating Yourself Thrice Doesn’t Turn You Into a 3x Developer", dont la traduction a été publiée ici. Mon ami Yurii, qui a partagé notre article, est originaire d'Ukraine. Initialement, nous avions donc rédigé l'article en anglais, mais je profite de cette opportunité pour apporter quelques éclaircissements, étant francophone.

En bref, l'article visait à examiner le modèle conventionnel de découpage d'applications en trois éléments distincts :
  1. une interface graphique (frontend),
  2. un serveur applicatif (backend),
  3. et une base de données.

Dans de nombreux projets, cela se traduit par trois implémentations distinctes du modèle de données de l'application :
  1. D'abord, en SQL, sous la forme de tables et de clefs,
  2. Ensuite, dans des langages côté serveur comme Java, Python, ou PHP, pour créer une API facilitant l'accès à la base de données,
  3. Enfin, en JavaScript ou en TypeScript pour mettre en œuvre la manipulation des données dans l'interface utilisateur.




Il faut noter que l'on parle ici de trois couches physiquement distinctes, dont le code est généralement exécuté sur des machines séparées. On ne parle pas de la manière dont le code est structuré à l'intérieur de chaque couche, que ce soit une architecture Modèle-Vue-Contrôleur ou une autre.

Ce modèle en trois couches présente plusieurs avantages: la spécialisation des programmeurs, la possibilité de travailler en parallèle, la facilitation du développement de projets complexes, et une exploitation optimale des capacités de l'infrastructure sur laquelle chaque couche est déployée : navigateur web, serveur applicatif et base de données.

Néanmoins, dans les projets d'envergure, on constate souvent une certaine redondance du code entre les différentes couches, ainsi qu'une part non négligeable de code dédiée à la communication entre celles-ci. Pour les petites équipes ou les projets gérés par une seule personne, cela devient un inconvénient majeur.

Heureusement, plusieurs approches permettent de résoudre ce problème :
  • Pour les applications axées principalement sur une interface graphique sophistiquée, on peut abandonner presque complètement le développement côté serveur et exposer directement les données au frontend. Les solutions open-source disponibles dans ce domaine sont notamment Supabase, PocketBase ou Hasura.
  • Pour les applications avec une logique métier prédominante, les frameworks web traditionnels résolvent ce problème en centralisant le contrôle du frontend et de la base de données dans le code backend. Une solution commune implique l'utilisation d'un ORM et d'un système de templating au lieu d'une application javascript dédiée. Ces frameworks sont nombreux, on peut notamment citer Django, Ruby on Rails, ou Symphony.
  • Pour les applications plus simples, il est possible de s'abstraire à la fois du backend et du frontend en adoptant une approche database-first. Cette alternative, bien que moins répandue, s'avère puissante et permet de tirer parti des capacités modernes souvent sous-exploitées des bases de données relationnelles. L'objectif de l'article initial était de présenter cette approche moins connue.
    • SQLPage est un représentant de cette dernière catégorie, qui permet de concevoir une application web complète en SQL. Cela peut entraîner une perte de contrôle sur l'apparence visuelle précise de l'application, laquelle adoptera une apparence "standardisée". En revanche, cela se traduit par des gains significatifs en termes de vitesse de développement, de simplicité et de performances. Cette solution ne vise pas à concurrencer les frameworks classiques, mais plutôt à s'intégrer plus tôt dans le cycle de vie d'un projet. Elle permet ainsi de développer rapidement une structure de données adaptée à l'application, et d'itérer dessus tout en bénéficiant d'un retour visuel sur le résultat final en continu. Ensuite, lorsque l'application prend de l'ampleur, il est aisé d'ajouter un frontend et un backend classiques au-dessus de la base de données existante, sans devoir recommencer à zéro.

Quelle que soit l'approche choisie, une solide compréhension de la structure conventionnelle en trois couches, ainsi qu'une perspective éclairée sur les défis qu'elle engendre et les solutions envisageables, facilite la prise de décision et l'évolution du projet avec les technologies les mieux adaptées.

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de yahiko
Rédacteur/Modérateur https://www.developpez.com
Le 08/08/2023 à 18:22
J'ai quand même l'impression que cela fait un moment que l'industrie du logiciel a conscience du tort qu'à fait le modèle MVC aux applications.
La Clean Architecture est une solution élégante et relativement efficace du point de vue de la mise en œuvre, et répond à la fois à la problématique du couplage et de la redondance du modèle tel qu'évoqué dans l'article.
Dommage que l'auteur n'en parle pas et que pour palier les inconvénients du MVC, il sous-entend utiliser la méthode R.A.C.H.E.
4  2 
Avatar de Aspartame
Membre confirmé https://www.developpez.com
Le 09/08/2023 à 22:36
Et Omnigres, un outil sur lequel lui-même il travaille
...

ceci explique cela non ?
1  0 
Avatar de Zulut
Candidat au Club https://www.developpez.com
Le 09/08/2023 à 0:30
Je trouve que cette approche Database-first a l'avantage de la simplicité, souvent gage de qualité. Elle permet un développement rapide sur une seule couche. Pour autant, l'idée d'un mapping automatique s'appuyant sur du sql est ancien et plus ou moins abandonné (voir Access), ce qui me fait me poser la question : est-ce judicieux de s'appuyer sur du sql?

L'inconvénient que je vois est le manque d'evolutivité, maintenabilite et reutilisabilité par rapport à une approche objet (design patterns VS stockage des fichiers SQL...)

Ne serait il pas envisageable d'avoir une approche object-first simplifiée au maximum? avec par exemple uniquement des pojo java accompagnés de mappings ou annotations simples (style orm et gui)? L'avantage évident serait un meilleur design, tout en permettant un développement rapide sur une seule couche (objet).

Cependant, je suis d'accord pour dire que l'approche database first est plus concise car elle évite d'avoir une couche intermédiaire objet.

Au final, les 2 approches me plaisent bien même si, dans un context d'application simple, j'ai tout de meme une légère préférence pour celle qui me permet une plus grande créativité (car on sait jamais, l'application simple peut grandir! &#128513
0  0 
Avatar de walfrat
Membre émérite https://www.developpez.com
Le 09/08/2023 à 12:22
Et bien tout d'abord, merci pour ce retour de message, on se voit bien confirmer que le MVC n'était pas le sujet central de la discussion.

Je pense qu'il y a un petit manque de recul déjà sur pourquoi une grosse majorité fait comme cela aujourd'hui ? A savoir trois couches chacunes une part de développement importante malgré le découpage en responsabilité.

Je veux dire par là : faire une application avec une IHM légère, c'est ce qu'on faisait dans les années 2000 avec principalement du PHP qui pissait du HTML.

Je vois plusieurs éléments de réponses :
  • Des exigences accrus en matières d'ergonomies
  • Des exigences accrus en termes de temps de réponses de l'application
  • Des exigences accrus en termes de sécurité
  • Les gros : GAFAM, Deezer , Spotifity qui y vont tous de leur bonne recommandant sur comment ils ont fait.


Sur l'ergonomie : cela limite l'utilisation d'application type PHP/HTML/CSS et peu de JS comme à l'époque car il faut des composant graphiques beaucoup plus riche.
Sur les temps de réponses : cela tend à diminuer le volume globale d'échange entre le client et le serveur a profit d'une API plus riche et détaillée pour chaque opération, ce qui fait donc "grossir" le code du client et du serveur.
Sur la sécurité : cela complexifie et fait encore une fois gonfler le code a tous les niveaux.
Les gros : Les conseils qu'ils donnent sont réel et efficaces, mais il faut comprendre qu'ils font des sites web pour des millions de personnes, et donc pour cela, il faut encore potentiellement complexifier et grossir le code du client/serveur pour le supporter correctement.

Pour savoir quoi faire ou pas, il faut donc déjà que le développeur comprenne quel sont les exigences sur son applications: s'il y a un gros besoin en ergonomies, il n’échapperas sans doute pas à un frontend riche.
Sur le côté performance, beaucoup de conseils de ces dernières années sont tournés vers le mobile, si tu en fais, c'est cool t'as plein de conseils lié à ça, si ton projet n'est clairement pas adressés aux mobiles, il faut faire la part des choses pour ne pas complexifier le code inutilement.

Là où je coince sur les solutions avancés dans cet article c'est notamment sur les exigences de sécurités : si on considère que la "petite équipe" ou "développeur seul" va devoir faire un site web exposé sur internet, tu vas forcément te retrouver avec une couches d'authentification/sécurité et d'ergonomies (parce que tu peux pas vraiment faire un truc style années 90 en termes d'ergonomies aujourd'hui pour les utilisateur) et du coup tel que c'est exposé ici dans l'article je ne vois que la catégorie des applis avec du templating côté serveur qui peut faire potentiellement l'économie d'un frontend riche.
0  0 
Avatar de psykokarl
Membre confirmé https://www.developpez.com
Le 09/08/2023 à 17:25
Citation Envoyé par walfrat Voir le message
Là où je coince sur les solutions avancés dans cet article c'est notamment sur les exigences de sécurités : si on considère que la "petite équipe" ou "développeur seul" va devoir faire un site web exposé sur internet, tu vas forcément te retrouver avec une couches d'authentification/sécurité et d'ergonomies (parce que tu peux pas vraiment faire un truc style années 90 en termes d'ergonomies aujourd'hui pour les utilisateur) et du coup tel que c'est exposé ici dans l'article je ne vois que la catégorie des applis avec du templating côté serveur qui peut faire potentiellement l'économie d'un frontend riche.
Je vois la chose comme une interface graphique SQL, un peu comme le propose un phpMyAdmin, mais d'avantage orienté utilisateur final que administrateur :

  • une interface graphique plus sexy, légèrement customisable.
  • des droits d’accès en lecture/écriture géré par le SGBD
  • utilisation systématique de vue/tables virtuelles
  • utilisation systématique de procédure stockées
  • génération de code automatique niveau back : repository, DTO avec les types basés sur le schema bdd (nom procédure stockée, nom de table, type des colonnes, etc => donc pas de redondance).
  • proposition d'une api qui va bien.
  • etc...

Il y a matière a faire pas mal de chose. Les questions que je me poserai tourneraient d'avantage de la scalabilité, de la gestion des requetes en asynchrone, etc, qui devront probablement être géré par le backend de toute façon.
La techno est présentée comme un outil pour développeur solo, ou une très petite équipe. Je ne vois pas le développeur solo créer un site à fort traffic. Ça peut faire le boulot pour un outil interne, pas forcément en ligne, si il fait fait bien ce qu'on lui demande.
Il y a même moyen que le projet soit repris pour des sites à fort traffic dans un second temps. Si l'aspect bdd est gérée de façon optimale des outils backend seront développés pour gérer les limitations de l'outil.
0  0 
Avatar de psykokarl
Membre confirmé https://www.developpez.com
Le 09/08/2023 à 11:36
Citation Envoyé par Zulut Voir le message
L'inconvénient que je vois est le manque d'evolutivité, maintenabilite et reutilisabilité par rapport à une approche objet (design patterns VS stockage des fichiers SQL...)
L’inconvénient vient principalement du manque de connaissance du langage SQL et de la confusion générale entre le langage (le SQL) et le moteur de stockage/recherche qui tourne en arrière plan (qui pourrait être n'importe quoi). Niveau évolutivité, maintenabilité, évolutivité, le SQL propose avant tout de restituer les données demandées, sous la forme demandée. Le SQL est quasiment le langage le langage de mapping ultime.
Le problème du SQL est qu'il ne permet pas réellement de choisir l'algo de stockage et/ou de recherche et encore moins de le créer. Les techniques d'optimisation de recherches sont peu élégantes, ce qui ne manquera pas d'en rebuter. Les algos qui tournent en arrière fond ne sont pas forcément pertinent pour le type d'utilisation souhaité. Cela explique intérêts pour les SGBD non relationnel.
0  1 
Avatar de gayepej
Membre du Club https://www.developpez.com
Le 09/08/2023 à 22:08
Citation Envoyé par psykokarl Voir le message

Les questions que je me poserai tourneraient d'avantage de la scalabilité, de la gestion des requêtes en asynchrone, etc, qui devront probablement être géré par le backend de toute façon.
Pour le passage à l'échelle, il y a plusieurs aspects à prendre en compte:

  • La performance. Pour cela, il n'y a pas vraiment à s'inquiéter. SQLPage est écrit en rust, et on peut compter sur un gain de performance d'au moins ~10x par rapport à quelque chose écrit à la main en python, par exemple. SQLPage propose en plus une version serverless, pour un passage à l'échelle horizontal quasiment infini à très faible coût.
  • La sécurité et la gestion des permissions. La plupart des questions de sécurité de base ne se posent pas vraiment avec SQLPage, et on peut utiliser le composant authentification pour gérer les permissions.
  • La gestion de la complexité. Ici, je conseillerais de passer sur d'autres technologies progressivement, en gardant la même base de données, au fur et à mesure que les besoins en interface graphique et en logique métier se complexifient et deviennent difficile à gérer en SQL avec les composants fournis par SQLPage. Comme l'outil n'impose pas de structure de base de données, il joue très bien avec n'importe quel autre backend qui se connecte à la même base de données. Et pour le frontend, on peut commencer par développer un composant react à l'intérieur de SQLPage avant de migrer vers un front entièrement en javascript, par exemple.
0  1