<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Astroip]]></title><description><![CDATA[Bienvenue sur notre blog dédié à l’architecture et au développement logiciel. Découvrez des articles sur la programmation orientée objet, l’intégration continue, la sécurité, les microservices, et plus encore. Que vous soyez débutant ou confirmé, nos articles, avec des exemples concrets et des analogies claires, vous aideront à approfondir vos connaissances et à rester à jour avec les dernières technologies.]]></description><link>https://blog.astroip.fr</link><image><url>https://cdn.hashnode.com/uploads/logos/69ab857d0bca1a39765b0c97/75be8512-2a79-414b-b6ff-a39f89faee22.png</url><title>Astroip</title><link>https://blog.astroip.fr</link></image><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 18:22:23 GMT</lastBuildDate><atom:link href="https://blog.astroip.fr/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Qu’est-ce que l’architecture d’un système ?]]></title><description><![CDATA[Quand on demande « Quelle est l’architecture de votre système ? »
La réponse la plus courante est souvent :

« On est en Microservice, ou architecture en couche (Layered).. voir meme en Clean Architec]]></description><link>https://blog.astroip.fr/qu-est-ce-que-larchitecture-dun-systeme</link><guid isPermaLink="true">https://blog.astroip.fr/qu-est-ce-que-larchitecture-dun-systeme</guid><category><![CDATA[software architecture]]></category><category><![CDATA[System Design]]></category><category><![CDATA[software development]]></category><category><![CDATA[Software Engineering]]></category><category><![CDATA[Microservices]]></category><category><![CDATA[DDD]]></category><category><![CDATA[clean code]]></category><category><![CDATA[Clean Architecture]]></category><dc:creator><![CDATA[astroip]]></dc:creator><pubDate>Sat, 07 Mar 2026 03:49:43 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69ab857d0bca1a39765b0c97/8d1165af-296b-4a35-9cbf-8cd3a905d3cc.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Quand on demande « Quelle est l’architecture de votre système ? »</strong></p>
<p>La réponse la plus courante est souvent :</p>
<blockquote>
<p>« On est en <strong>Microservice</strong>, ou <strong>architecture en couche</strong> (Layered).. voir meme en <strong>Clean Architecture</strong> »</p>
</blockquote>
<p>Mais en réalité cela ne décrit qu’une seule chose : <strong>la structure technique du système.</strong></p>
<p>C’est comme dire d'un temple grec :</p>
<blockquote>
<p>« il est construit en marbre » ou « il est ionique »</p>
</blockquote>
<p>ce qui n’est pas faux, mais ça ne dit rien sur l’architecture du temple.</p>
<h1>🏛️ L’analogie du temple grec</h1>
<p>Pour comprendre ce qu'est réellement l'architecture d'un système, j'aime utiliser <strong>l'analogie d'un temple grec</strong> comme le <a href="https://fr.wikipedia.org/wiki/Parth%C3%A9non">Parthénon</a>.</p>
<p>Un temple repose sur trois éléments fondamentaux : le toit, les piliers (colonnes) et la base</p>
<h2>1. Le Toit : entablement, fronton et toiture</h2>
<img src="https://cdn.hashnode.com/uploads/covers/69ab857d0bca1a39765b0c97/39b87f70-32b9-4a15-b8b9-1c9143a30b66.png" alt="" style="display:block;margin:0 auto" />

