hexagonal

یکی از معماری هایی که آنکل باب با استفاده از این ، معماری کلین رو پیشنهاد می کنه

در این معماری ، تمرکز بیشتر روی جداسازی ( Dependency injection ) منطق برنامه از ابزار و فریم ورک است .

در این معماری یک هسته ی مرکزی داریم که بخش اصلی این معماری است و در صورتی که بخواهیم ابزار ها را تغییر دهیم ، این رویکرد به ما این امکان را می دهد که هسته را به صورت مجزا آزمایش کنیم و به ما این امکان را می دهد که به راحتی اجزای زیرساخت را تغییر دهیم

این بخش به نام core که در آن ۳ زیر بخش داریم :

دامین domain ( entity ) که همان موجودیت های ماست ، مانند معماری کلین

پورت ports، در حقیقت وظیفه ی جدا سازی را دارد و اینترفیس ها را تعریف می کنیم که ارتباط بازیگران ( actors ) را مشخص می کند

سرویس ها services - نقاط ورود ما به هسته هستند و هر یک از آنها با استفاده از پورت ها ( اینترفیس ها) منطق برنامه را پیاده سازی می کنند ( بیزینس لاجیک ) - به عبارت دیگر متد های اینترفیس را با استفاده از تایپ امبدینگ ، استفاده می کنیم -

حال که موجودیت ( دامین ) و پورت ها ( اینترفیس ها ) و منطق بیزینسمان ( سرویس ها ) را مشخص کردیم ، هسته ی برنامه را کامل کردیم ، حال باید آداپتور های برنامه را پیاده سازی کنیم - به عبارت دیگر اینترفیس ها را امپلمنت کنیم

آداپتور ها

آداپتور ها در حقیقت استراکت های کانکریت شده با توجه به پورت ها هستند

آداپتور ها دو دسته اند

درایور ها یا آداپتور اصلی ( پرایمری ) - این کلاس ها در خواست های بیرونی را هندل کرده و در حقیقت باعث شروع عملیات می شوند مانند درخواست های شبکه یا http - cli
( بهتر است در آداپتور و پوشه ای به نام هندل باشد )

  • دریون ها یا آداپتور ثانویه ( سکندری ) - این کلاس ها نیاز های بیزینس به ابزار های بک اندی را پیاده سازی می کند مانند متد هایی که برای ارتباط با دیتا بیس نیاز است ( بهتر است در آداپتور و پوشه ای به نام ریپازیتوری باشد )

https://medium.com/@matiasvarela/hexagonal-architecture-in-go-cfd4e436faa3

onion arch

این معماری تمرکزش بیشتر روی لایه لایه بندی برنامست و این که هر لایه به لایه درونی وابسته باشد و لایه درونی بی نیاز و ومستقل از لایه بیرونی باشه

clean arch

و اما این معماری ترکیبی از 2 معماری بالاست