الگوهای ساختاری در گولنگ


معماری گولنگ: قسمت اول - معماری لایه ای ساده

معماری گولنگ یک چارچوب است که به شما کمک می کند تا برنامه های خود را به صورت سازماندهی شده و قابل نگهداری طراحی کنید. یکی از رایج ترین الگوهای معماری گولنگ، الگوی معماری لایه ای ساده است.

در معماری لایه ای ساده، برنامه به چندین لایه تقسیم می شود. هر لایه مسئولیت خاص خود را دارد و به لایه های دیگر وابسته نیست. این باعث می شود که برنامه انعطاف پذیرتر و نگهداری آن آسان تر شود.

به عنوان مثال، یک برنامه وبلاگ ممکن است به چهار لایه تقسیم شود:

  • لایه ارائه (Presentation Layer): این لایه مسئول نمایش برنامه به کاربر است. این لایه شامل اجزایی مانند قالب های HTML، فایل های CSS و فایل های جاوا اسکریپت است.
  • لایه کنترلر (Controller Layer): این لایه مسئول دریافت درخواست های کاربر و ارسال پاسخ ها است. این لایه همچنین مسئول انجام عملیات مختلف در برنامه است، مانند ایجاد پست های جدید، آپلود تصاویر و حذف پست ها.
  • لایه سرویس (Service Layer): این لایه مسئول منطق اصلی برنامه است. این لایه شامل کلاس هایی است که عملیات مختلفی را در برنامه پیاده سازی می کنند، مانند ایجاد پست های جدید، آپلود تصاویر و حذف پست ها.
  • لایه داده (Data Layer): این لایه مسئول ذخیره و بازیابی داده ها است. این لایه شامل کلاس هایی است که با پایگاه داده ارتباط برقرار می کنند و داده ها را ذخیره و بازیابی می کنند.

هر لایه مستقل از لایه های دیگر است. این بدان معنی است که لایه ارائه نیازی به دانستن در مورد لایه کنترلر، لایه سرویس یا لایه داده ندارد و لایه کنترلر نیازی به دانستن در مورد لایه سرویس یا لایه داده ندارد و غیره.

این استقلال لایه ها، برنامه را انعطاف پذیرتر می کند. برای مثال، اگر می خواهید رابط کاربری برنامه را تغییر دهید، تنها کاری که باید انجام دهید این است که لایه ارائه را تغییر دهید. نیازی به تغییر لایه کنترلر، لایه سرویس یا لایه داده ندارید.

همچنین، استقلال لایه ها باعث می شود که برنامه نگهداری آسان تر شود. برای مثال، اگر مشکلی در پایگاه داده وجود دارد، تنها کاری که باید انجام دهید این است که لایه داده را رفع کنید. نیازی به رفع اشکال در لایه کنترلر، لایه سرویس یا لایه ارائه ندارید.

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

معماری لایه ای ساده یک الگوی معماری قدرتمند است که می تواند برای طراحی انواع برنامه های گولنگ استفاده شود. اگر تازه کار با گولنگ هستید، توصیه می کنم از این الگوی معماری برای برنامه های خود استفاده کنید.

مثالی هم از این نوع معماری در قالب پروژه در GitHub براتون گذاشتم به آدرس:
https://github.com/alireza-frj4/GoWebLogBackEnde


معماری گولنگ: قسمت دوم - پیاز لایه در گولنگ

معماری پیاز یکی از مهمترین الگوی معماری نرم‌افزاری است که اجزای نرم‌افزاری را در لایه‌های متحدالمركز سازماندهی می‌کند، جایی که هر لایه به لایه داخلی خود بستگی دارد اما به لایه‌های خارجی خود وابسته نیست. این الگو معماری پیاز نامیده می‌شود زیرا لایه‌ها مانند حلقه‌های یک پیاز در اطراف هسته مرکزی نرم‌افزار هستند.