<p>La partie visible, spectaculaire du temple est composée de <strong>l'entablement</strong>, du <strong>fronton</strong> et de la partie toiture. L'entablement repose directement sur les colonnes et comprend <strong>l'architrave</strong>, <strong>la frise</strong> et <strong>la corniche</strong>.</p>
<ul>
<li><p><strong>Le fronton</strong> : sommet triangulaire du temple qui ferme la toiture et complète la structure supérieure. Il expose une surface visible destinée à accueillir des scènes mythologiques ou religieuse, rendant l'histoire et la fonction du temple immédiatement lisible depuis l'agoras</p>
</li>
<li><p><strong>La corniche</strong> : partie saillante supérieure de l’entablement qui termine la façade et protège les éléments inférieurs contre les intempéries et sert également d'element décoratifs pouvant accueillir des <a href="https://fr.wikipedia.org/wiki/Acrot%C3%A8re#:~:text=Dans%20l'architecture%20classique%2C%20grecque,la%20villa%20Giulia%20de%20Rome.">acrotères</a>.</p>
</li>
<li><p><strong>La frise</strong> est une bande horizontale comprise entre l'architrave et la corniche. Elle est conçue pour recevoir des éléments narratifs et décoratifs représentant processions, batailles ou scène mythologiques, illustrant l'identité du temple ou de la cité.</p>
</li>
<li><p><strong>L'architrave</strong> est l'élément inférieur de l'entablement qui repose sur les chapiteaux des colonnes, element clé qui transmet et repartit les charges de la structure superieure vers les colonnes.</p>
</li>
<li><p><strong>Entablement</strong> : Ensemble horizontal composé de <strong>l’architrave, de la frise et de la corniche</strong>. Constitue la structure supérieure portée par les colonnes et forme la base du fronton et de la toiture.</p>
</li>
<li><p><strong>Chapiteau</strong> : élément de transition entre la colonne et l'architrave. Assure une meilleure distribution des charges tout en marquant visuellement l'ordre architectural (dorique, ionique ou corinthien).</p>
</li>
</ul>
<blockquote>
<p>Bien qu’il soit situé sous l’entablement, le chapiteau n’en fait pas réellement partie. Il joue le rôle de pièce de transition entre la colonne et la structure supérieure. On le mentionne ici pour matérialiser ce point de jonction entre les deux grands composants du temple : les colonnes et l’entablement qu’elles supportent.</p>
</blockquote>
<h2>2. Des piliers</h2>
<img src="https://cdn.hashnode.com/uploads/covers/69ab857d0bca1a39765b0c97/df39339b-c922-4111-8433-8ceaf4ccb39c.png" alt="" style="display:block;margin:0 auto" />

<p>Les <strong>colonnes</strong> sont les piliers du temple. Elles soutiennent l’<strong>entablement</strong> et la toiture décrits dans la section précédente. Leur rôle est simple : <strong>porter la charge imposée par la structure supérieure</strong>.</p>
<p>Autrement dit, la forme et les proportions des colonnes ne sont pas seulement esthétiques. Elles sont choisies en fonction <strong>des contraintes imposées par le toit</strong> : son poids, sa portée et la richesse de son décor.</p>
<p>Les Grecs ont ainsi développé trois grands <a href="https://passerelles.essentiels.bnf.fr/fr/chronologie/construction/35dd786d-fd18-410f-8eef-7848b2c369ab-parthenon-athenes/article/078a7d8a-7aef-4bfd-a6dc-3f52b24a6883-trois-ordres-architecturaux-antiques-et-leur-posterite">ordres architecturaux</a>, chacun offrant un compromis différent entre <strong>robustesse, capacité de charge et finesse structurelle</strong>.</p>
<h3><strong>Dorique</strong></h3>
<p>L’ordre dorique est le plus ancien et le plus robuste. La colonne est massive, avec un fût épais et un chapiteau simple, ce qui lui permet de supporter un <strong>entablement particulièrement lourd</strong>.</p>
<p>Cette solidité autorise également <strong>un espacement plus important entre les colonnes</strong>, ce qui permet de couvrir de grandes portées et de supporter des structures supérieures monumentales. C’est pour cette raison que les temples les plus imposants, comme le <a href="https://fr.wikipedia.org/wiki/Parth%C3%A9non">Parthénon</a>, utilisent l’ordre dorique.</p>
<h3>Ionique</h3>
<p>L’ordre ionique introduit des colonnes <strong>plus élancées et plus fines</strong>, reconnaissables à leur chapiteau à volutes. Cette finesse apporte élégance et légèreté visuelle, mais réduit la capacité de charge.</p>
<p>Un temple ionique impose donc <strong>un entablement plus léger</strong> et nécessite généralement <strong>un espacement plus réduit entre les colonnes</strong> afin de maintenir la stabilité de la structure.</p>
<h3>Corinthien</h3>
<p>L’ordre corinthien est le plus tardif et le plus décoratif. Les colonnes sont encore plus élancées et leur chapiteau, richement orné de feuilles d’acanthe, accentue l’impression de verticalité et de légèreté.</p>
<p>Cette élégance impose cependant des contraintes structurelles plus fortes : <strong>l’entablement doit rester relativement léger</strong> et la stabilité repose souvent sur <strong>une multiplication des colonnes</strong> plutôt que sur la robustesse de chacune d’elles.</p>
<blockquote>
<p>Le choix de l’ordre architectural n’est pas uniquement esthétique.<br />Chaque ordre impose des <strong>contraintes structurelles précises</strong> qui déterminent la charge que les colonnes peuvent supporter et influencent directement la dimension de l’entablement et de la base.</p>
</blockquote>
<table>
<thead>
<tr>
<th>Ordre</th>
<th>Proportion (Haut./Diamètre)</th>
<th>Contraintes structurelles</th>
<th>Capacité entablement</th>
<th>Contraintes base (stylobate)</th>
</tr>
</thead>
<tbody><tr>
<td><strong>Dorique</strong></td>
<td><strong>4–8x</strong> (épais, trapu)</td>
<td>Très forte capacité portante, portée jusqu’à ~4 diamètres</td>
<td><strong>Massif</strong> (ex : Parthénon, frise triglyphes lourde)</td>
<td><strong>Large et massif</strong> pour répartir les charges</td>
</tr>
<tr>
<td><strong>Ionique</strong></td>
<td><strong>8–9x</strong> (élancé)</td>
<td>Capacité portante moyenne, portée plus réduite</td>
<td><strong>Moyen</strong> (frise continue sculptée)</td>
<td><strong>Moyen</strong>, temples plus compacts</td>
</tr>
<tr>
<td><strong>Corinthien</strong></td>
<td><strong>10x+</strong> (très élancé)</td>
<td>Structure comparable à l’ionique mais très décorative</td>
<td><strong>Léger à moyen</strong> (décor riche mais charges modérées)</td>
<td><strong>Variable</strong>, souvent utilisé dans temples ou espaces monumentaux</td>
</tr>
</tbody></table>
<p>Après avoir déterminé le type de colonnes capables de supporter les exigences imposées par <strong>l’entablement</strong> et la toiture, il reste une dernière question fondamentale : <strong>sur quoi repose l’ensemble de la structure ?</strong></p>
<p>Car les colonnes, aussi robustes soient-elles, doivent elles-mêmes s’appuyer sur une base capable de répartir correctement les charges vers le sol.</p>
<h2>3. Une base solide</h2>
<img src="https://cdn.hashnode.com/uploads/covers/69ab857d0bca1a39765b0c97/fabc335a-6788-4924-b2af-2e26eaa41c9b.png" alt="" style="display:block;margin:0 auto" />

