{"id":21323,"date":"2024-06-24T15:38:44","date_gmt":"2024-06-24T13:38:44","guid":{"rendered":"https:\/\/connectconsulting.be\/clean-architecture\/"},"modified":"2024-06-24T15:38:44","modified_gmt":"2024-06-24T13:38:44","slug":"clean-architecture","status":"publish","type":"post","link":"https:\/\/connectconsulting.be\/fr\/clean-architecture\/","title":{"rendered":"Clean Architecture"},"content":{"rendered":"<p><span style=\"color: #000000;\"><strong>1. Qu&rsquo;est-ce que l&rsquo;architecture?<\/strong><\/span><\/p>\n<ul>\n<li><span style=\"color: #808080;\"><strong>Couches et acc\u00e8s:<\/strong> Dans le d\u00e9veloppement logiciel, l&rsquo;architecture fait r\u00e9f\u00e9rence \u00e0 plus que la simple structure ou organisation du code. Elle d\u00e9crit la chor\u00e9graphie de la fa\u00e7on dont diff\u00e9rentes couches au sein d&rsquo;un syst\u00e8me interagissent les unes avec les autres et comment l&rsquo;information circule \u00e0 travers ces couches. L&rsquo;architecture \u00e9merge lorsqu&rsquo;on d\u00e9limite l&rsquo;acc\u00e8s entre ces couches.  <\/span><\/li>\n<li><span style=\"color: #808080;\"><strong>Principes et Architecture:<\/strong> Bien que l&rsquo;architecture englobe souvent des principes de conception comme SOLID et adopte divers mod\u00e8les de conception, ces \u00e9l\u00e9ments ne constituent pas en soi une architecture.<\/span><\/li>\n<\/ul>\n<p><span style=\"color: #808080;\">Cependant, des principes directeurs et des mod\u00e8les sont indispensables pour une architecture robuste. <\/span><span style=\"color: #808080;\">Ces mod\u00e8les ne sont que des outils qui aident \u00e0 r\u00e9aliser une vision structurelle plus large. Ils ne forment pas l&rsquo;architecture en tant que telle.<br \/>\n<\/span><br \/>\n<span style=\"color: #808080;\">But de l&rsquo;architecture? = s\u00e9paration des pr\u00e9occupations (separation of concerns) <\/span><br \/>\n<span style=\"color: #808080;\">Pourquoi? Elle rend le syst\u00e8me plus extensible, maintenable et plus facile \u00e0 int\u00e9grer pour les nouveaux employ\u00e9s. De plus, si une application suit le principe de s\u00e9paration des pr\u00e9occupations, les co\u00fbts des it\u00e9rations (le temps n\u00e9cessaire pour ajouter une nouvelle fonctionnalit\u00e9) sont r\u00e9duits car la base de code est structur\u00e9e et ses composants sont d\u00e9coupl\u00e9s.  <\/span><\/p>\n<p><strong>2. Qu\u00eate d&rsquo;une architecture<\/strong><\/p>\n<p><span style=\"color: #ff9900;\"><strong>2.1 Architecture de base<\/strong><\/span><br \/>\n<span style=\"color: #808080;\">On cr\u00e9e un projet vide, on cr\u00e9e quelques r\u00e9pertoires et on structure ses fichiers de cette mani\u00e8re. Pas de biblioth\u00e8ques, de couches ou de r\u00e8gles bien d\u00e9finies pour la r\u00e9partition des responsabilit\u00e9s. Juste s&rsquo;assurer que \u00e7a fonctionne. Parfait pour les Proof of Concepts (POC) ou les applications de d\u00e9monstration.   <\/span><\/p>\n<p><span style=\"color: #808080;\">On peut opter pour une architecture de base si l&rsquo;on veut lancer un MVP (Minimum Viable Product) le plus rapidement possible et que l&rsquo;on ne veut pas consacrer de temps et de ressources suppl\u00e9mentaires \u00e0 l&rsquo;apprentissage des principes d&rsquo;autres mod\u00e8les d&rsquo;architecture. Choisir toujours la s\u00e9paration des pr\u00e9occupations. Ne pas d\u00e9velopper de mauvaises habitudes en tant que programmeur; votre code est de l&rsquo;art, alors faites-en une \u0153uvre d&rsquo;art.   <\/span><\/p>\n<p><span style=\"color: #ff9900;\"><strong>2.2 Architecture N-Tier<\/strong><\/span><\/p>\n<p><img decoding=\"async\" class=\"alignnone wp-image-18655\" src=\"https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/1-300x56.png\" alt=\"\" width=\"439\" height=\"82\" srcset=\"https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/1-300x56.png 300w, https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/1.png 479w\" sizes=\"(max-width: 439px) 100vw, 439px\" \/><br \/>\n<span style=\"color: #808080;\">= le fait de diviser son code en couches (tiers), chaque couche g\u00e9rant un domaine d&rsquo;int\u00e9r\u00eat distinct. Le \u00ab\u00a0N\u00a0\u00bb de n-tier indique que l&rsquo;on peut avoir autant de couches que l&rsquo;on souhaite (par exemple, 3-tier, 4-tier)<br \/>(Note: certains disent que cela signifie Neuropsychopharmacologie.)<\/span><br \/>\n<span style=\"color: #808080;\">Couche de pr\u00e9sentation: C&rsquo;est l&rsquo;interface utilis\u00e9e par le client pour communiquer avec votre application (client-facing-layer). Elle peut prendre diff\u00e9rentes formes, des applications mobiles ou de bureau \u00e0 une API ou une ligne de commande. <\/span><br \/>\n<span style=\"color: #808080;\">Par exemple, si vous avez une application distincte pour l&rsquo;UI, construite avec Angular ou React par exemple, qui communique avec une API backend, alors l&rsquo;API elle-m\u00eame sera votre couche de pr\u00e9sentation. (Vous traitez l&rsquo;application Angular comme un client, car c&rsquo;est une application compl\u00e8tement diff\u00e9rente).<\/span><\/p>\n<ul>\n<li><strong>Pr\u00e9sentation<\/strong>\n<ul>\n<li><span style=\"color: #808080;\">Elle appelle une couche de logique m\u00e9tier (business logic layer), qui assure le traitement des requ\u00eates<\/span><\/li>\n<li><span style=\"color: #808080;\">Seules les choses directement li\u00e9es \u00e0 la pr\u00e9sentation (configurations API, routes, &#8230;) se trouvent ici;<\/span><\/li>\n<li><span style=\"color: #808080;\">! Ne laissez pas la logique m\u00e9tier p\u00e9n\u00e9trer dans cette couche! Gardez-la propre des r\u00e8gles de l&rsquo;entreprise!<\/span><\/li>\n<\/ul>\n<\/li>\n<li><strong>Couche de logique m\u00e9tier (Business Logic Layer &#8211; BLL)<\/strong>\n<ul>\n<li><span style=\"color: #808080;\">La logique m\u00e9tier de votre application se trouve ici, avec tout sauf l&rsquo;ORM et autres \u00e9l\u00e9ments li\u00e9s \u00e0 l&rsquo;acquisition de donn\u00e9es, car ils font partie de votre couche suivante =&gt; DAL;<\/span><\/li>\n<li><span style=\"color: #808080;\">Comprend : les services utilis\u00e9s pour la communication avec des syst\u00e8mes externes, tels que l&rsquo;envoi d&rsquo;un e-mail, la diffusion d&rsquo;un message \u00e0 un sujet, etc;<\/span><\/li>\n<li><span style=\"color: #808080;\">Si la BLL doit stocker, extraire, mettre \u00e0 jour ou supprimer des donn\u00e9es, elle fera appel \u00e0 la DAL.<\/span><\/li>\n<\/ul>\n<\/li>\n<li><strong>Couche d&rsquo;acc\u00e8s aux donn\u00e9es (Data Access Layer &#8211; DAL)<\/strong>\n<ul>\n<li><span style=\"color: #808080;\">Th\u00e9oriquement: elle ne sait rien des autres couches et peut \u00eatre modifi\u00e9e \u00e0 tout moment avec une autre impl\u00e9mentation;<\/span><\/li>\n<li><span style=\"color: #808080;\">En raison de la d\u00e9pendance de la BLL \u00e0 la DAL, la logique m\u00e9tier sera affect\u00e9e et les modifications pourront se propager vers le haut, ce qui est un peu \u00e9trange car seule l&rsquo;entreprise devrait pouvoir modifier la BLL;<\/span><\/li>\n<li><span style=\"color: #808080;\">La modification du fournisseur de base de donn\u00e9es n&rsquo;est pas d\u00e9termin\u00e9e par l&rsquo;entreprise, c&rsquo;est une d\u00e9cision infrastructurelle.<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><span style=\"color: #808080;\">Attention aux d\u00e9pendances : Pr\u00e9sentation =&gt; BLL =&gt; DAL.<\/span><\/p>\n<p><span style=\"color: #808080;\">Toute notre application d\u00e9pend de la DAL comme c\u0153ur du syst\u00e8me (= Database Driven Design). Il ne semble pas vraiment judicieux de rendre cette application d\u00e9pendante de la DAL. <\/span><br \/>\n<span style=\"color: #808080;\">Partant de l&rsquo;id\u00e9e que notre application r\u00e9sout un probl\u00e8me commercial, ne serait-il pas pr\u00e9f\u00e9rable d&rsquo;\u00e9lever la BLL et d&rsquo;en faire le c\u0153ur de notre syst\u00e8me et de la rendre ind\u00e9pendante des autres couches?<\/span><\/p>\n<p><span style=\"color: #ff9900;\"><strong>2.3 Architecture hexagonale<\/strong><\/span><\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone wp-image-18658\" src=\"https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/2-300x140.png\" alt=\"\" width=\"400\" height=\"187\" srcset=\"https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/2-300x140.png 300w, https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/2.png 509w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><br \/>\n<span style=\"color: #808080;\">= La BLL est le c\u0153ur. Au sein de la BLL, nous d\u00e9finissons des interfaces qui sont impl\u00e9ment\u00e9es par d&rsquo;autres composants externes. <\/span><br \/>\n<span style=\"color: #808080;\">Exemple : Les abstractions sont enregistr\u00e9es dans la BLL (Irepository). Les impl\u00e9mentations sont fournies par les composants (dans ce cas, Data Access). <\/span><\/p>\n<p><span style=\"color: #808080;\">Dependency Inversion et Dependency Injection nous aident \u00e0 proposer l&rsquo;impl\u00e9mentation de Irepository au moment de l&rsquo;ex\u00e9cution et \u00e0 \u00e9viter ainsi l&rsquo;appel \u00e0 DA lors de la compilation. 0 r\u00e9f\u00e9rences \u00e0 d&rsquo;autres composants de notre application. Elle ne d\u00e9pend de rien d&rsquo;autre que de la BL.  <\/span><\/p>\n<p><span style=\"color: #808080;\">Supprimez toutes les autres d\u00e9pendances des syst\u00e8mes externes (par exemple : IEmailService, IFileManager, &#8230;). Faites abstraction de chaque d\u00e9pendance d&rsquo;un autre syst\u00e8me en ayant une interface au sein de la BL, et son impl\u00e9mentation comme faisant partie d&rsquo;un autre composant. <\/span><\/p>\n<p><span style=\"color: #808080;\">Dans ce contexte, l&rsquo;interface d\u00e9finie par BL est appel\u00e9e un Port, et l&rsquo;impl\u00e9mentation fournie par les autres composants &#8211; Adaptateur (c&rsquo;est pourquoi vous trouverez dans certaines documentations l&rsquo;architecture hexagonale appel\u00e9e Ports et Adaptateurs). <\/span><span style=\"color: #808080;\">Adaptateurs primaires (qui appellent la BL) et adaptateurs secondaires (qui sont appel\u00e9s au moment de l&rsquo;ex\u00e9cution par la BL, comme DA, E-mail). <\/span><span style=\"color: #808080;\">La couche de pr\u00e9sentation du mod\u00e8le N-tier est repr\u00e9sent\u00e9e par les adaptateurs primaires dans le contexte du mod\u00e8le hexagonal. Ils agissent comme un contr\u00f4leur d&rsquo;entr\u00e9e (ingress-controller) et sont des adaptateurs orient\u00e9s client (API, UI, Ligne de commande). Les adaptateurs secondaires sont ceux qui sont appel\u00e9s par la BL et qui g\u00e8rent la communication avec les syst\u00e8mes externes.  <\/span><br \/>\n<span style=\"color: #808080;\"><span style=\"color: #ff9900;\">\u2022<\/span> Les adaptateurs primaires pilotent &#8211; ils font des appels \u00e0 la BL<\/span><br \/>\n<span style=\"color: #808080;\"><span style=\"color: #ff9900;\">\u2022<\/span> Les adaptateurs secondaires sont pilot\u00e9s &#8211; la BL les appelle en raison du contr\u00f4le invers\u00e9.<\/span><\/p>\n<p><span style=\"color: #808080;\">C&rsquo;est ce que nous appelons un Domain Driven Design (DDD).<\/span><br \/>\n<span style=\"color: #808080;\">Probl\u00e8me: C&rsquo;est cool, mais avoir des dizaines de composants n&rsquo;est pas vraiment la meilleure id\u00e9e. Pourrions-nous trouver un moyen de les regroupe. <\/span><\/p>\n<p><span style=\"color: #ff9900;\"><strong>2.4 Architecture en oignon<\/strong><\/span><\/p>\n<p><img decoding=\"async\" class=\"alignnone size-medium wp-image-18661\" src=\"https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/3-300x263.png\" alt=\"\" width=\"300\" height=\"263\" srcset=\"https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/3-300x263.png 300w, https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/3.png 424w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/p>\n<p><span style=\"color: #808080;\">= parce qu&rsquo;elle imite la structure de l&rsquo;oignon. Les couches entourent le noyau. Les d\u00e9pendances vont vers l&rsquo;int\u00e9rieur &#8211; et des couches externes vers les couches internes. L&rsquo;id\u00e9e de la structure en oignon est de placer la logique m\u00e9tier au c\u0153ur et de rendre les autres couches d\u00e9pendantes en utilisant l&rsquo;inversion de d\u00e9pendance et l&rsquo;injection de d\u00e9pendance.   <\/span><\/p>\n<p><span style=\"color: #808080;\">2 particularit\u00e9s:<\/span><\/p>\n<ul>\n<li><strong>Les adaptateurs primaires<\/strong> (<span style=\"color: #808080;\">ceux orient\u00e9s client) font maintenant partie de la couche de pr\u00e9sentation, tandis que les adaptateurs secondaires (ceux qui communiquent avec les syst\u00e8mes externes) font partie de la couche d&rsquo;infrastructure.<\/span><\/li>\n<li><strong>La logique m\u00e9tier (BL)<\/strong> <span style=\"color: #808080;\">La logique m\u00e9tier (BL) est maintenant divis\u00e9e en N couches. N parce que le nombre de couches peut varier selon les cas. Le c\u0153ur est repr\u00e9sent\u00e9 par une couche de domaine. Cette couche n&rsquo;a pas de d\u00e9pendances et contient des mod\u00e8les commerciaux, des entit\u00e9s, des objets de valeur, des \u00e9num\u00e9rations et d&rsquo;autres objets li\u00e9s \u00e0 l&rsquo;entreprise. (Le respect des principes DDD est une bonne pratique pour une bonne conception de la couche de domaine). Les couches interm\u00e9diaires peuvent varier. Habituellement, vous placez les services de domaine (un autre concept de DDD) dans une couche distincte autour du domaine, avec quelques ports (interfaces) dont l&rsquo;impl\u00e9mentation se trouve dans la couche d&rsquo;infrastructure externe.<br \/>(Si vous suiviez CQRS, la commande et la requ\u00eate pourraient avoir leur propre couche autour des services de domaine.) (Si vous utilisez le mod\u00e8le de cas d&rsquo;utilisation, vous le placerez \u00e9galement dans une couche distincte, etc.) Il n&rsquo;y a pas de r\u00e8gles strictes sur le nombre de couches que vous pouvez avoir.      <\/span><\/li>\n<\/ul>\n<p><span style=\"color: #ff9900;\"><strong>2.5 Architecture propre<\/strong><\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-18664\" src=\"https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/4-300x223.png\" alt=\"\" width=\"362\" height=\"269\" srcset=\"https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/4-300x223.png 300w, https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/4.png 407w\" sizes=\"(max-width: 362px) 100vw, 362px\" \/><br \/>\n<span style=\"color: #808080;\">Ajoute un peu de r\u00e9gulation \u00e0 la structure en oignon. Elle stipule que la couche de domaine est destin\u00e9e aux r\u00e8gles m\u00e9tier \u00e0 l&rsquo;\u00e9chelle de l&rsquo;entreprise qui sont les moins susceptibles de changer (entit\u00e9s, \u00e9num\u00e9rations, objets de valeur, objets de domaine de base). Autour de celle-ci se trouve la couche d&rsquo;application, qui comprend tout ce qui a trait \u00e0 la fa\u00e7on dont l&rsquo;entreprise fonctionne. C&rsquo;est \u00e9galement l\u00e0 que se trouvent les ports (interfaces). La couche d&rsquo;infrastructure contient des adaptateurs (impl\u00e9mentations) qui servent de passerelles vers les syst\u00e8mes externes.    <\/span><\/p>\n<p><span style=\"color: #808080;\"><strong>Principes cl\u00e9s: <\/strong><\/span><\/p>\n<ul>\n<li><strong>R\u00e8gle de d\u00e9pendance:<\/strong><span style=\"color: #808080;\"> Les d\u00e9pendances doivent toujours pointer vers l&rsquo;int\u00e9rieur, vers le c\u0153ur de la logique m\u00e9tier. Les couches int\u00e9rieures ne doivent pas d\u00e9pendre des couches ext\u00e9rieures. <\/span><\/li>\n<li><strong>S\u00e9paration des pr\u00e9occupations:<\/strong> <span style=\"color: #808080;\">Chaque couche a une responsabilit\u00e9 sp\u00e9cifique et les pr\u00e9occupations d&rsquo;une couche ne doivent pas s&rsquo;infiltrer dans une autre.<br \/>\n<\/span><span style=\"color: #808080;\">Cette s\u00e9paration aide \u00e0 maintenir la modularit\u00e9 et la testabilit\u00e9.<\/span><\/li>\n<li><strong>Ind\u00e9pendance des frameworks::<\/strong> <span style=\"color: #808080;\">Le c\u0153ur de la logique m\u00e9tier ne doit pas d\u00e9pendre des frameworks ou outils sp\u00e9cifiques. Les frameworks et les outils externes doivent s&rsquo;adapter \u00e0 l&rsquo;application et non l&rsquo;inverse. <\/span><\/li>\n<li><span style=\"color: #808080;\">Peut conduire \u00e0 un code mieux maintenable, \u00e9volutif et testable.<\/span><\/li>\n<\/ul>\n<p><span style=\"color: #808080;\"><strong>AVANTAGES:<\/strong><\/span><\/p>\n<ul>\n<li><strong>Modularit\u00e9 et maintenabilit\u00e9<\/strong><br \/>\n<span style=\"color: #808080;\"><em>Avantage:<\/em> L&rsquo;architecture propre favorise la modularit\u00e9 en s\u00e9parant les responsabilit\u00e9s en couches distinctes. Cela rend la base de code plus maintenable et facilite l&rsquo;application de mises \u00e0 jour ou de modifications \u00e0 des composants sp\u00e9cifiques sans affecter l&rsquo;ensemble de l&rsquo;application. <\/span><\/li>\n<li><strong>Testabilit\u00e9<\/strong><br \/>\n<span style=\"color: #808080;\"><em>Avantage:<\/em><\/span><span style=\"color: #808080;\">La s\u00e9paration des pr\u00e9occupations facilite les tests unitaires.<br \/>La logique m\u00e9tier dans la couche de base peut \u00eatre test\u00e9e ind\u00e9pendamment des d\u00e9pendances externes, ce qui conduit \u00e0 des tests plus robustes et fiables. <\/span><\/li>\n<li><strong>Ind\u00e9pendance des frameworks<\/strong><br \/>\n<span style=\"color: #808080;\"><em>Avantage:<\/em> Le c\u0153ur de la logique m\u00e9tier n&rsquo;est pas \u00e9troitement li\u00e9 \u00e0 des frameworks ou des biblioth\u00e8ques sp\u00e9cifiques. Cette ind\u00e9pendance facilite le changement ou la mise \u00e0 niveau des frameworks sans affecter les fonctionnalit\u00e9s de base. <\/span><\/li>\n<li><strong>Flexibilit\u00e9<br \/>\n<\/strong><span style=\"color: #808080;\"><em>Avantage: <\/em>L&rsquo;architecture propre offre une flexibilit\u00e9 dans le choix des technologies pour les diff\u00e9rentes couches.<br \/>\n<\/span><span style=\"color: #808080;\"><em>Par exemple<\/em>, vous pouvez passer d&rsquo;un framework web \u00e0 un autre, de bases de donn\u00e9es ou de frameworks d&rsquo;UI sans apporter de modifications majeures au c\u0153ur de la logique m\u00e9tier.<\/span><\/li>\n<li><strong>\u00c9volutivit\u00e9<\/strong><br \/>\n<span style=\"color: #808080;\"><em>Avantage:<\/em> La structure modulaire de l&rsquo;architecture propre permet une meilleure \u00e9volutivit\u00e9. Il est plus facile d&rsquo;adapter diff\u00e9rentes parties de l&rsquo;application ind\u00e9pendamment, et les \u00e9quipes peuvent travailler sur des couches sp\u00e9cifiques sans g\u00eaner les autres. <\/span><\/li>\n<\/ul>\n<p><span style=\"color: #808080;\"><strong>INCONV\u00c9NIENTS:<\/strong><\/span><\/p>\n<ul>\n<li><strong>Complexit\u00e9<\/strong><br \/>\n<span style=\"color: #808080;\"><em>Inconv\u00e9nient:<\/em> La mise en \u0153uvre de l&rsquo;architecture propre peut introduire une complexit\u00e9 suppl\u00e9mentaire, en particulier au d\u00e9but du d\u00e9veloppement. La s\u00e9paration des responsabilit\u00e9s peut entra\u00eener davantage de fichiers et de dossiers, ce qui peut \u00eatre accablant pour les petits projets. <\/span><\/li>\n<li><strong>Courbe d&rsquo;apprentissage<\/strong><br \/>\n<span style=\"color: #808080;\"><em>Inconv\u00e9nient<\/em>: Les d\u00e9veloppeurs qui d\u00e9couvrent l&rsquo;architecture propre peuvent \u00eatre confront\u00e9s \u00e0 une courbe d&rsquo;apprentissage. La compr\u00e9hension des principes et la mise en \u0153uvre correcte de l&rsquo;architecture peuvent prendre du temps et des efforts. <\/span><\/li>\n<li><strong>Code passe-partout (boilerplate)<\/strong><br \/>\n<span style=\"color: #808080;\"><em>Inconv\u00e9nient:<\/em> L&rsquo;architecture propre peut impliquer l&rsquo;\u00e9criture de plus de code passe-partout, en particulier lors du mappage des donn\u00e9es entre les couches. Cela peut entra\u00eener un temps de d\u00e9veloppement plus long, bien qu&rsquo;il soit affirm\u00e9 que les avantages en termes de maintenabilit\u00e9 compensent cet inconv\u00e9nient. <\/span><\/li>\n<li><strong>Sur-ing\u00e9nierie pour les projets simples<\/strong><br \/>\n<span style=\"color: #808080;\"><em>Inconv\u00e9nient<\/em>: L&rsquo;architecture propre peut \u00eatre excessive pour les projets simples ou de petite taille o\u00f9 les avantages de la s\u00e9paration des pr\u00e9occupations et de la modularit\u00e9 ne sont pas aussi \u00e9vidents. Dans de tels cas, une architecture plus simple est plus appropri\u00e9e. <\/span><\/li>\n<li><strong>Surcharge de performance<\/strong><br \/>\n<span style=\"color: #808080;\"><em>Inconv\u00e9nient:<\/em> Les couches et abstractions suppl\u00e9mentaires dans l&rsquo;architecture propre peuvent introduire une certaine surcharge de performance. Dans les applications o\u00f9 la performance est essentielle, des consid\u00e9rations et une optimisation attentives peuvent \u00eatre n\u00e9cessaires. <\/span><\/li>\n<\/ul>\n<p><strong><span style=\"color: #808080;\"><span style=\"color: #000000;\">Conclusion:<\/span><br \/>\n<\/span><\/strong><span style=\"color: #808080;\">Avantages en termes de maintenabilit\u00e9, de testabilit\u00e9 et de flexibilit\u00e9. Mais il est essentiel de peser ces avantages par rapport aux inconv\u00e9nients potentiels, en particulier dans le contexte de la port\u00e9e et de la complexit\u00e9 sp\u00e9cifiques du projet. Ce n&rsquo;est pas une solution universelle, et les d\u00e9veloppeurs doivent tenir compte des compromis en fonction des exigences et des contraintes du projet.  <\/span><\/p>\n<p><span style=\"color: #808080;\"><strong>L&rsquo;essentiel:<\/strong><\/span><br \/>\n<span style=\"color: #808080;\">L&rsquo;architecture propre n&rsquo;est pas simplement un autre style d&rsquo;architecture ; c&rsquo;est une philosophie, une approche approfondie de la conception de syst\u00e8mes en donnant la priorit\u00e9 \u00e0 la maintenabilit\u00e9 et \u00e0 l&rsquo;\u00e9volutivit\u00e9. Le c\u0153ur de l&rsquo;architecture propre est form\u00e9 par les r\u00e8gles m\u00e9tier &#8211; immacul\u00e9es et pures &#8211; avec des fonctionnalit\u00e9s externes, telles que les bases de donn\u00e9es et l&rsquo;UI \u00e0 la p\u00e9riph\u00e9rie, garantissant que les modifications apport\u00e9es \u00e0 un \u00e9l\u00e9ment n&rsquo;affectent pas n\u00e9gativement les autres. <\/span><\/p>\n<p><span style=\"color: #808080;\">L&rsquo;architecture propre plaide pour une approche guid\u00e9e par des principes plut\u00f4t qu&rsquo;autoritaire, encourageant les d\u00e9veloppeurs de logiciels \u00e0 internaliser son essence pour cr\u00e9er des syst\u00e8mes r\u00e9silients \u00e0 partir de celle-ci.<\/span><\/p>\n<p><span style=\"color: #000000;\"><strong>3. Erreurs courantes et pi\u00e8ges<\/strong><\/span><\/p>\n<p><span style=\"color: #ff9900;\"><strong>3.1 Entit\u00e9: Malentendus et clarifications<\/strong><\/span><br \/>\n<span style=\"color: #808080;\">Tant Clean Architecture que DDD utilisent le terme \u00ab\u00a0Entit\u00e9\u00a0\u00bb dans la conception logicielle. Pourtant, elles diff\u00e8rent l&rsquo;une de l&rsquo;autre.  <\/span><span style=\"color: #808080;\">Dans Clean Architecture, les entit\u00e9s encapsulent la logique m\u00e9tier cruciale et sont gard\u00e9es pures, c&rsquo;est-\u00e0-dire exemptes d&rsquo;influences externes telles que les bases de donn\u00e9es. <\/span><span style=\"color: #808080;\">Dans DDD, les entit\u00e9s soulignent l&rsquo;importance d&rsquo;une identit\u00e9 unique dans le contexte limit\u00e9 et sont capables d&rsquo;encapsuler un comportement plus riche et m\u00eame des relations complexes avec d&rsquo;autres entit\u00e9s.<\/span><\/p>\n<p><span style=\"color: #808080;\"><strong>Erreurs courantes et leurs cons\u00e9quences<\/strong><\/span><br \/>\n<span style=\"color: #808080;\">De nombreux d\u00e9veloppeurs, en particulier ceux qui connaissent les frameworks Object-Relation Mapping (ORM), consid\u00e8rent les entit\u00e9s comme de simples structures de donn\u00e9es qui refl\u00e8tent les enregistrements de la base de donn\u00e9es. Cette perception les am\u00e8ne \u00e0 cr\u00e9er des entit\u00e9s an\u00e9miques. Entit\u00e9 an\u00e9mique: objets qui ne contiennent aucun comportement et servent uniquement de collection de getters et de setters.  <\/span><\/p>\n<p><span style=\"color: #000000;\"><strong>Pourquoi est-ce faux?<\/strong><\/span><br \/>\n<span style=\"color: #808080;\">R\u00e9duit la coh\u00e9sion: Les entit\u00e9s an\u00e9miques sont d\u00e9coupl\u00e9es des op\u00e9rations qui sont effectu\u00e9es sur elles. En revanche, les entit\u00e9s riches dans l&rsquo;architecture propre s&rsquo;efforcent de regrouper les donn\u00e9es et les op\u00e9rations pertinentes, ce qui assure une plus grande coh\u00e9sion. <\/span><\/p>\n<p><span style=\"color: #808080;\">Ici, l&rsquo;op\u00e9ration applyDiscount est d\u00e9coupl\u00e9e de la classe OrderAnemic et plac\u00e9e dans un service. Cela r\u00e9duit la coh\u00e9sion car les donn\u00e9es (attributs de orderAnemic) et les op\u00e9rations sur les donn\u00e9es (applyDiscount) sont s\u00e9par\u00e9es. <\/span><\/p>\n<p><span style=\"color: #808080;\"><strong>Viole l&rsquo;agnosticisme de la persistance:<\/strong><\/span><br \/>\n<span style=\"color: #808080;\">Le c\u0153ur de la logique m\u00e9tier est implicitement li\u00e9 \u00e0 un m\u00e9canisme de persistance sp\u00e9cifique en cr\u00e9ant des entit\u00e9s qui refl\u00e8tent directement les structures de la base de donn\u00e9es. Cela contraste avec le principe de Clean Architecture qui consiste \u00e0 s\u00e9parer la logique de base des d\u00e9tails externes. <\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-18670\" src=\"https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/6-300x69.jpg\" alt=\"\" width=\"378\" height=\"87\" srcset=\"https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/6-300x69.jpg 300w, https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/6.jpg 677w\" sizes=\"(max-width: 378px) 100vw, 378px\" \/><\/p>\n<p><span style=\"color: #808080;\">L&rsquo;attribut databaseRowVersion est directement li\u00e9 \u00e0 une structure de base de donn\u00e9es couramment utilis\u00e9e pour la concurrence optimiste. En incluant ceci dans notre entit\u00e9, nous lions l&rsquo;entit\u00e9 \u00e0 un m\u00e9canisme de persistance sp\u00e9cifique. <\/span><\/p>\n<p><span style=\"color: #808080;\">Dilue la logique m\u00e9tier: au lieu de centraliser la logique m\u00e9tier au sein des entit\u00e9s elles-m\u00eames, les entit\u00e9s an\u00e9miques diffusent souvent la logique sur les services ou les contr\u00f4leurs, ce qui rend le syst\u00e8me plus difficile \u00e0 comprendre et \u00e0 maintenir.<\/span><\/p>\n<p><span style=\"color: #808080;\"><strong>Jugement de valeur de l&rsquo;entit\u00e9:<\/strong><\/span><br \/>\n<span style=\"color: #808080;\">Il est essentiel de pr\u00e9ciser que je ne condamne pas les entit\u00e9s an\u00e9miques. <\/span><span style=\"color: #808080;\">Elles trouvent leur place dans des sc\u00e9narios sp\u00e9cifiques, en particulier dans les applications simplifi\u00e9es avec une logique de domaine moins complexe ou lorsqu&rsquo;elles sont combin\u00e9es avec certains f  <\/span><span style=\"color: #808080;\">Si vous choisissez une entit\u00e9 an\u00e9mique, assurez-vous que c&rsquo;est parce qu&rsquo;elle ajoute une valeur tangible \u00e0 votre sc\u00e9nario, et pas seulement en tant que statue. <\/span><\/p>\n<p><span style=\"color: #ff9900;\"><strong>3.2 R\u00e8gles m\u00e9tier de l&rsquo;application vs R\u00e8gles m\u00e9tier de l&rsquo;entreprise<\/strong><\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-18682\" src=\"https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/Business-Rules-300x194.png\" alt=\"\" width=\"414\" height=\"268\" srcset=\"https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/Business-Rules-300x194.png 300w, https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/Business-Rules.png 727w\" sizes=\"(max-width: 414px) 100vw, 414px\" \/><br \/>\n<span style=\"color: #808080;\">La force fondamentale de l&rsquo;architecture propre r\u00e9side dans la d\u00e9limitation claire des responsabilit\u00e9s, en particulier lorsqu&rsquo;il s&rsquo;agit des r\u00e8gles m\u00e9tier de l&rsquo;application et des r\u00e8gles m\u00e9tier de l&rsquo;entreprise. Pourtant, les id\u00e9es fausses courantes brouillent souvent leurs fronti\u00e8res, conduisant \u00e0 des erreurs de conception.  <\/span><span style=\"color: #808080;\">L&rsquo;architecture propre fait la distinction entre la logique de l&rsquo;application et la logique m\u00e9tier. La premi\u00e8re se concentre sur les conditions sp\u00e9cifiques de l&rsquo;application, impliquant souvent plusieurs entit\u00e9s ou facteurs externes. La seconde concerne les v\u00e9rit\u00e9s universelles sur les entit\u00e9s, qui ne sont pas influenc\u00e9es par des circonstances ext\u00e9rieures. Reconna\u00eetre ces diff\u00e9rences est essentiel pour un syst\u00e8me r\u00e9silient et adaptable.   <\/span><\/p>\n<p><span style=\"color: #808080;\"><strong>3.2.1R\u00e8gles m\u00e9tier de l&rsquo;entreprise: C\u0153ur de l&rsquo;entit\u00e9<\/strong><\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-18676\" src=\"https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/8-300x293.jpg\" alt=\"\" width=\"371\" height=\"362\" srcset=\"https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/8-300x293.jpg 300w, https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/8.jpg 684w\" sizes=\"(max-width: 371px) 100vw, 371px\" \/><br \/>\n<span style=\"color: #808080;\">Prenons l&rsquo;entit\u00e9 \u00ab\u00a0Carte de cr\u00e9dit\u00a0\u00bb en consid\u00e9ration. \u00c0 ce niveau, nous sommes int\u00e9ress\u00e9s par les propri\u00e9t\u00e9s et les comportements inh\u00e9rents de la carte de cr\u00e9dit elle-m\u00eame, quels que soient les facteurs externes ou les conditions sp\u00e9cifiques de l&rsquo;application. Ici, nous pourrions:  <\/span><br \/>\n<span style=\"color: #808080;\"><span style=\"color: #ff9900;\">\u2022<\/span> Valider le format du num\u00e9ro de carte;<\/span><br \/>\n<span style=\"color: #808080;\"><span style=\"color: #ff9900;\">\u2022<\/span> V\u00e9rifier la date d&rsquo;expiration;<\/span><br \/>\n<span style=\"color: #808080;\"><span style=\"color: #ff9900;\">\u2022<\/span> V\u00e9rifier le format du code de s\u00e9curit\u00e9;<\/span><\/p>\n<p><span style=\"color: #808080;\">Toutes les op\u00e9rations tournent exclusivement autour de l&rsquo;entit\u00e9 carte de cr\u00e9dit, l&rsquo;accent \u00e9tant mis sur ses propri\u00e9t\u00e9s ou comportements intrins\u00e8ques. Nous traitons des v\u00e9rit\u00e9s universelles sur ce qui constitue une carte de cr\u00e9dit valide, sans influence de circonstances ext\u00e9rieures ou de sc\u00e9narios d&rsquo;application sp\u00e9cifiques. <\/span><\/p>\n<p><span style=\"color: #808080;\"><strong>3.2.2 R\u00e8gles m\u00e9tier de l&rsquo;application (Cas d&rsquo;utilisation)<\/strong><\/span><br \/>\n<span style=\"color: #808080;\">Un niveau plus haut, nous trouvons les cas d&rsquo;utilisation que nos R\u00e8gles m\u00e9tier de l&rsquo;application orchestrent. Ici, la logique est guid\u00e9e par des conditions et des sc\u00e9narios d&rsquo;application sp\u00e9cifiques, impliquant souvent plusieurs entit\u00e9s ou facteurs externes. <\/span><\/p>\n<p><span style=\"color: #808080;\">Avec le m\u00eame exemple de Carte de cr\u00e9dit, nous pourrions ici:<\/span><br \/>\n<span style=\"color: #808080;\"><span style=\"color: #ff9900;\">\u2022<\/span> V\u00e9rifier si l&rsquo;utilisateur qui demande la carte a au moins 18 ans;<\/span><br \/>\n<span style=\"color: #808080;\"><span style=\"color: #ff9900;\">\u2022<\/span> D\u00e9terminer le pays du demandeur et appliquer des r\u00e8gles ou des offres sp\u00e9cifiques \u00e0 la r\u00e9gion;<\/span><br \/>\n<span style=\"color: #808080;\"><span style=\"color: #ff9900;\">\u2022<\/span> Envisager de s&rsquo;int\u00e9grer \u00e0 des services externes pour effectuer des contr\u00f4les de cr\u00e9dit, par exemple.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-18679\" src=\"https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/9-300x242.jpg\" alt=\"\" width=\"384\" height=\"310\" srcset=\"https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/9-300x242.jpg 300w, https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/9.jpg 677w\" sizes=\"(max-width: 384px) 100vw, 384px\" \/><br \/>\n<span style=\"color: #808080;\">Ici, le service est appel\u00e9 mais dans une architecture propre, ils parlent g\u00e9n\u00e9ralement (et nomment) des cas d&rsquo;utilisation.<\/span><br \/>\n<span style=\"color: #808080;\">Cette couche va au-del\u00e0 des limites d&rsquo;une seule entit\u00e9. Elle orchestre les interactions, suit les processus et applique une logique m\u00e9tier contextuelle qui peut \u00eatre propre \u00e0 une application ou \u00e0 un sc\u00e9nario particulier. C&rsquo;est l\u00e0 que prend vie la logique m\u00e9tier plus large qui est pertinente pour l&rsquo;application sp\u00e9cifique.  <\/span><\/p>\n<p><span style=\"color: #ff9900;\"><strong>3.3 Erreurs courantes<\/strong><\/span><\/p>\n<ul>\n<li><strong>Brouiller les fronti\u00e8res: <\/strong><span style=\"color: #808080;\">Les d\u00e9veloppeurs confondent souvent les R\u00e8gles m\u00e9tier de l&rsquo;application avec des v\u00e9rit\u00e9s g\u00e9n\u00e9rales, ce qui \u00e9clipse les R\u00e8gles m\u00e9tier de l&rsquo;entreprise. Cette id\u00e9e fausse est aggrav\u00e9e par une fausse id\u00e9e des entit\u00e9s, qui devraient id\u00e9alement \u00eatre plus en phase avec les faits immuables des R\u00e8gles m\u00e9tier de l&rsquo;entreprise. <\/span>\n<ul>\n<li><span style=\"color: #808080;\">Pourquoi est-ce faux:<\/span><br \/>\n<strong>Ontbreekt aan flexibiliteit: <\/strong><span style=\"color: #808080;\">Le fait de traiter les r\u00e8gles m\u00e9tier de l&rsquo;application comme des v\u00e9rit\u00e9s constantes entrave la capacit\u00e9 d&rsquo;adaptation du syst\u00e8me aux changements futurs.<\/span><br \/>\n<strong>Risques pour l&rsquo;int\u00e9grit\u00e9: <\/strong><span style=\"color: #808080;\">Le fait de ne pas distinguer la diff\u00e9rence peut entra\u00eener des violations involontaires de la logique m\u00e9tier de base lors de modifications de l&rsquo;application.<\/span><\/li>\n<li><span style=\"color: #808080;\">Tout comme notre exemple de code ci-dessus, l&rsquo;ajout direct du contr\u00f4le d&rsquo;\u00e2ge de l&rsquo;utilisateur \u00e0 la classe carte de cr\u00e9dit serait une erreur. Il s&rsquo;agirait d&rsquo;un m\u00e9lange inappropri\u00e9 des r\u00e8gles m\u00e9tier de l&rsquo;application (contr\u00f4le d&rsquo;\u00e2ge pour la demande d&rsquo;une carte de cr\u00e9dit) avec les r\u00e8gles de l&rsquo;entreprise (ce qui rend une carte de cr\u00e9dit valide). Et dans un contexte simple : le mod\u00e8le CreditCard ne se soucie pas de l&rsquo;\u00e2ge de l&rsquo;utilisateur.  <\/span><\/li>\n<\/ul>\n<\/li>\n<li><strong>Entit\u00e9s franchissant les fronti\u00e8res:<\/strong> <span style=\"color: #808080;\">En raison de la conviction erron\u00e9e que les entit\u00e9s englobent toutes les r\u00e8gles de l&rsquo;entreprise, les d\u00e9veloppeurs peuvent les ex\u00e9cuter directement \u00e0 partir des contr\u00f4leurs, ce qui am\u00e8ne les entit\u00e9s \u00e0 franchir les fronti\u00e8res qu&rsquo;elles ne devraient pas.<\/span>\n<ul>\n<li><span style=\"color: #808080;\">Pourquoi est-ce faux:<\/span><br \/>\n<strong>Violation de la s\u00e9paration:<\/strong> <span style=\"color: #808080;\">Le fait d&rsquo;appeler directement des entit\u00e9s \u00e0 partir des contr\u00f4leurs mine le principe de la s\u00e9paration des pr\u00e9occupations.<\/span><br \/>\n<strong>Violation de la r\u00e8gle de d\u00e9pendance:<\/strong> <span style=\"color: #808080;\">Cette approche viole la r\u00e8gle selon laquelle les couches ext\u00e9rieures doivent d\u00e9pendre des couches int\u00e9rieures et non l&rsquo;inverse.<\/span><\/li>\n<\/ul>\n<\/li>\n<li><strong>Mauvaise interpr\u00e9tation du flux de contr\u00f4le:<\/strong> <span style=\"color: #808080;\">Un autre pi\u00e8ge consiste \u00e0 lire les fl\u00e8ches du diagramme d&rsquo;architecture propre comme des indicateurs de flux de contr\u00f4le au lieu de d\u00e9pendances.<\/span>\n<ul>\n<li><span style=\"color: #808080;\">Pourquoi est-ce faux:<\/span><br \/>\n<strong>Inversion du flux de contr\u00f4le:<\/strong> <span style=\"color: #808080;\">Bien que les d\u00e9pendances pointent vers l&rsquo;int\u00e9rieur, le flux de contr\u00f4le r\u00e9el va des couches ext\u00e9rieures (comme les contr\u00f4leurs) vers l&rsquo;int\u00e9rieur et vice versa.<br \/>\n<\/span><strong>D\u00e9fauts de conception:<\/strong> <span style=\"color: #808080;\">Une mauvaise interpr\u00e9tation du flux de contr\u00f4le peut conduire \u00e0 des choix de conception qui compromettent l&rsquo;adaptabilit\u00e9 et l&rsquo;\u00e9volutivit\u00e9.<\/span><\/li>\n<li><span style=\"color: #808080;\">Dans l&rsquo;approche incorrecte, l&rsquo;entit\u00e9 est li\u00e9e \u00e0 des services externes, ce qui rend le syst\u00e8me plus difficile \u00e0 tester, \u00e0 comprendre et \u00e0 maintenir. Elle viole \u00e9galement le principe d&rsquo;inversion des d\u00e9pendances, car l&rsquo;entit\u00e9 de base d\u00e9pend d\u00e9sormais de d\u00e9tails externes. C&rsquo;est pr\u00e9cis\u00e9ment le type d&rsquo;erreur de conception que Clean Architecture cherche \u00e0 \u00e9viter.  <\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><span style=\"color: #808080;\">Vous \u00eates-vous d\u00e9j\u00e0 senti pris au pi\u00e8ge dans un r\u00e9seau de code, ne sachant pas quel fil suivre? Clean Architecture est la boussole qui vous guide hors du labyrinthe. Il ne s&rsquo;agit pas de la plateforme&#8230; il s&rsquo;agit de la puret\u00e9 de la conception.  <\/span> <span style=\"color: #ff9900;\"><strong> Clean architecture n&rsquo;est pas qu&rsquo;une m\u00e9thode, c&rsquo;est un mouvement. <\/strong><\/span><span style=\"color: #808080;\">(et il fait appel aux d\u00e9veloppeurs comme vous qui ont soif de clart\u00e9 et d&rsquo;excellence).<\/span><\/p>\n<p><span style=\"color: #808080;\">\u00c9crit par: Ides VH.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. Qu&rsquo;est-ce que l&rsquo;architecture? Couches et acc\u00e8s: Dans le d\u00e9veloppement logiciel, l&rsquo;architecture fait r\u00e9f\u00e9rence \u00e0 plus que la simple structure ou organisation du code. Elle d\u00e9crit la chor\u00e9graphie de la fa\u00e7on dont diff\u00e9rentes couches au sein d&rsquo;un syst\u00e8me interagissent les unes avec les autres et comment l&rsquo;information circule \u00e0 travers<span class=\"more-dots\">&#8230;<\/span><\/p>\n","protected":false},"author":2,"featured_media":18720,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[251,254],"tags":[301,255,300],"class_list":["post-21323","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog-fr","category-ict-fr","tag-clean-architecture-fr","tag-connect-consulting-fr","tag-ict-fr"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Clean Architecture - Connect Consulting - ICT Careers | Infrastructure\/Application<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/connectconsulting.be\/fr\/clean-architecture\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Clean Architecture - Connect Consulting - ICT Careers | Infrastructure\/Application\" \/>\n<meta property=\"og:description\" content=\"1. Qu&rsquo;est-ce que l&rsquo;architecture? Couches et acc\u00e8s: Dans le d\u00e9veloppement logiciel, l&rsquo;architecture fait r\u00e9f\u00e9rence \u00e0 plus que la simple structure ou organisation du code. Elle d\u00e9crit la chor\u00e9graphie de la fa\u00e7on dont diff\u00e9rentes couches au sein d&rsquo;un syst\u00e8me interagissent les unes avec les autres et comment l&rsquo;information circule \u00e0 travers...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/connectconsulting.be\/fr\/clean-architecture\/\" \/>\n<meta property=\"og:site_name\" content=\"Connect Consulting - ICT Careers | Infrastructure\/Application\" \/>\n<meta property=\"article:published_time\" content=\"2024-06-24T13:38:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/Blue-and-Grey-Tech-Professionals-IT-Consultancy-Twitter-Ad.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t<meta property=\"og:image:height\" content=\"900\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Emilie Cambier\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Emilie Cambier\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/clean-architecture\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/clean-architecture\\\/\"},\"author\":{\"name\":\"Emilie Cambier\",\"@id\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/#\\\/schema\\\/person\\\/cc2cfe78fceb5d13383b490ab73ad225\"},\"headline\":\"Clean Architecture\",\"datePublished\":\"2024-06-24T13:38:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/clean-architecture\\\/\"},\"wordCount\":3968,\"publisher\":{\"@id\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/clean-architecture\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/connectconsulting.be\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/Blue-and-Grey-Tech-Professionals-IT-Consultancy-Twitter-Ad.png\",\"keywords\":[\"Clean Architecture\",\"Connect Consulting\",\"ICT\"],\"articleSection\":[\"Blog\",\"ICT\"],\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/clean-architecture\\\/\",\"url\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/clean-architecture\\\/\",\"name\":\"Clean Architecture - Connect Consulting - ICT Careers | Infrastructure\\\/Application\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/clean-architecture\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/clean-architecture\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/connectconsulting.be\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/Blue-and-Grey-Tech-Professionals-IT-Consultancy-Twitter-Ad.png\",\"datePublished\":\"2024-06-24T13:38:44+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/clean-architecture\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/clean-architecture\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/clean-architecture\\\/#primaryimage\",\"url\":\"https:\\\/\\\/connectconsulting.be\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/Blue-and-Grey-Tech-Professionals-IT-Consultancy-Twitter-Ad.png\",\"contentUrl\":\"https:\\\/\\\/connectconsulting.be\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/Blue-and-Grey-Tech-Professionals-IT-Consultancy-Twitter-Ad.png\",\"width\":1600,\"height\":900},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/clean-architecture\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Clean Architecture\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/\",\"name\":\"Connect Consulting - ICT Careers | Infrastructure\\\/Application\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/#organization\",\"name\":\"Connect Consulting - ICT Careers | Infrastructure\\\/Application\",\"url\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/connectconsulting.be\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/logo-black.png\",\"contentUrl\":\"https:\\\/\\\/connectconsulting.be\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/logo-black.png\",\"width\":268,\"height\":118,\"caption\":\"Connect Consulting - ICT Careers | Infrastructure\\\/Application\"},\"image\":{\"@id\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/connectconsulting.be\\\/fr\\\/#\\\/schema\\\/person\\\/cc2cfe78fceb5d13383b490ab73ad225\",\"name\":\"Emilie Cambier\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Clean Architecture - Connect Consulting - ICT Careers | Infrastructure\/Application","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/connectconsulting.be\/fr\/clean-architecture\/","og_locale":"fr_FR","og_type":"article","og_title":"Clean Architecture - Connect Consulting - ICT Careers | Infrastructure\/Application","og_description":"1. Qu&rsquo;est-ce que l&rsquo;architecture? Couches et acc\u00e8s: Dans le d\u00e9veloppement logiciel, l&rsquo;architecture fait r\u00e9f\u00e9rence \u00e0 plus que la simple structure ou organisation du code. Elle d\u00e9crit la chor\u00e9graphie de la fa\u00e7on dont diff\u00e9rentes couches au sein d&rsquo;un syst\u00e8me interagissent les unes avec les autres et comment l&rsquo;information circule \u00e0 travers...","og_url":"https:\/\/connectconsulting.be\/fr\/clean-architecture\/","og_site_name":"Connect Consulting - ICT Careers | Infrastructure\/Application","article_published_time":"2024-06-24T13:38:44+00:00","og_image":[{"width":1600,"height":900,"url":"https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/Blue-and-Grey-Tech-Professionals-IT-Consultancy-Twitter-Ad.png","type":"image\/png"}],"author":"Emilie Cambier","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Emilie Cambier","Dur\u00e9e de lecture estim\u00e9e":"19 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/connectconsulting.be\/fr\/clean-architecture\/#article","isPartOf":{"@id":"https:\/\/connectconsulting.be\/fr\/clean-architecture\/"},"author":{"name":"Emilie Cambier","@id":"https:\/\/connectconsulting.be\/fr\/#\/schema\/person\/cc2cfe78fceb5d13383b490ab73ad225"},"headline":"Clean Architecture","datePublished":"2024-06-24T13:38:44+00:00","mainEntityOfPage":{"@id":"https:\/\/connectconsulting.be\/fr\/clean-architecture\/"},"wordCount":3968,"publisher":{"@id":"https:\/\/connectconsulting.be\/fr\/#organization"},"image":{"@id":"https:\/\/connectconsulting.be\/fr\/clean-architecture\/#primaryimage"},"thumbnailUrl":"https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/Blue-and-Grey-Tech-Professionals-IT-Consultancy-Twitter-Ad.png","keywords":["Clean Architecture","Connect Consulting","ICT"],"articleSection":["Blog","ICT"],"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/connectconsulting.be\/fr\/clean-architecture\/","url":"https:\/\/connectconsulting.be\/fr\/clean-architecture\/","name":"Clean Architecture - Connect Consulting - ICT Careers | Infrastructure\/Application","isPartOf":{"@id":"https:\/\/connectconsulting.be\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/connectconsulting.be\/fr\/clean-architecture\/#primaryimage"},"image":{"@id":"https:\/\/connectconsulting.be\/fr\/clean-architecture\/#primaryimage"},"thumbnailUrl":"https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/Blue-and-Grey-Tech-Professionals-IT-Consultancy-Twitter-Ad.png","datePublished":"2024-06-24T13:38:44+00:00","breadcrumb":{"@id":"https:\/\/connectconsulting.be\/fr\/clean-architecture\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/connectconsulting.be\/fr\/clean-architecture\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/connectconsulting.be\/fr\/clean-architecture\/#primaryimage","url":"https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/Blue-and-Grey-Tech-Professionals-IT-Consultancy-Twitter-Ad.png","contentUrl":"https:\/\/connectconsulting.be\/wp-content\/uploads\/2024\/06\/Blue-and-Grey-Tech-Professionals-IT-Consultancy-Twitter-Ad.png","width":1600,"height":900},{"@type":"BreadcrumbList","@id":"https:\/\/connectconsulting.be\/fr\/clean-architecture\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/connectconsulting.be\/fr\/"},{"@type":"ListItem","position":2,"name":"Clean Architecture"}]},{"@type":"WebSite","@id":"https:\/\/connectconsulting.be\/fr\/#website","url":"https:\/\/connectconsulting.be\/fr\/","name":"Connect Consulting - ICT Careers | Infrastructure\/Application","description":"","publisher":{"@id":"https:\/\/connectconsulting.be\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/connectconsulting.be\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/connectconsulting.be\/fr\/#organization","name":"Connect Consulting - ICT Careers | Infrastructure\/Application","url":"https:\/\/connectconsulting.be\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/connectconsulting.be\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/connectconsulting.be\/wp-content\/uploads\/2023\/03\/logo-black.png","contentUrl":"https:\/\/connectconsulting.be\/wp-content\/uploads\/2023\/03\/logo-black.png","width":268,"height":118,"caption":"Connect Consulting - ICT Careers | Infrastructure\/Application"},"image":{"@id":"https:\/\/connectconsulting.be\/fr\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/connectconsulting.be\/fr\/#\/schema\/person\/cc2cfe78fceb5d13383b490ab73ad225","name":"Emilie Cambier"}]}},"_links":{"self":[{"href":"https:\/\/connectconsulting.be\/fr\/wp-json\/wp\/v2\/posts\/21323","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/connectconsulting.be\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/connectconsulting.be\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/connectconsulting.be\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/connectconsulting.be\/fr\/wp-json\/wp\/v2\/comments?post=21323"}],"version-history":[{"count":0,"href":"https:\/\/connectconsulting.be\/fr\/wp-json\/wp\/v2\/posts\/21323\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/connectconsulting.be\/fr\/wp-json\/wp\/v2\/media\/18720"}],"wp:attachment":[{"href":"https:\/\/connectconsulting.be\/fr\/wp-json\/wp\/v2\/media?parent=21323"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/connectconsulting.be\/fr\/wp-json\/wp\/v2\/categories?post=21323"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/connectconsulting.be\/fr\/wp-json\/wp\/v2\/tags?post=21323"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}