✅ پوشه .air :
توی این پوشه با توجه به هر اپ(سرویس) که قراره بالا بیاد، یک فایل air.myApp.toml داریم
این برای اینه که وقتی توی دولوپمنت یه اپ رو توسط داکر یا کوبر یا هرچی بالا اوردیم(توی مرحله دولوپمنت) ومثلا تغییراتی دادیم، هربار نخواییم اون اپ رو برای اجرای تغییرات بیاریم پایین و دوباره بالا بیاریم.
✅ پوشه adapter :
توی این پوشه ابزار هایی رو استفاده میکنیم که قراره توی پروژه بقیه سرویس هامون ازش استفاده کنن.
مثلا فرض کنید توی پروژه، سرویس هامون میخوان از rabbitMQ استفاده کنن. ما نمیاییم که خود ربیت رو مستقمی توی اون سرویس ایمپورت کنیم و استفاده کنیم. چون بر فرض فردا اگه بخواییم مسیج بروکرمون رو تغییر بدیم کد های ربیت با اون سرویس couple شدن و سخته عوض کردنش
به همین خاطر یک لایه ابسترکت به اسم adapter استفاده میکنیم و هر ابزار خارجی رو که پروژه و سرویس هامون نیاز داره رو اون جا یه پوشه براش میسازیم و متد های مورد نیاز رو براش پیاده میکنیم و بعد اون اداپتر رو به سرویس مورد نظر تزریق میکنیم
حتی grpc یک اپلیکیشن هم که قراره سایر سرویس ها ازش استفاده کنن هم یه سرویس خارجی حساب میشه که توی این پوشه قرار داده میشه
✅ پوشه cli :
این پوشه برای تست endpoint ها استفاده میشه، که هرکس به هرسرویس نیاز داشت از طریق این cli درخواستش رو به سرویس مورد نظر بفرسته و به اعضای هر سرویس یه پوشه داریم
✅ پوشه cmd :
برای اکسترنال کامند ها هم به اعضای هر سرویس یه پوشه اینجا میسازیم(همون main.go) هر اپ
✅ پوشه config :
دقت کنید که این پوشه فایل های کانفیگ پروژه نیست. بلکه کانفیگوریشن منیجمنتی که خودمون برای پروژه نوشتیم
✅ پوشه deploy :
کلا کار های دیپلویمنت رو برای هر سرویس اینجا انجام میدیم. فایل های کانفیگ هر اپ توی این پوشه و در پوشه مخصوص به خودشون قرار میگیرن
✅ پوشه pkg :
هر چیزی که قرار باشه به صورت مشترک برای همه سرویس ها استفاده بشه رو اینجا مینویسم مثل یه پکیج که مربوط به request زدن باشه
✅ پوشه protobuf :
توی این پوشه فایل های مربوط به پروتوباف و grpc رو که برای ارتباط بین سرویس هاست میزاریم
✅ پوشه script :
اسکریپت های مورد نیاز رو اینجا میزاریم
✅ پوشه types :
تایپ های جنریک که قراره توی کل سرویس ها یکپارچه باشن مثلا ID رو توی این پوشه میسازیم
✅ app_name :
هر سرویس یا همون اپلیکیشنی که نیاز داریم، طبق الگو نام گذاری که تیم به توافق رسیده رو به این شکل درست میکنیم مثلا : notificationApp یا userApp
✅ فایل makefile :
از این برای بالا اوردن پروژه استفاده میکنیم مثلا اگه قراره سرویسی run بشه یا پیش نیازی داره اینجا اوکی میکنیم
حالا توی هر سرویس هم باز یه ساختار مشخص داریم که تمام اپ ها به علت یکپارچه بودن ملزم هستن از این ساختار پیروی کنن:
هر سرویس این فایل و پوشه هارو داره:
✅ پوشه delivery : راه های ارتباطی با بیرون. مثلا قراره سرور http باشه پس یه پوشه http میسازیم و و هندلر هامون رو اونجا اوکی میکنیم یا مثلا اگه ارتباط از نوع grpc باشه باز یه پوشه میسازیم و بقیه ماجرا و توی پوشه delivery یه پوشه به اسم middlewere هست که میدلور های مربوط به سرویس رو اونجا هندل میکنیم
✅ پوشه validation : برای ولیدیشن های موجود توی endpoint ها استفاده میشه
بقیه فایل ها مثل params ها و config مربوط به اون سرویس و entity و …. هم اگه نیاز بود میسازیم
برای هر سرویس هم یه فایل app.go داریم که مثل main اون سرویس میمونه
پوشه service : برای بیزینس لاجیک اون سرویس استفاده میشه
✅ پوشه repository : برای لایه دیتابیس استفاده میشه
✅ با توجه به نیاز اون پروژه ممکنه چیزایی این فایل ها اضافه یا کم بشه که دیگه بستگی به پروژه اتون داره ولی به راحتی با تغییرات کوچیک قابل تبدیل به میکروسرویس هستش
مخلص همه ❤️
@LearnByLearn#golang
project
|
|- .air
|- adapter
| | redis
| | RabbitMQ
| | userapp
|- cli
|- cmd
| | userService
| | notificationService
|- config
| | config.go
| | default.go
| | load.go
|- deploy
|- script
|- pkg
|- protobuf
|- types
|- MakeFile
userapp
| delivery
| | grpc
| | |handlers
| | http
| | |handlers
| params
| validation
| repository
|__ service