<p>Le <a href="https://fr.wikipedia.org/wiki/Cr%C3%A9pis">crépis</a> est une plateforme composée de trois marches. La marche supérieure, appelée <a href="https://fr.wikipedia.org/wiki/Stylobate">Stylobate</a>, supporte directement les colonnes. Sa taille et sa structure doivent être adaptées à l’ordre architectural choisi, car elle doit supporter le poids des colonnes, de l’entablement et de la toiture.</p>
<p>Autrement dit, le dimensionnement de la base dépend du type de colonnes et de la charge qu’elles doivent porter.</p>
<h1><strong>💬 Oui..! Mais l'architecture logicielle dans tout ça ?</strong></h1>
<img src="https://cdn.hashnode.com/uploads/covers/69ab857d0bca1a39765b0c97/b598a750-322e-47f2-9283-aa5a6d9c5e40.png" alt="" style="display:block;margin:0 auto" />

<blockquote>
<p>Vous n'avez pas cliqué pour suivre un cours d’architecture grecque.<br />Pourtant, cette analogie permet de comprendre beaucoup plus clairement ce qu’est réellement l’architecture d’un système.</p>
</blockquote>
<h1>🏛️ Traduire le temple en architecture logicielle</h1>
<img src="https://cdn.hashnode.com/uploads/covers/69ab857d0bca1a39765b0c97/f4c19fb7-52ea-4fa5-b1ae-57254d93e7a1.png" alt="" style="display:block;margin:0 auto" />