در Golang، معماری پیاز معمولاً به سه لایه اصلی تقسیم می‌شود:

  1. لایه دامنه: لایه دامنه، همچنین به عنوان هسته یا لایه منطق تجاری شناخته می‌شود، شامل منطق تجاری و مدل‌های داده نرم‌افزار است. این لایه به هیچ لایه خارجی دیگری وابسته نیست و فقط برای ذخیره یا بازیابی داده‌ها به پایگاه داده‌ها یا سایر منابع خارجی دسترسی دارد.
  2. لایه سرویس: لایه سرویس، همچنین به عنوان لایه برنامه یا کنترلر شناخته می‌شود، مسئول اجرای API‌های نرم‌افزار است. این لایه درخواست‌ها را از رابط‌های کاربری (UI)، API‌های خارجی یا سایر منابع خارجی دریافت می‌کند و با لایه دامنه همکاری می‌کند تا درخواست را پردازش کند و پاسخی آماده کند.
  3. لایه ارائه: لایه ارائه، همچنین به عنوان UI یا لایه نمایشی شناخته می‌شود، مسئول نمایش اطلاعات به کاربر و جمع‌آوری داده‌های ورودی از کاربر است. این لایه می‌تواند شامل چارچوب‌های UI مانند Echo یا Gin باشد.

مزایای استفاده از معماری پیاز

استفاده از الگوی معماری پیاز در Golang دارای چندین مزیت است:

  • آزمون‌پذیری: لایه‌ها را می‌توان به طور مستقل از یکدیگر آزمایش کرد، که آزمایش نرم‌افزار را آسان‌تر و دقیق‌تر می‌کند.
  • قابلیت نگهداری: کد نرم‌افزار سازماندهی شده و واضح است، که نگهداری و توسعه نرم‌افزار را آسان‌تر می‌کند.
  • قابلیت استفاده مجدد: اجزای نرم‌افزاری به خوبی تعریف شده و قابل استفاده مجدد هستند، به این معنی که می‌توان از آنها در پروژه‌های دیگر نیز استفاده کرد.

پیاده سازی معماری پیاز در Golang

برای پیاده‌سازی معماری پیاز در Golang، می‌توانید مراحل کلی زیر را دنبال کنید:

  1. تعریف لایه دامنه: یک بسته جداگانه برای لایه دامنه ایجاد کنید و مدل‌های داده و منطق تجاری خود را در این بسته تعریف کنید.
  2. تعریف لایه سرویس: یک بسته جداگانه برای لایه سرویس ایجاد کنید و رابط‌ها و پیاده‌سازی‌های سرویس خود را در این بسته تعریف کنید.
  3. تعریف لایه ارائه: یک بسته جداگانه برای لایه ارائه ایجاد کنید و منطق UI خود را در این بسته پیاده کنید.
  4. از تزریق وابستگی استفاده کنید: از تزریق وابستگی برای تزریق وابستگی‌ها بین لایه‌ها استفاده کنید. این به شما کمک می‌کند تا لایه‌ها را جدا کرده و آزمایش آنها را آسان‌تر

و یک مثال خوب برای بیشتر متوجه شدن هم براتون در لینک زیر گذاشتم و پیشنهاد میکنم حتما یک سربهش بزنید

https://github.com/JY8752/go-onion-architecture-sample

معماری گولنگ: قسمت سوم - معماری هگزاگونی Hexagonal architecture

معماری هگزاگونی، همچنین به عنوان “Ports and Adapters” یا “Clean Architecture” شناخته می‌شود، یک الگوی معماری نرم‌افزاری است که بر ایجاد سیستم‌های نرم‌افزاری قابل آزمایش، قابل نگهداری و قابل توسعه تمرکز دارد. این الگو با تعریف مرزهای واضح بین هسته اصلی نرم‌افزار و دنیای خارجی، پیچیدگی را کاهش می‌دهد و امکان استفاده مجدد از اجزای نرم‌افزار را افزایش می‌دهد.

