HEXAGONAL ARCHITECTURE

در سال 2005، Hexagonal Architecture یا همان معماری شش ضلعی توسط Alistair Cockburn پیشنهاد شد. پیش از آن معماری های لایه ای وجود داشتند. معماری سه لایه یکی از رایج ترین معماری های لایه ای بود که شامل سه لایه ارائه، منطق و داده بود. پس از آن Eric Evans در کتاب ... معماری 4 لایه را پیشنهاد داد و یک لایه تحت عنوان دامنه اضافه کرد که منطق تجاری را شامل می شود و از سه لایه دیگر رابط کاربری، Application و زیرساخت جدا شده است. معماری لایه ای دارای مزایایی است که مهم ترین آن جداسازی دغدغه ها است ولی ریسک هایی نیز دارد. از جمله این ریسک ها احتمال نشت منطق تجاری در لایه های دیگر است. اما Cockburn با تغییر دید خود به این نتیجه رسید که رابط کاربری و پایگاه داده هر دو عامل خارجی هستند از نظر تعامل با بخش اصلی برنامه که همان منطق تجاری است، مشابه یکدیگرند. به این ترتیب معماری شش ضلعی را ارائه کرد که طبق این معماری پورت ها و آداپتورهایی وجود دارند که از طریق آن ها ارتباط با بازیگران خارجی برقرار می گردد. به این ترتیب از ریسکی که در معماری های لایه ای وجود داشت جلوگیری می شود.مفهوم اصلی پشت معماری شش ضلعی که به عنوان الگوی پورت ها و آداپتورها نیز شناخته می شود، این است که برنامه در مرکز سیستم است. یک پورت ورودی ها و خروجی هایی را که به برنامه می رسند یا از آن خارج می شوند از فناوری های خارجی، مکانیک های تحویل و ابزار جدا می کند.پورت هاپورت همان نقطه ورودی است که با رابطی که تعیین می کند (صرف نظر از پیاده سازی آن ها) به عوامل خارجی اجازه ارتباط با برنامه را می دهد. پورت ها همچنین به برنامه اجازه می دهند با سیستم ها یا خدمات خارجی مانند پایگاه های داده، کارگزاران پیام، سایر برنامه ها و غیره ارتباط برقرار کند.آداپتورهایک آداپتور از طریق یک پورت با استفاده از یک فناوری خاص با برنامه تعامل می کند، برای مثال، یک کنترلر REST آداپتوری را نشان می دهد که به مشتری اجازه می دهد با برنامه ارتباط برقرار کند. برای هر پورت به تعداد موردنیاز می تواند آداپتور وجود داشته باشد بدون اینکه خطری برای پورت ها یا خود برنامه ایجاد کند.اصطلاح Hexagonal به منظور نمایش گرافیکی به کار برده شده است که کامپوننت برنامه را به صورت یک سلول شش ضلعی نشان داده است. در این نمایش بصری منظور وجود شش مرز یا پورت نبوده است بلکه به این دلیل است که فضای کافی برای نمایش رابط¬های مختلف مورد نیاز بین کامپوننت و دنیای بیرونی وجود داشته باشد. برای درک بهتر به تصویر زیر توجه کنید.در ادامه مزایا و معایب این نوع معماری را بررسی می کنیم.مزایای معماری شش ضلعی• با توجه به اینکه منطق برنامه از آداپتورها کاملا جدا هستند بنابراین در طول توسعه، بدون هیچ گونه تغییر در منطق برنامه می توانیم آداپتورها را اضافه یا حذف کنیم.• تست ساده یکی دیگر از مزایای این معماری است چرا که لایه ها از یکدیگر جدا هستند بنابراین به سادگی می توانیم برای هرکدام تست بنویسیم.• با توجه به اینکه به راحتی می توانیم آداپتورهای جدید اضافه کنیم و یا آداپتورهای قبلی را تغییر دهیم بنابراین برنامه سازگارتری داریم.• می توان تمام کتابخانه های شخص ثالث را در لایه زیرساخت نگهداری کرد بنابراین تعمیر و نگهداری آسان تر شده و در نتیجه برنامه پایدارتر است.• برنامه مستقل از پایگاه داده است و می توان به راحتی ارائه دهندگان پایگاه داده را تغییر داد، زیرا پایگاه داده از دسترسی به داده جدا شده است.• کد تمیز از مزایای دیگر است چرا که UI را می توان به راحتی پیاده سازی کرد زیرا منطق تجاری از لایه ارائه مانند React، Angular یا Blazor دور نگه داشته شده است.• از نظر سازماندهی وضعیت مطلوبی دارد و توسعه¬دهندگان جدید به راحتی وارد پروژه می شوند و درک بهتری از پروژه خواهند داشت.معایب معماری شش ضلعی• با توجه به اینکه کل منطق برنامه در لایه دامنه قرار دارد بنابراین این لایه سنگین می شود.• افزایش تعداد لایه های انتزاعی در این معماری موجب افزایش بسیار زیاد پیچیدگی می شود.• هزینه های ساخت و نگهداری به دلیل داشتن لایه های غیرمستقیم و ایزوله افزایش می یابد به طوری که این افزایش هزینه از مزایای انتزاع بیشتر می شود.• • می توان گفت اکثر برنامه¬های کاربردی وب هرگز نیاز به تغییر پایگاه داده ها و چارچوب ها پیدا نمی کنند و فقط از طریق مرورگر استفاده خواهند شد. به این ترتیب می توان گفت اگرچه داشتن همچین برنامه هایی با چنین سطح سازگاری بالایی اگرچه بسیار مطلوب هستند ولی ضروری و مورد نیاز اکثریت نیست بنابراین اتلاف تلاش و وقت است. https://medium.com/ssense-tech/hexagonal-architecture-there-are-always-two-sides-to-every-story-bc0780ed7d9c https://www.partech.nl/nl/publicaties/2021/06/what-is-hexagonal-architecture#