<p>Maintenant que nous avons compris comment est construit un temple grec,<br />revenons à notre sujet initial : l’architecture d’un système logiciel.</p>
<p>Dans cette analogie :</p>
<p>- le <strong>toit</strong> représente les exigences métiers visibles<br />- les <strong>piliers</strong> représentent les capacités structurelles du système<br />- la <strong>base</strong> représente la structure technique sur laquelle tout repose</p>
<h2>1. Le toit : les besoins métiers</h2>
<p><em>(Exigences fonctionnelles - EF)</em></p>
<p>Dans un temple grec, le toit est la partie la plus visible. C'est ce que les citoyens voient de loin lorsqu'ils arrivent sur l'agora. C'est là que l'on représente des scènes, des symboles ou des récits qui racontent <strong>ce que présente le temple</strong>.</p>
<p>Autrement dit : le toit ne sert pas seulement à couvrir le bâtiment. Il <strong>porte une histoire.</strong></p>
<p>Dans un système logiciel, c'est exactement le rôle des <strong>besoins métiers</strong>. Ils expriment la <strong>vision du produit</strong> que l'on veut construire, racontent ce que le système doit permettre aux utilisateurs.</p>
<p>C'est le porteur de projet, le Product Owner, ou le métier qui pose <strong>cette vision simple</strong>. Pas de jargon technique, juste des phrases que <strong>tout le monde</strong> comprend :</p>
<ul>
<li><p><strong>Commander en 3 clics maximum</strong></p>
</li>
<li><p><strong>Payer sans jamais stresser sur la sécurité</strong></p>
</li>
<li><p><strong>Suivre ma commande heure par heure</strong>  </p>
</li>
<li><p><strong>Service dispo 24/7, même à Noël</strong></p>
</li>
<li><p><strong>Ajouter 100 produits sans couper le site</strong></p>
</li>
</ul>
<p>Cest éléments sont visibles par tous : utilisateurs, les équipes métiers, sponsors et dirigeants. Comme le fronton d'un temple, ils <strong>exposent la promesse du système au monde</strong>.</p>
<p>Mais pour que cette promesse tienne dans le temps, il faut que quelque chose la soutienne. Et c'est là qu'interviennent les <strong>piliers de l'architecture.</strong></p>
<h2>2. Les piliers</h2>
<p>(<em>Ce qui permet au système de tenir)</em></p>
<p><em>Dans le temple grec, le toit ne repose pas directement sur le sol. Il repose sur des</em> <em><strong>colonnes massives</strong></em> <em>qui porte toute la structure. Sans ces piliers, le temple s'effondre.</em></p>
<p>Dans un système logiciel, ces piliers correspondent aux <strong>fondations de l'architecture</strong>. On peut les regrouper en <strong>trois grandes catégories</strong> :</p>
<ul>
<li><p><strong>les caractéristiques d'architectures (ENF)</strong></p>
</li>
<li><p><strong>les décisions architecturales</strong></p>
</li>
<li><p><strong>les principes de conception</strong></p>
</li>
</ul>
<p>Ces éléments sont étroitement liés, les <strong>caractéristiques d'architecture</strong> agissent comme des <strong>drivers</strong>, ce sont elles qui orientent les choix techniques. Ces <strong>drivers</strong> vont ensuite conduire à :</p>
<ul>
<li><p>des <strong>décisions architecturales</strong> <em>( ce que l'on choisit d'imposer dans le système)</em></p>
</li>
<li><p>des <strong>principes de conception</strong> <em>( les lignes directrices qui guident les équipes)</em></p>
</li>
</ul>
<blockquote>
<p>Les qualités attendues du système influencent <strong>la manière dont il sera construit.</strong></p>
</blockquote>
<p>Voyons maintenant ces piliers plus en détail.</p>
<h3>Premier pilier : les caractéristiques d’architecture (ENF)</h3>
<p>aussi appelées <strong>exigences non fonctionnelles</strong>, décrivent <strong>les qualités que le système doit garantir</strong>. Elles répondent à la question : <strong>« Comment le système doit se comporter ?»</strong> Pas <em><strong>« quoi faire »</strong></em>, mais <em>«</em> <em><strong>comment bien le faire »</strong></em> <em>.</em></p>
<p>Par exemple</p>
<ul>
<li><p><strong>Disponibilité</strong> : Service accessible <strong>24/7</strong>, même à Noël minuit</p>
</li>
<li><p><strong>Performance</strong> : Commande validée en <strong>&lt; 2 secondes</strong></p>
</li>
<li><p><strong>Sécurité</strong> : Paiement <strong>impossible à pirater</strong></p>
</li>
<li><p><strong>Scalabilité</strong> : Supporte <strong>10x trafic Black Friday</strong> sans broncher</p>
</li>
<li><p><strong>Résilience</strong> : Une panne = <strong>zéro interruption client</strong></p>
</li>
<li><p><strong>Maintenabilité / Évolutivité</strong> : ajouter un PSP (Payment Service Provider) sans devoir tout casser.</p>
</li>
</ul>
<p>Ces qualités ne sont pas toujours visibles directement par les utilisateurs. Mais elles déterminent la <strong>solidité du système.</strong></p>
<p>Un site peut promettre</p>
<blockquote>
<p>« commander en 3 clics »</p>
</blockquote>
<p>Mais si le système devient inutilisable dès qu'il y a trop de trafic, la promesse ne tient plus.</p>
<p>Toutes les qualités ne sont pas prioritaires dans tous les systèmes. L'architecture consiste justement à <strong>identifier celles qui comptent vraiment.</strong></p>
<p>Prenons l'exemple d'un site marchand, l'equipe se concentre uniquement sur les fonctionnalités : <strong>Parcourir le catalogue</strong>, <strong>ajouter au panier</strong> et <strong>payer en ligne</strong>.</p>
<p>Tout fonctionne parfaitement...jusqu'au <strong>Black Friday</strong>, le trafic explose, les pages deviennent lentes, certaines commandes échouent et le site finit par tomber.</p>
<p>Le problème ne vient pas des fonctionnalités, il vient du fait que certaine <strong>ENF</strong> n'avaient pas été identifiées comme critiques :</p>
<ul>
<li><p><strong>la scalabilité / élasticité</strong> pour absorber les pics de trafic</p>
</li>
<li><p><strong>la disponibilité</strong> pour maintenir le service accessible</p>
</li>
<li><p>l<strong>a performance</strong> pour garantir la fluidité des parcours clients.</p>
</li>
</ul>
<p>C'est pour cela que les caractéristiques d'architecture sont appelées <strong>drivers</strong>. Elles <strong>pilotent les choix d'architecture</strong>.</p>
<p>Par exemple :</p>
<ul>
<li><p>une exigence force de <strong>scalabilité</strong> pourra pousser vers une architecture <strong>microservice</strong></p>
</li>
<li><p>une exigence forte de <strong>résilience</strong> pourra orienter vers une architecture <strong>event-driven</strong></p>
</li>
<li><p>une exigence forte de sécurité pourra imposer certaines contraintes techniques</p>
</li>
</ul>
<p>Et une fois ces drivers identifiés, il faut encore <strong>les traduire en règles concrètes pour construire le système</strong>.</p>
<p>C’est là qu’interviennent <strong>les décisions architecturales</strong>.</p>
<h3>Deuxième pilier : décisions architecturales</h3>
<img src="https://cdn.hashnode.com/uploads/covers/69ab857d0bca1a39765b0c97/0ccea33a-f663-4cf1-bbe6-e62266505054.png" alt="" style="display:block;margin:0 auto" />