در معماری هگزاگونی، نرم‌افزار به دو بخش اصلی تقسیم می‌شود:

  1. هسته اصلی: هسته اصلی نرم‌افزار، که به عنوان “Core” یا “Business Logic” نیز شناخته می‌شود، حاوی منطق تجاری و مدل‌های داده نرم‌افزار است. این هسته کاملاً مستقل از دنیای خارجی است و فقط از طریق رابط‌های تعریف شده (Ports) با آن ارتباط برقرار می‌کند.
  2. آداپتورها: آداپتورها، که به عنوان “Drivers” یا “Frameworks” نیز شناخته می‌شوند، رابط بین هسته اصلی و دنیای خارجی را فراهم می‌کنند. آنها مسئولیت ترجمه درخواست‌ها و پاسخ‌ها بین فرمت‌های مختلف، اتصال به پایگاه داده‌ها، ارسال و دریافت پیام‌ها، مدیریت فایل‌ها و سایر تعاملات با دنیای خارجی را بر عهده دارند.

مزایای استفاده از معماری هگزاگونی

استفاده از معماری هگزاگونی دارای چندین مزیت است:

  • آزمون‌پذیری: هسته اصلی را می‌توان به طور مستقل از دنیای خارجی آزمایش کرد، که آزمایش نرم‌افزار را آسان‌تر و دقیق‌تر می‌کند.
  • قابلیت نگهداری: کد نرم‌افزار سازماندهی شده و واضح است، که نگهداری و توسعه نرم‌افزار را آسان‌تر می‌کند.
  • قابلیت استفاده مجدد: هسته اصلی و آداپتورها به خوبی تعریف شده و قابل استفاده مجدد هستند، به این معنی که می‌توان از آنها در پروژه‌های دیگر نیز استفاده کرد.
  • قابلیت تطبیق‌پذیری: نرم‌افزار می‌تواند به راحتی با تغییرات در فناوری‌های خارجی (پایگاه داده‌ها، فریم‌ورک‌ها، پیام‌رسان‌ها و غیره) سازگار شود.

پیاده‌سازی معماری هگزاگونی در Go

برای پیاده‌سازی معماری هگزاگونی در Go، می‌توانید مراحل کلی زیر را دنبال کنید:

  1. تعریف هسته اصلی: یک بسته جداگانه برای هسته اصلی ایجاد کنید و مدل‌های داده و منطق تجاری خود را در این بسته تعریف کنید.
  2. تعریف رابط‌ها: برای هر تعامل با دنیای خارجی، یک رابط تعریف کنید. این رابط‌ها باید به طور کامل در هسته اصلی تعریف شوند و هیچ وابستگی خارجی نداشته باشند.
  3. پیاده‌سازی آداپتورها: برای هر رابط تعریف شده، یک پیاده‌سازی ایجاد کنید. این پیاده‌سازی‌ها باید در بسته‌های جداگانه تعریف شوند و مسئولیت ترجمه درخواست‌ها و پاسخ‌ها بین فرمت‌های مختلف، اتصال به پایگاه داده‌ها، ارسال و دریافت پیام‌ها، مدیریت فایل‌ها و سایر تعاملات با دنیای خارجی را بر عهده دارند.
  4. تزریق وابستگی: از تزریق وابستگی برای تزریق پیاده‌سازی‌های آداپتور به هسته اصلی استفاده کنید. این به شما کمک می‌کند تا هسته اصلی را کاملاً مستقل نگه دارید و بتوانید آن را به طور مستقل آزمایش کنید.

مثال پیاده‌سازی

در اینجا یک مثال ساده از نحوه پیاده‌سازی معماری هگزاگونی در Go با استفاده از تزریق وابستگی گذاشته شده است:

https://github.com/alireza-frj4/hexArchGoGRPC

ممنون که تا آخر این مقاله رو مطالعه کردید و سعی میکنم در مقاله های بعدی معماری های باقی مانده همچون DDD رو هم توضیح بدیم