برنامه نویس Junior ،Mid Level و ارشد
🔺 برنامه نویسی فقط نوشتن کد نیست. این یک سفر رشد مداوم و یادگیری است. چه یک علاقهمند جوان باشید، چه یک توسعهدهنده متوسط یا یک senior با تجربه، مسیر موفقیت شامل مراحل استراتژیک است. بیایید بررسی کنیم که چگونه می توانید این سفر را طی کنید و حرفه برنامه...
🌐 : برنامه نویس Junior ،Mid Level و ارشد
🔺 برنامه نویسی فقط نوشتن کد نیست. این یک سفر رشد مداوم و یادگیری است. چه یک علاقهمند جوان باشید، چه یک توسعهدهنده متوسط یا یک senior با تجربه، مسیر موفقیت شامل مراحل استراتژیک است. بیایید بررسی کنیم که چگونه می توانید این سفر را طی کنید و حرفه برنامه...
🌐 : برنامه نویس Junior ،Mid Level و ارشد
تفاوت بین Agile و DevOps چیست؟
🔺 Agile و DevOps دو متدولوژی توسعه نرمافزاری هستند که بیشترین استفاده را دارند. با وجود شباهتها و تفاوتهای فراوان، اما هدف یکسانی دارند. و هدف ایجاد محصول کارآمد و سریع است. بسیاری از شرکتهای فناوری از متدولوژیهای Agile و DevOps پیروی میکنند تا ب...
🌐 : تفاوت بین Agile و DevOps چیست؟
🔺 Agile و DevOps دو متدولوژی توسعه نرمافزاری هستند که بیشترین استفاده را دارند. با وجود شباهتها و تفاوتهای فراوان، اما هدف یکسانی دارند. و هدف ایجاد محصول کارآمد و سریع است. بسیاری از شرکتهای فناوری از متدولوژیهای Agile و DevOps پیروی میکنند تا ب...
🌐 : تفاوت بین Agile و DevOps چیست؟
10 مشکل رایج جاوا اسکریپت که باید بدانید
🔺 در ابتدا، جاوا اسکریپت ممکن است بسیار ساده به نظر برسد. با این حال، این زبان بسیار ظریفتر، قدرتمندتر و پیچیدهتر از آن چیزی است که در ابتدا تصور میشد. بسیاری از ظرافتهای جاوا اسکریپت منجر به تعدادی از مشکلات رایج، که 10 مورد از آنها در اینجا، می...
🌐 : 10 مشکل رایج جاوا اسکریپت که باید بدانید
🔺 در ابتدا، جاوا اسکریپت ممکن است بسیار ساده به نظر برسد. با این حال، این زبان بسیار ظریفتر، قدرتمندتر و پیچیدهتر از آن چیزی است که در ابتدا تصور میشد. بسیاری از ظرافتهای جاوا اسکریپت منجر به تعدادی از مشکلات رایج، که 10 مورد از آنها در اینجا، می...
🌐 : 10 مشکل رایج جاوا اسکریپت که باید بدانید
استفاده از JWT برای احراز هویت سرویس API
🔺 در چشم انداز همیشه در حال تحول معماری ابر، نقش رابط های برنامه نویسی کاربردی (API) به طور فزاینده ای حیاتی شده است. APIها به عنوان پلی عمل می کنند که به نرم افزارهای مختلف اجازه می دهد تا به طور یکپارچه با هم ارتباط برقرار کنند. این مقاله به بررسی اه...
🌐 : استفاده از JWT برای احراز هویت سرویس API
🔺 در چشم انداز همیشه در حال تحول معماری ابر، نقش رابط های برنامه نویسی کاربردی (API) به طور فزاینده ای حیاتی شده است. APIها به عنوان پلی عمل می کنند که به نرم افزارهای مختلف اجازه می دهد تا به طور یکپارچه با هم ارتباط برقرار کنند. این مقاله به بررسی اه...
🌐 : استفاده از JWT برای احراز هویت سرویس API
کار با دیزاین پترن ها یا الگوهای طراحی در React
🔺 الگوهای طراحی یا دیزاین پترن ها راهی مناسب برای مقابله با چالشها با راهحلهای تست شده ارائه میدهند و در زمان و تلاش توسعهدهندگان صرفهجویی میکنند. در اینجا چگونه الگوهای طراحی React به ماژول های منسجم با جفت کمتر اجازه می دهند صحبت خواهیم کرد.&n...
🌐 : کار با دیزاین پترن ها یا الگوهای طراحی در React
🔺 الگوهای طراحی یا دیزاین پترن ها راهی مناسب برای مقابله با چالشها با راهحلهای تست شده ارائه میدهند و در زمان و تلاش توسعهدهندگان صرفهجویی میکنند. در اینجا چگونه الگوهای طراحی React به ماژول های منسجم با جفت کمتر اجازه می دهند صحبت خواهیم کرد.&n...
🌐 : کار با دیزاین پترن ها یا الگوهای طراحی در React
استراتژیهایی برای ساخت برنامههای React در معماری سمت کلاینت
🔺 در حوزه پویای توسعه وب، عملکرد بهینه و تجربه کاربر برای موفقیت برنامه های کاربردی وب مدرن اساسی است. React، کتابخانه جاوا اسکریپت منتشر شده توسط فیس بوک، به ابزاری ضروری برای توسعه دهندگان تبدیل شده است و آنها را قادر می سازد تا برنامه هایی بسازند که...
🌐 : استراتژیهایی برای ساخت برنامههای React در معماری سمت کلاینت
🔺 در حوزه پویای توسعه وب، عملکرد بهینه و تجربه کاربر برای موفقیت برنامه های کاربردی وب مدرن اساسی است. React، کتابخانه جاوا اسکریپت منتشر شده توسط فیس بوک، به ابزاری ضروری برای توسعه دهندگان تبدیل شده است و آنها را قادر می سازد تا برنامه هایی بسازند که...
🌐 : استراتژیهایی برای ساخت برنامههای React در معماری سمت کلاینت
ژنریک ها (Generics) در Go : بررسی عمیق
🔺 در Go 1.18، این زبان ویژگی جدیدی به نام انواع generic (که معمولاً، ژنریک شناخته میشود) معرفی کرد که مدتی در لیست آرزوهای توسعهدهندگان Go قرار داشت. در برنامه نویسی، نوع generic، نوعی است که می تواند همراه با چندین نوع دیگر استفاده شود. معمولاً در G...
🌐 : ژنریک ها (Generics) در Go : بررسی عمیق
#go #golang #گو #گولنگ
🔺 در Go 1.18، این زبان ویژگی جدیدی به نام انواع generic (که معمولاً، ژنریک شناخته میشود) معرفی کرد که مدتی در لیست آرزوهای توسعهدهندگان Go قرار داشت. در برنامه نویسی، نوع generic، نوعی است که می تواند همراه با چندین نوع دیگر استفاده شود. معمولاً در G...
🌐 : ژنریک ها (Generics) در Go : بررسی عمیق
#go #golang #گو #گولنگ
FrankenPHP چیست؟ اپ سرور مدرن PHP
🔺 همانطور که پیچیدگی برنامه های کاربردی وب همچنان در حال رشد است، توسعه دهندگان به طور فزاینده ای بر عملکرد و مقیاس پذیری تمرکز می کنند. لاراول که به عنوان یک چارچوب قدرتمند PHP شناخته می شود، این نیازها را برطرف می کند. با این حال، راه حل های مختلفی ب...
🌐 : FrankenPHP چیست؟ اپ سرور مدرن PHP
#فرانیکن #لاراول #php #frankenphp
🔺 همانطور که پیچیدگی برنامه های کاربردی وب همچنان در حال رشد است، توسعه دهندگان به طور فزاینده ای بر عملکرد و مقیاس پذیری تمرکز می کنند. لاراول که به عنوان یک چارچوب قدرتمند PHP شناخته می شود، این نیازها را برطرف می کند. با این حال، راه حل های مختلفی ب...
🌐 : FrankenPHP چیست؟ اپ سرور مدرن PHP
#فرانیکن #لاراول #php #frankenphp
#Go #Golang #گو #گولنگ
Please open Telegram to view this post
VIEW IN TELEGRAM
بهترین فریمورک های وب Go در 2024
💠 با ادامه پیشرفت فناوری، نیاز روزافزونی به برنامه های کاربردی وب سریع، قابل اعتماد و مقیاس پذیر وجود دارد. Go که با نام Golang نیز شناخته می شود، یک زبان برنامه نویسی است که به دلیل سادگی، کارایی و همزمانی آن محبوبیت پیدا کرده است. این زبان تبدیل به ز...
💙 : بهترین فریمورک های وب Go در 2024
#گو #گولنگ #Gin #Echo
#گو #گولنگ #Gin #Echo
Please open Telegram to view this post
VIEW IN TELEGRAM
حالا Mapped Types در TypeScript به شما اجازه میده تا نوعهای جدیدی را بر اساس نوعهای موجود ایجاد کنید. با استفاده از یک نوع ژنریک ( Generic) که از یک union از PropertyKeyها (معمولاً با استفاده از keyof ایجاد میشه) برای تکرار کلیدها و ایجاد یک نوع جدید انجام میشه.
این باعث میشه دیگه نگران مقدار های null یا undefined نباشید.
حالا Utility Types در TypeScript مجموعهای از نوعهای از پیش تعریف شده هستند که به شما کمک میکنند تا تغییرات و عملیاتهای رایج روی نوعها را انجام بدید. این نوعها به شما اجازه میده تا نوعهای جدیدی بر اساس نوعهای موجود ایجاد کنید، پراپرتی ها Partial یا Required و همچنین Readonly کنید، نسخههای غیرقابل تغییر از نوعها بسازید و ...
اینم قشنگه و در تایپاسکریپت یک روش برای ایجاد انواع یونیک است که از اشتباهات لاجیکال جلوگیری میکنه. این نوعها با اضافه کردن یک ویژگی خاص به نوع اصلی، به نوعی “برند” میشوند.
دقت کنید این ویژگی در زمان اجرا وجود ندارد، اما به کامپایلر تایپاسکریپت کمک میکند تا تفاوت بین انواع مختلف را تشخیص بده.
موارد دیگه ای هم بودن، در پست های آینده بهش می پردازیم.
موردی هم بود حتما در بخش کامنت ها بنویسید ♥️
Anophel | آنوفل
#تایپ_اسکریپت #ts #typescript
Please open Telegram to view this post
VIEW IN TELEGRAM
Anophel
Anophel | Where Developers Create Their Own Path
Anophel is an ecosystem for developers—a place for those who prefer building over consuming. If you want to create tools, think differently, and forge your own path in coding, Anophel is with you.
Forwarded from IEEE Sharif UT
با حضور کارآفرینان موفق ایرانی
off20
از 20 درصد تخفیف ویژه برخوردار شوید.Please open Telegram to view this post
VIEW IN TELEGRAM
این یک کتابخانه جاوا اسکریپت سبک و اوپن سورس است که برای توسعه ساده فرانت اند طراحی شده است که بر سهولت استفاده و حداقل کد تأکید دارد.
#nuejs #frontend #js #javascript #جاوااسکریپت
Please open Telegram to view this post
VIEW IN TELEGRAM
با استفاده از این می تونید از آرایه یا آبجکت یک کپی بگیرید
اینم آرایه هایی که شبیه آبجکت هستن یا آبجکت iterable هستند رو به أآرایه تبدیل می کند.
پراپرتی ها را از یک یا چند آبجکت منبع به یک آبجکت هدف کپی میکند و آبجکت مورد نظر را تغییر میدهد.
اینم با ترکیب یک مقدار یا یک آرایه موجود به یک آرایه جدید یک shallow Copy ایجاد می کند.
با اینم بخشی از آرایه رو اسلایس می کنید و یک آرایه جدید می سازید و یک Shallow Copy ایجاد می کند.
با استفاده از این هم می تونید یک Shallow Copy از پراپرتی های یک آبجکت بگرید.
با اساین کردن یک مقدار به یک متغیر دیگر، یک shallow copy ایجاد می کند.
از آبجکت نمونه یک آبجکت جدید همراه با پراپرتی ها می سازد.
#جاوااسکرپیت #فرانت_اند #ری_اکت #js #javascript #frontend #react
Please open Telegram to view this post
VIEW IN TELEGRAM
در جاوااسکریپت، مفاهیم "Execution Context"و "Execution Stack"و "Variable Object" و "Scope Chain" به ترتیب با مکانیزمهای اجرایی و مدیریت متغیرها و توابع در کد ارتباط دارند.
خب این مفاهیم برای درک چگونگی اجرای کدهای جاوااسکریپت و مدیریت فضای حافظه اهمیت دارند. بیاید بیشتر باهاش آشنا شیم:
1. Execution Context:
این مفهوم به معنای فضاییه که کدهای جاوااسکریپت توش اجرا میشن. وقتی یه اسکریپت یا تابع اجرا میشه، یه "بافت اجرایی" براش ساخته میشه که مرورگر بهش نیاز داره تا کد رو درست اجرا کنه.
سه نوع کلی داریم:
- Global Execution Context: وقتی کد برای اولین بار اجرا میشه، این بافت ساخته میشه و همه کدهای خارج از توابع توش قرار میگیرن.
- Function Execution Context: هر بار که یه تابع فراخوانی میشه، یه بافت اجرایی جدید برای اون ساخته میشه.
- Eval Execution Context: وقتی کدها از طریق تابع eval() اجرا میشن، یه بافت اجرایی خاص برای اون ساخته میشه.
هر Execution Context سه بخش اصلی داره:
1.Variable Object: جایی که متغیرها و توابع تعریفشده توش ذخیره میشن.
2. Scope Chain: برای دسترسی به متغیرها و توابع در دامنههای دیگه استفاده میشه.
3. this: به آبجکت فعلی یا محیط اجرایی خاص در زمان اجرا اشاره داره.
2. Execution Stack:
اینو بهش Call Stack هم میگن. یه جور ساختار دادهای از نوع استک (LIFO: Last In, First Out) که بافتهای اجرایی رو مدیریت میکنه. هر بار که یه تابع فراخوانی میشه، بافت اجرایی اون تابع به استک اضافه میشه و بعد از اتمام اجرا، از استک خارج میشه.
3. Variable Object:
فضایی که تو هر بافت اجرایی ایجاد میشه و متغیرها، توابع و پارامترهای مربوط به اون رو ذخیره میکنه.
دو نوع اصلی داره:
- Global Execution Context: آبجکت متغیر به عنوان Global Object عمل میکنه (معمولاً window تو مرورگر).
- Function Execution Context: شامل پارامترهای تابع، متغیرهای داخل تابع و توابع درونی اون.
۴. Scope Chain:
مکانیزمیه که جاوااسکریپت برای دسترسی به متغیرها و توابع ازش استفاده میکنه. هر بافت اجرایی یه زنجیرهای از دامنهها داره که تو اون به دنبال متغیرها و توابع میگرده. وقتی جاوااسکریپت دنبال مقدار یه متغیره، اول از دامنه فعلی شروع میکنه و اگه اونجا پیدا نکرد، میره سراغ دامنههای بالاتر (مثلاً دامنه گلوبال).
این مفهوم اجازه میده که متغیرها و توابع تو جاوااسکریپت به طور سلسله مراتبی و براساس مکان تعریفشون تو کد دسترسیپذیر باشن.
ANOPHEL I آنوفل
#جاوااسکریپت #javascript #stack #react #vue
خب این مفاهیم برای درک چگونگی اجرای کدهای جاوااسکریپت و مدیریت فضای حافظه اهمیت دارند. بیاید بیشتر باهاش آشنا شیم:
1. Execution Context:
این مفهوم به معنای فضاییه که کدهای جاوااسکریپت توش اجرا میشن. وقتی یه اسکریپت یا تابع اجرا میشه، یه "بافت اجرایی" براش ساخته میشه که مرورگر بهش نیاز داره تا کد رو درست اجرا کنه.
سه نوع کلی داریم:
- Global Execution Context: وقتی کد برای اولین بار اجرا میشه، این بافت ساخته میشه و همه کدهای خارج از توابع توش قرار میگیرن.
- Function Execution Context: هر بار که یه تابع فراخوانی میشه، یه بافت اجرایی جدید برای اون ساخته میشه.
- Eval Execution Context: وقتی کدها از طریق تابع eval() اجرا میشن، یه بافت اجرایی خاص برای اون ساخته میشه.
هر Execution Context سه بخش اصلی داره:
1.Variable Object: جایی که متغیرها و توابع تعریفشده توش ذخیره میشن.
2. Scope Chain: برای دسترسی به متغیرها و توابع در دامنههای دیگه استفاده میشه.
3. this: به آبجکت فعلی یا محیط اجرایی خاص در زمان اجرا اشاره داره.
2. Execution Stack:
اینو بهش Call Stack هم میگن. یه جور ساختار دادهای از نوع استک (LIFO: Last In, First Out) که بافتهای اجرایی رو مدیریت میکنه. هر بار که یه تابع فراخوانی میشه، بافت اجرایی اون تابع به استک اضافه میشه و بعد از اتمام اجرا، از استک خارج میشه.
3. Variable Object:
فضایی که تو هر بافت اجرایی ایجاد میشه و متغیرها، توابع و پارامترهای مربوط به اون رو ذخیره میکنه.
دو نوع اصلی داره:
- Global Execution Context: آبجکت متغیر به عنوان Global Object عمل میکنه (معمولاً window تو مرورگر).
- Function Execution Context: شامل پارامترهای تابع، متغیرهای داخل تابع و توابع درونی اون.
۴. Scope Chain:
مکانیزمیه که جاوااسکریپت برای دسترسی به متغیرها و توابع ازش استفاده میکنه. هر بافت اجرایی یه زنجیرهای از دامنهها داره که تو اون به دنبال متغیرها و توابع میگرده. وقتی جاوااسکریپت دنبال مقدار یه متغیره، اول از دامنه فعلی شروع میکنه و اگه اونجا پیدا نکرد، میره سراغ دامنههای بالاتر (مثلاً دامنه گلوبال).
این مفهوم اجازه میده که متغیرها و توابع تو جاوااسکریپت به طور سلسله مراتبی و براساس مکان تعریفشون تو کد دسترسیپذیر باشن.
ANOPHEL I آنوفل
#جاوااسکریپت #javascript #stack #react #vue
Anophel
Anophel | Where Developers Create Their Own Path
Anophel is an ecosystem for developers—a place for those who prefer building over consuming. If you want to create tools, think differently, and forge your own path in coding, Anophel is with you.
بهترین Best Practice های گولنگ که هر برنامه نویس Go بداند
🔺 گولنگ (Golang) که با نام Go نیز شناخته می شود، یک زبان برنامه نویسی منبع باز محبوب است که توسط غول فناوری گوگل توسعه یافته است. Go با سادگی، کارایی و پشتیبانی قوی از همزمانی، محبوبیت زیادی در بین توسعه دهندگان در سراسر جهان به دست آورده است. از آنجای...
🌐 : بهترین Best Practice های گولنگ که هر برنامه نویس Go بداند
🔺 گولنگ (Golang) که با نام Go نیز شناخته می شود، یک زبان برنامه نویسی منبع باز محبوب است که توسط غول فناوری گوگل توسعه یافته است. Go با سادگی، کارایی و پشتیبانی قوی از همزمانی، محبوبیت زیادی در بین توسعه دهندگان در سراسر جهان به دست آورده است. از آنجای...
🌐 : بهترین Best Practice های گولنگ که هر برنامه نویس Go بداند
تسلط و بررسی package.json : قلب پروژه Node.JS
🔺 اگر تا به حال با یک پروژه node.js یا ری اکت کار کرده اید، احتمالا با فایل package.json مواجه شده اید. این فایل که بی سر و صدا در ریشه شما قرار دارد اما اجازه ندهید اندازه خودتون شما را فریب دهد این یکی از مهم ترین بخش های هر پروژه JavaScript/TypeScri...
🌐 : تسلط و بررسی package.json : قلب پروژه Node.JS
🔺 اگر تا به حال با یک پروژه node.js یا ری اکت کار کرده اید، احتمالا با فایل package.json مواجه شده اید. این فایل که بی سر و صدا در ریشه شما قرار دارد اما اجازه ندهید اندازه خودتون شما را فریب دهد این یکی از مهم ترین بخش های هر پروژه JavaScript/TypeScri...
🌐 : تسلط و بررسی package.json : قلب پروژه Node.JS
آیا تا به حال به یک ساختار کامل و منظم برای مدیریت پروژههای #گولنگ ( Go# ) با معماری Domain-Driven Design (DDD) فکر کردهاید؟ در این پست قصد داریم این ساختار را با جزئیات بیشتری بررسی کنیم و به شما نشان دهیم چگونه میتوانید پروژهتان را مرتبتر و کارآمدتر پیش ببرید.
پست قبلی ما در این لینک:
https://lnkd.in/evuPH7cB
1. سطح بالا (Root Directory):
-cmd/:
- این دایرکتوری برای نقاط ورود برنامه استفاده میشه. هر اپلیکیشن قابلاجرا، چه سرور باشه چه ابزارهای CLI یا میکروسرویسها، اینجا قرار میگیره.
- مثال: cmd/app/main.go: فایل اصلی که نقطه شروع اجرای برنامه است. این فایل باید تمیز و ساده باشه و فقط وظیفهی مقداردهی اولیه مثل خواندن تنظیمات، ایجاد کانکشنها، و شروع سرور رو برعهده داشته باشه.
- internal/:
- کدهایی که مختص پروژهی ما هستن و نباید توسط ماژولهای خارجی استفاده بشن، اینجا قرار میگیرن. در گولنگ، دایرکتوری internal بهصورت پیشفرض دسترسی ماژولهای خارجی رو محدود میکنه.
- pkg/:
- شامل کتابخانهها و کدهای قابل استفاده مجدد هست که ممکنه در پروژههای دیگه یا بخشهای دیگه همین پروژه استفاده بشن. دقت کنید که این دایرکتوری باید از internal جدا باشه چون عمومیتر هست.
- configs/:
- تنظیمات پروژه مثل فایلهای yaml، json یا toml که برای کانفیگ سرور، دیتابیس یا سرویسهای دیگه استفاده میشن اینجا قرار میگیرن.
- go.mod و go.sum:
- این فایلها وظیفه مدیریت وابستگیها رو به عهده دارن و توسط Go Modules استفاده میشن.
2. دایرکتوری داخلی (internal/):
این دایرکتوری قلب پروژهست و تمامی دامنههای پروژه رو در خودش جای میده. هر دامنه یا Bounded Context به صورت جداگانه سازماندهی شده.
ساختار دامنه (مثال: user/):
- user.go (Model):
- شامل مدلها و ساختارهای دادهای مرتبط با دامنه است.
- repository.go:
- مسئول مدیریت دسترسی به دادهها (Data Access Layer) هست.
- service.go:
- این لایه منطق تجاری رو پیادهسازی میکنه و سرویسها با repository تعامل دارند و مدیریت فرآیندهای مربوط به دامنه رو انجام میدن.
- handler.go:
- این لایه مدیریت درخواستهای ورودی (HTTP یا gRPC) و اتصال اونها به سرویسها رو بر عهده داره.
ساختار دامنه دیگر (مثال: product/):
- دامنههای دیگه مثل product ساختاری مشابه دارند. هر دامنه بهصورت مستقل پیادهسازی شده و شامل لایههای مدل، سرویس، ریپازیتوری و هندلر هست.
کاربرد این ساختار در DDD:
- تفکیک دامنهها :
- هر دامنه کاملاً مستقل پیادهسازی شده و میتونه به صورت جداگانه توسعه یابد.
- انعطافپذیری:
- با این ساختار، میتونید تغییرات یا افزودن دامنههای جدید رو بدون تأثیر روی سایر بخشها انجام بدید.
-مقیاسپذیری:
- هر دامنه میتونه بهصورت مجزا تست و مقیاسدهی بشه. برای مثال، در صورت نیاز، میتونید دامنه خاصی رو به یک سرویس مستقل تبدیل کنید.
سازگاری با معماریهای مدرن:
- این ساختار برای پروژههای میکروسرویس، مونولیت ماژولار یا حتی معماریهای لایهای مناسب است.
آیا شما هم تجربهای در استفاده از معماری DDD# دارید؟ خوشحال میشوم که تجربیات و نظرات خود را با ما به اشتراک بگذارید!
Anophel | آنوفل
پست قبلی ما در این لینک:
https://lnkd.in/evuPH7cB
1. سطح بالا (Root Directory):
-cmd/:
- این دایرکتوری برای نقاط ورود برنامه استفاده میشه. هر اپلیکیشن قابلاجرا، چه سرور باشه چه ابزارهای CLI یا میکروسرویسها، اینجا قرار میگیره.
- مثال: cmd/app/main.go: فایل اصلی که نقطه شروع اجرای برنامه است. این فایل باید تمیز و ساده باشه و فقط وظیفهی مقداردهی اولیه مثل خواندن تنظیمات، ایجاد کانکشنها، و شروع سرور رو برعهده داشته باشه.
- internal/:
- کدهایی که مختص پروژهی ما هستن و نباید توسط ماژولهای خارجی استفاده بشن، اینجا قرار میگیرن. در گولنگ، دایرکتوری internal بهصورت پیشفرض دسترسی ماژولهای خارجی رو محدود میکنه.
- pkg/:
- شامل کتابخانهها و کدهای قابل استفاده مجدد هست که ممکنه در پروژههای دیگه یا بخشهای دیگه همین پروژه استفاده بشن. دقت کنید که این دایرکتوری باید از internal جدا باشه چون عمومیتر هست.
- configs/:
- تنظیمات پروژه مثل فایلهای yaml، json یا toml که برای کانفیگ سرور، دیتابیس یا سرویسهای دیگه استفاده میشن اینجا قرار میگیرن.
- go.mod و go.sum:
- این فایلها وظیفه مدیریت وابستگیها رو به عهده دارن و توسط Go Modules استفاده میشن.
2. دایرکتوری داخلی (internal/):
این دایرکتوری قلب پروژهست و تمامی دامنههای پروژه رو در خودش جای میده. هر دامنه یا Bounded Context به صورت جداگانه سازماندهی شده.
ساختار دامنه (مثال: user/):
- user.go (Model):
- شامل مدلها و ساختارهای دادهای مرتبط با دامنه است.
- repository.go:
- مسئول مدیریت دسترسی به دادهها (Data Access Layer) هست.
- service.go:
- این لایه منطق تجاری رو پیادهسازی میکنه و سرویسها با repository تعامل دارند و مدیریت فرآیندهای مربوط به دامنه رو انجام میدن.
- handler.go:
- این لایه مدیریت درخواستهای ورودی (HTTP یا gRPC) و اتصال اونها به سرویسها رو بر عهده داره.
ساختار دامنه دیگر (مثال: product/):
- دامنههای دیگه مثل product ساختاری مشابه دارند. هر دامنه بهصورت مستقل پیادهسازی شده و شامل لایههای مدل، سرویس، ریپازیتوری و هندلر هست.
کاربرد این ساختار در DDD:
- تفکیک دامنهها :
- هر دامنه کاملاً مستقل پیادهسازی شده و میتونه به صورت جداگانه توسعه یابد.
- انعطافپذیری:
- با این ساختار، میتونید تغییرات یا افزودن دامنههای جدید رو بدون تأثیر روی سایر بخشها انجام بدید.
-مقیاسپذیری:
- هر دامنه میتونه بهصورت مجزا تست و مقیاسدهی بشه. برای مثال، در صورت نیاز، میتونید دامنه خاصی رو به یک سرویس مستقل تبدیل کنید.
سازگاری با معماریهای مدرن:
- این ساختار برای پروژههای میکروسرویس، مونولیت ماژولار یا حتی معماریهای لایهای مناسب است.
آیا شما هم تجربهای در استفاده از معماری DDD# دارید؟ خوشحال میشوم که تجربیات و نظرات خود را با ما به اشتراک بگذارید!
Anophel | آنوفل
Linkedin
Mohammad Abdorrahmani on LinkedIn: #گولنگ #golang #go #project_folder_structures
وقتی در اولین قدم، پروژه گولنگ (Golang) رو شروع میکنید، چطور ساختار پوشهها رو انتخاب میکنید تا هم سرعت توسعهتون بالا باشه و هم تجربهی خوبی داشته باشید؟…