<p>SI les <strong>caractéristiques d'architecture</strong> définissent les qualités que le système doit garantir, les <strong>décisions architecturales</strong> définissent <strong>comment ces qualités vont être concrètement mise en oeuvre</strong>. Autrement dit elle traduisent les drivers du système en <strong>règles de construction.</strong></p>
<p>Le raisonnement est souvent le suivant :</p>
<blockquote>
<p>Qualité recherchée</p>
<p>        ↓</p>
<p>Décision architecturale</p>
<p>        ↓</p>
<p>Règle appliquée dans le système</p>
</blockquote>
<p><strong>Exemple 1 : séparation des responsabilités</strong></p>
<p>Dans un style d’architecture en couches (layered), par exemple, on vous a déjà dit :</p>
<blockquote>
<p>« Seules les couches métier et services peuvent accéder à la base de données. »</p>
</blockquote>
<p>Cette règle empêche ainsi la couche de présentation d’effectuer des appels directs à la base de données. Ce qui permet de préserver la séparation des responsabilités et de faciliter l'évolution du système. Elle protège donc plusieurs qualités du système, notamment la <strong>maintenabilité</strong>, la <strong>cohérence métier</strong> et la <strong>sécurité</strong>, en centralisant l’accès aux données dans la couche métier.</p>
<p><strong>Exemple 2 : interopérabilité et simplicité d’exploitation</strong></p>
<p>On peut trouver aussi des règles concernant les choix des technologies.</p>
<p>L’architecte peut décider de la règle suivant :</p>
<blockquote>
<p>Toutes les API doivent être développées en utilisant le style REST plutôt que GraphQL</p>
</blockquote>
<p>Cette règle peut répondre à plusieurs qualités d’architecture, comme <strong>l’interopérabilité</strong>, la <strong>simplicité d’exploitation</strong> ou la <strong>prévisibilité des performances</strong>.</p>
<p><strong>Exemple 3 : sécurité et conformité</strong></p>
<p>L'architecte peut par exemple imposer la règle suivante :</p>
<blockquote>
<p>Aucune donnée de carte bancaire ne doit être stockée dans le système. Les paiements doivent être délégués à un PSP (Payment Service Provider).</p>
</blockquote>
<p>Cette règle évite au système de manipuler directement des données hautement sensibles.</p>
<p>Les informations de paiement sont traitées par un prestataire spécialisé (Stripe, Paypal, etc.) qui fournit un <strong>token de paiement</strong> utilisé par l’application.</p>
<p>Elle protège ainsi plusieurs qualités du système, notamment <strong>la sécurité</strong>, <strong>la conformité réglementaire</strong> et <strong>la réduction du risque opérationnel</strong>, en externalisant la gestion des données de paiement vers une infrastructure certifiée <strong>PCI DSS</strong>.</p>
<p><strong>Exemple 4 : scalabilité</strong></p>
<p>L’architecte peut également imposer la règle suivante :</p>
<blockquote>
<p><strong>Tout service critique doit être stateless afin de pouvoir être répliqué horizontalement.</strong></p>
</blockquote>
<p>Cette règle permet d’ajouter facilement de nouvelles instances du service lorsque le trafic augmente.</p>
<p>Elle protège ainsi plusieurs qualités du système, notamment <strong>la scalabilité</strong> et la capacité à <strong>absorber les pics de charge</strong>, en permettant au système de répartir le trafic sur plusieurs instances.</p>
<p><strong>Exemple 5 : disponibilité</strong></p>
<p>Enfin, certaines décisions visent à garantir la continuité du service.</p>
<p>L’architecte peut par exemple imposer la règle suivante :</p>
<blockquote>
<p><strong>Tout composant critique doit être déployé avec au moins deux instances dans des zones différentes.</strong></p>
</blockquote>
<p>Cette règle évite qu’une panne isolée rende le service indisponible.</p>
<p>Elle protège ainsi plusieurs qualités du système, notamment <strong>la disponibilité</strong> et <strong>la résilience</strong>, en réduisant l’impact des défaillances d’infrastructure.</p>
<h4>Contraintes organisationnelles</h4>
<img src="https://cdn.hashnode.com/uploads/covers/69ab857d0bca1a39765b0c97/cbb7a949-351e-45ab-8132-a6b42b7981cd.png" alt="" style="display:block;margin:0 auto" />

<p>Mais dans la réalité, l’architecte ne construit pas sur un terrain totalement libre.</p>
<p>À ce stade, il peut être tentant de vouloir <strong>optimiser, moderniser ou introduire de nouvelles technologies</strong> pour répondre au mieux aux qualités recherchées.</p>
<p>Cependant, certaines décisions ne peuvent tout simplement pas être mises en œuvre.</p>
<p>Pourquoi ?</p>
<p>Parce que l’architecture doit aussi composer avec <strong>les contraintes de l’organisation</strong> :</p>
<ul>
<li><p><strong>standards techniques</strong></p>
</li>
<li><p><strong>politiques de sécurité</strong></p>
</li>
<li><p><strong>exigences de gouvernance</strong></p>
</li>
<li><p><strong>contraintes d’exploitation</strong></p>
</li>
</ul>
<p>Autrement dit, même si une solution semble techniquement pertinente, <strong>elle peut être incompatible avec l’environnement de l’entreprise</strong>.</p>
<p>Le plus souvent, ces contraintes prennent la forme de <strong>standards techniques imposés</strong> par l’organisation.</p>
<p>Dans certains cas particuliers, ces règles peuvent être contournées grâce à un mécanisme de <strong>dérogation d’architecture</strong> (<em>Architecture Waiver</em>). La demande est alors étudiée par un <strong>Architecture Review Board (ARB)</strong> (<em>une comité de révision d'architecture)</em> ou un architecte en chef.</p>
<p>Ce comité peut :</p>
<ul>
<li><p><strong>approuver la demande</strong></p>
</li>
<li><p><strong>la refuser</strong></p>
</li>
<li><p><strong>demander des modifications</strong></p>
</li>
<li><p>ou accorder <strong>une dérogation contrôlée</strong></p>
</li>
</ul>
<p>Dans les grandes organisations, ce processus permet de <strong>maintenir la cohérence globale du système d’information</strong>, tout en laissant une certaine marge de manœuvre aux projets.</p>
<p>Les décisions architecturales définissent donc <strong>les règles de construction du système</strong>. Mais une architecture ne se limite pas à <strong>des règles strictes</strong>.</p>
<p>Pour guider les équipes dans les choix quotidiens qui ne peuvent pas tous être formalisés par des règles, on s’appuie sur un troisième pilier : <strong>les principes de conception.</strong></p>
<h3>Troisième pilier : principes de conception</h3>
<img src="https://cdn.hashnode.com/uploads/covers/69ab857d0bca1a39765b0c97/9328f7f5-200e-4c04-bac1-b8b128efafa2.png" alt="" style="display:block;margin:0 auto" />

<p>Lorsque l’on parle d’architecture logicielle sur LinkedIn, ce sont souvent <strong>ces sujets qui reviennent le plus</strong> : <strong>SOLID</strong>, <strong>Clean Architecture</strong>, <strong>Domain Driven Design</strong>, <strong>découplage</strong>, <strong>event-driven</strong>…</p>
<p>Ces concepts sont largement discutés et parfois présentés comme <strong>des règles absolues de l’architecture</strong>. Mais en réalité, ils appartiennent à une catégorie différente : <strong>les principes de conception</strong></p>
<p>Si les <strong>décisions architecturales</strong> définissent les <strong>règles de construction du système</strong>,<br />les <strong>principes de conception</strong> servent plutôt <strong>de lignes directrices</strong> pour guider les équipes de développement. La différence est simple :</p>
<ul>
<li><p>Une <strong>décision architecturale</strong> impose une règle claire dans le système.</p>
</li>
<li><p>Un <strong>principe de conception</strong> oriente les choix lorsque <strong>toutes les situations ne peuvent pas être couvertes par une règle</strong>.</p>
</li>
</ul>
<p>Prenons un exemple issu des décisions vues précédemment. Nous avons établi la règle suivante :</p>
<blockquote>
<p><strong>Toutes les API doivent être développées en utilisant le style REST.</strong></p>
</blockquote>
<p>Cette règle garantit l’interopérabilité et la simplicité d’exploitation. Mais elle ne dit rien sur <strong>la manière dont les services doivent communiquer entre eux</strong>. C’est là qu’intervient un principe de conception.</p>
<p>Par exemple :</p>
<blockquote>
<p><strong>Privilégier la communication asynchrone entre services lorsque cela est possible.</strong></p>
</blockquote>
<p>Ce principe vise à améliorer <strong>la résilience</strong> et <strong>la scalabilité</strong> du système. Cependant, contrairement à une décision architecturale, ce principe n’est <strong>pas une obligation</strong>.</p>
<p>Dans certains cas, une communication <strong>REST ou gRPC</strong> pourra être plus adaptée.</p>
<p>On peut prendre un autre exemple lié à la règle suivante :</p>
<blockquote>
<p><strong>Les paiements doivent être délégués à un PSP.</strong></p>
</blockquote>
<p>Cette décision protège la sécurité et la conformité du système. Mais elle ne dit pas <strong>comment organiser le code du système</strong> pour garder cette sécurité dans le temps.</p>
<p>C’est ici que les <strong>principes de conception</strong> prennent le relais.</p>
<p>Par exemple :</p>
<blockquote>
<p><strong>Les dépendances doivent toujours pointer vers le domaine métier.</strong></p>
</blockquote>
<p>Ce principe, que l’on retrouve dans <strong>Clean Architecture</strong>, permet d’éviter que des détails techniques (comme un PSP, une base de données ou un framework) contaminent la logique métier.</p>
<p>Les principes de conception servent donc à <strong>guider les développeurs dans leurs choix quotidiens</strong>, là où les décisions architecturales ne peuvent pas couvrir tous les cas possibles.</p>
<p>Ils encouragent <strong>certaines pratiques</strong>, sans imposer de règles rigides. Et dans la métaphore du temple :</p>
<ul>
<li><p>les <strong>besoins métiers</strong> sont le toit</p>
</li>
<li><p>les <strong>caractéristiques d’architecture</strong> définissent les qualités des piliers</p>
</li>
<li><p>les <strong>décisions architecturales</strong> fixent les règles de construction</p>
</li>
</ul>
<p>et les <strong>principes de conception</strong> sont <strong>le savoir-faire des bâtisseurs</strong>, ce qui permet au système <strong>de rester solide même lorsque les situations évoluent</strong>.</p>
<h2>3. La base : la structure technique</h2>
<p>Dans un temple grec, les colonnes reposent sur le <strong>stylobate</strong>, la marche supérieure du crépis. Cette base ne porte pas seulement les colonnes : elle <strong>répartit les charges vers le sol</strong> et garantit <strong>la stabilité de l’ensemble</strong>.</p>
<p>Dans un système logiciel, cette base correspond à <strong>la structure technique du système</strong>. C’est elle qui définit <strong>comment les composants sont organisés et interagissent entre eux</strong>.</p>
<p>Mais contrairement à ce que l’on pense souvent, cette structure n’est <strong>pas choisie en premier</strong>. Elle est généralement <strong>la conséquence logique de tout ce qui précède</strong>.</p>
<p>Prenons un exemple simple. Supposons que les <strong>caractéristiques d’architecture</strong> du système soient les suivantes :</p>
<p>Forte <strong>scalabilité |</strong> haute <strong>disponibilité | résilience</strong> face aux pannes</p>
<p>Ces qualités deviennent alors des <strong>drivers du système</strong>. Pour y répondre, l’architecte peut prendre certaines <strong>décisions architecturales</strong>, par exemple :</p>
<ul>
<li><p>les services doivent être <strong>stateless</strong></p>
</li>
<li><p>les composants critiques doivent être <strong>répliqués</strong></p>
</li>
<li><p>les communications doivent être <strong>découplées</strong></p>
</li>
</ul>
<p>Ces décisions se traduisent ensuite en <strong>règles concrètes dans le système</strong> :</p>
<ul>
<li><p>les sessions ne sont jamais stockées en mémoire locale</p>
</li>
<li><p>les services peuvent être <strong>répliqués horizontalement</strong></p>
</li>
<li><p>les traitements critiques passent par <strong>des mécanismes asynchrones</strong></p>
</li>
</ul>
<p>Les <strong>principes de conception</strong> viennent ensuite guider les développeurs dans la mise en œuvre :</p>
<ul>
<li><p><strong>Privilégier le découplage</strong><br /><em>(SOLID – Dependency Inversion / Clean Architecture / Ports &amp; Adapters)</em><br />Le domaine métier ne doit pas dépendre directement des détails techniques (framework, base de données, UI), mais d’interfaces. Le cœur métier définit les contrats, et les implémentations techniques viennent s’y brancher autour.</p>
</li>
<li><p><strong>Favoriser l’autonomie des services</strong><br /><em>(DDD / Microservices / Bounded Context / Event-Driven)</em><br />Chaque service possède son propre modèle métier et peut évoluer indépendamment. Idéalement, il dispose de sa propre base de données et communique avec les autres services via des événements plutôt que des appels en cascade.</p>
</li>
<li><p><strong>Limiter les dépendances entre composants</strong><br /><em>(SOLID – Single Responsibility &amp; Interface Segregation / Clean Architecture / Hexagonal)</em><br />Les composants doivent rester petits, cohérents et bien isolés. Des interfaces simples et un faible couplage facilitent l’évolution du système, les tests et le remplacement de certaines parties sans effet domino.</p>
</li>
</ul>
<p>Et progressivement, une <strong>structure technique cohérente émerge</strong>.</p>
<p>Dans ce cas précis, cette structure pourra naturellement conduire vers une architecture :</p>
<ul>
<li><p><strong>microservices</strong></p>
</li>
<li><p><strong>architecture événementielle</strong></p>
</li>
<li><p>ou <strong>modular monolith fortement découplé</strong></p>
</li>
</ul>
<h1>Conclusion : l’architecture est un équilibre</h1>
<img src="https://cdn.hashnode.com/uploads/covers/69ab857d0bca1a39765b0c97/b5b91bfb-674d-4810-a0eb-9711fde7efcd.png" alt="" style="display:block;margin:0 auto" />

<p>Quand on demande :</p>
<blockquote>
<p>« Quelle est l’architecture de votre système ? »</p>
</blockquote>
<p>la réponse est souvent :</p>
<blockquote>
<p>« Microservices »,<br />« Architecture en couches »,<br />« Clean Architecture ».</p>
</blockquote>
<p>Mais ces réponses ne décrivent en réalité <strong>que la structure technique du système</strong> : la base.</p>
<p>C’est un peu comme dire d’un temple grec :</p>
<blockquote>
<p>« Il est construit en marbre ».</p>
</blockquote>
<p>C’est vrai… mais cela ne dit rien <strong>de son architecture</strong>.</p>
<p>L’architecture d’un système ressemble beaucoup plus à un <strong>temple grec</strong> :</p>
<ul>
<li><p><strong>un toit</strong>, qui représente les besoins métiers que le système doit satisfaire</p>
</li>
<li><p><strong>des piliers</strong>, qui garantissent les capacités structurelles nécessaires pour supporter ces besoins</p>
</li>
<li><p><strong>une base</strong>, qui correspond à la structure technique sur laquelle tout repose</p>
</li>
</ul>
<p>Sans <strong>exigences métiers claires</strong>, il n’y a rien à construire.<br />Sans <strong>piliers solides</strong>, le système ne tient pas.<br />Et sans <strong>base adaptée</strong>, l’ensemble devient instable.</p>
<p>L’architecture logicielle consiste donc à concevoir cet équilibre :</p>
<ul>
<li><p>identifier les <strong>qualités essentielles du système</strong></p>
</li>
<li><p>prendre les <strong>bonnes décisions architecturales</strong></p>
</li>
<li><p>définir des <strong>principes de conception cohérents</strong></p>
</li>
<li><p>et construire <strong>une structure technique capable de supporter l’ensemble</strong></p>
</li>
</ul>
<p>En d’autres termes :</p>
<blockquote>
<p><strong>l’architecture n’est pas seulement une question de technologies.</strong></p>
</blockquote>
<p>C’est <strong>l’art de faire tenir un système</strong>.</p>
<hr />
<p>✍️ <strong>Tarik Moussaoui</strong><br />Architecte logiciel</p>
<p>J’écris sur l’architecture logicielle, les décisions techniques et la conception de systèmes robustes.</p>
<p>→ <a href="https://blog.astroip.fr">https://astroip.fr</a></p>
]]></content:encoded></item></channel></rss>