🔺 برنامه نویسی فقط نوشتن کد نیست. این یک سفر رشد مداوم و یادگیری است. چه یک علاقهمند جوان باشید، چه یک توسعهدهنده متوسط یا یک senior با تجربه، مسیر موفقیت شامل مراحل استراتژیک است. بیایید بررسی کنیم که چگونه می توانید این سفر را طی کنید و حرفه برنامه...
🔺 Agile و DevOps دو متدولوژی توسعه نرمافزاری هستند که بیشترین استفاده را دارند. با وجود شباهتها و تفاوتهای فراوان، اما هدف یکسانی دارند. و هدف ایجاد محصول کارآمد و سریع است. بسیاری از شرکتهای فناوری از متدولوژیهای Agile و DevOps پیروی میکنند تا ب...
🔺 در چشم انداز همیشه در حال تحول معماری ابر، نقش رابط های برنامه نویسی کاربردی (API) به طور فزاینده ای حیاتی شده است. APIها به عنوان پلی عمل می کنند که به نرم افزارهای مختلف اجازه می دهد تا به طور یکپارچه با هم ارتباط برقرار کنند. این مقاله به بررسی اه...
🔺 الگوهای طراحی یا دیزاین پترن ها راهی مناسب برای مقابله با چالشها با راهحلهای تست شده ارائه میدهند و در زمان و تلاش توسعهدهندگان صرفهجویی میکنند. در اینجا چگونه الگوهای طراحی React به ماژول های منسجم با جفت کمتر اجازه می دهند صحبت خواهیم کرد.&n...
استراتژیهایی برای ساخت برنامههای React در معماری سمت کلاینت
🔺 در حوزه پویای توسعه وب، عملکرد بهینه و تجربه کاربر برای موفقیت برنامه های کاربردی وب مدرن اساسی است. React، کتابخانه جاوا اسکریپت منتشر شده توسط فیس بوک، به ابزاری ضروری برای توسعه دهندگان تبدیل شده است و آنها را قادر می سازد تا برنامه هایی بسازند که...
🔺 در Go 1.18، این زبان ویژگی جدیدی به نام انواع generic (که معمولاً، ژنریک شناخته میشود) معرفی کرد که مدتی در لیست آرزوهای توسعهدهندگان Go قرار داشت. در برنامه نویسی، نوع generic، نوعی است که می تواند همراه با چندین نوع دیگر استفاده شود. معمولاً در G...
💠 مدیریت خطا (Error Handling) یک جنبه حیاتی در هر زبان برنامه نویسی است و Go نیز از این قاعده مستثنی نیست. در این مقاله از سری مقالات گولنگ در آنوفل، به بررسی اشتباهات معمولی که حتی توسعه دهندگان باتجربه مرتکب می شوند اختصاص یافته است، ما بر Error Hand...
💠 با ادامه پیشرفت فناوری، نیاز روزافزونی به برنامه های کاربردی وب سریع، قابل اعتماد و مقیاس پذیر وجود دارد. Go که با نام Golang نیز شناخته می شود، یک زبان برنامه نویسی است که به دلیل سادگی، کارایی و همزمانی آن محبوبیت پیدا کرده است. این زبان تبدیل به ز...
🔹یکی از دوستان ی پروژه ای نوشته بودن و از تایپ اسکریپت اومدن استفاده کردن، بعد قرار شد کد هاش بررسی کنم و مواردی که حالا نیاز بود رعایت کنه رو بگم. اینجام قرار میدم که همه مون تو پروژه های آینده مون استفاده کنیم ازش.
🫶1. از Mapped Types استفاده کنید. حالا Mapped Types در TypeScript به شما اجازه میده تا نوعهای جدیدی را بر اساس نوعهای موجود ایجاد کنید. با استفاده از یک نوع ژنریک ( Generic) که از یک union از PropertyKeyها (معمولاً با استفاده از keyof ایجاد میشه) برای تکرار کلیدها و ایجاد یک نوع جدید انجام میشه.
🫶2. از آپشنال chaining ?. استفاده کنید. این باعث میشه دیگه نگران مقدار های null یا undefined نباشید.
🫶3. از Utility Types استفاده کنید. حالا Utility Types در TypeScript مجموعهای از نوعهای از پیش تعریف شده هستند که به شما کمک میکنند تا تغییرات و عملیاتهای رایج روی نوعها را انجام بدید. این نوعها به شما اجازه میده تا نوعهای جدیدی بر اساس نوعهای موجود ایجاد کنید، پراپرتی ها Partial یا Required و همچنین Readonly کنید، نسخههای غیرقابل تغییر از نوعها بسازید و ...
🫶4. استفاده از Branded Types اینم قشنگه و در تایپاسکریپت یک روش برای ایجاد انواع یونیک است که از اشتباهات لاجیکال جلوگیری میکنه. این نوعها با اضافه کردن یک ویژگی خاص به نوع اصلی، به نوعی “برند” میشوند. دقت کنید این ویژگی در زمان اجرا وجود ندارد، اما به کامپایلر تایپاسکریپت کمک میکند تا تفاوت بین انواع مختلف را تشخیص بده.
موارد دیگه ای هم بودن، در پست های آینده بهش می پردازیم.
🔹انجمن علمی دانشکده مهندسی برق دانشگاه صنعتی شریف برگزار میکند: 🔻رویداد Emeet 2024 با حضور کارآفرینان موفق ایرانی
✅ در این رویداد شما فراتر از مفاهیم تئوری و تکراری، روایتهای ارزشمندی از مسیر پر چالش کارآفرینی، شکستها، موفقیتها و تجربههای کاربردی را از زبان کسانی میشنوید که این راه را با موفقیت پیمودهاند.
💠امروز میخوام یک ابزار جدید معرفی کنم به اسم Neu.js.
این یک کتابخانه جاوا اسکریپت سبک و اوپن سورس است که برای توسعه ساده فرانت اند طراحی شده است که بر سهولت استفاده و حداقل کد تأکید دارد.
🔹خب Nue.js به عنوان یک ابزار جدید در حوزه توسعه فرانت اند ظاهر شده است که رویکردی حداقلی برای ساخت اینترفیس های وب ارائه می دهد. البته این به دلیل ماهیت سبک خود متمایز است.
🔹زمانی که فشرده می شود تنها 2.3kb حجم دارد و نسبت به فریمورک های مثل Vue.js، React.js یا Svelte آبستکرشن با همون انتزاعات کمتری دارد. این کتابخانه بر طراحی وب بهبود معنایی و پیشرونده تمرکز دارد و برای توسعه دهندگان UI که طراحی تعامل، دسترسی و تجربه کاربر را در اولویت قرار می دهند، هدف قرار گرفته است.
🔹همچنین Nue.js بخشی از یک اکوسیستم پیشبینیشده است که شامل پروژههای آینده مانند Nue CSS، Nue MVC، Nue UI، Nuemark و Nuekit است که هدف آن ارائه یک جایگزین جامع برای راهحلهای موجود مانند Vite، Next.js و Astro است.
🔹سادگی این فریمورک به توسعه دهندگان اجازه می دهد تا به میزان قابل توجهی کد کمتری بنویسند و شامل ویژگی هایی برای توسعه آسان و یک زنجیره ابزار ساده برای SSR و تولید کامپوننت بدون نیاز به ابزارهای باندلر پیچیده است.
💠امروز میخوام درباره 8 تا از راه های استفاده از Shallow Copy تو جاوااسکریپت براتون بگم.
🔺در جاوا اسکریپت، یک Shallow Copy یک کپی از یک آبجکت یا آرایه ای است که در آن فقط ساختار سطح بالا کپی شده، در حالی که ساختارهای تودرتو هنوز ارجاع داده می شوند.
🔺اولی Spread syntax (…):
با استفاده از این می تونید از آرایه یا آبجکت یک کپی بگیرید
🔺دومی Array.from() : اینم آرایه هایی که شبیه آبجکت هستن یا آبجکت iterable هستند رو به أآرایه تبدیل می کند.
🔺سومی Object.assign() : پراپرتی ها را از یک یا چند آبجکت منبع به یک آبجکت هدف کپی میکند و آبجکت مورد نظر را تغییر میدهد.
🔺چهارمی Array.prototype.concat() : اینم با ترکیب یک مقدار یا یک آرایه موجود به یک آرایه جدید یک shallow Copy ایجاد می کند.
🔺پنجمی Array.prototype.slice() : با اینم بخشی از آرایه رو اسلایس می کنید و یک آرایه جدید می سازید و یک Shallow Copy ایجاد می کند.
🔺ششمی Object.keys(): با استفاده از این هم می تونید یک Shallow Copy از پراپرتی های یک آبجکت بگرید.
🔺هفتمی اپراتور = با اساین کردن یک مقدار به یک متغیر دیگر، یک shallow copy ایجاد می کند.
🔺هشتمی Object.create() : از آبجکت نمونه یک آبجکت جدید همراه با پراپرتی ها می سازد.
🔸بر اساس سناریویی که دارید می تونید از یکی از روش های بالا استفاده کنید.
در جاوااسکریپت، مفاهیم "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: مکانیزمیه که جاوااسکریپت برای دسترسی به متغیرها و توابع ازش استفاده میکنه. هر بافت اجرایی یه زنجیرهای از دامنهها داره که تو اون به دنبال متغیرها و توابع میگرده. وقتی جاوااسکریپت دنبال مقدار یه متغیره، اول از دامنه فعلی شروع میکنه و اگه اونجا پیدا نکرد، میره سراغ دامنههای بالاتر (مثلاً دامنه گلوبال).
این مفهوم اجازه میده که متغیرها و توابع تو جاوااسکریپت به طور سلسله مراتبی و براساس مکان تعریفشون تو کد دسترسیپذیر باشن.
بهترین Best Practice های گولنگ که هر برنامه نویس Go بداند
🔺 گولنگ (Golang) که با نام Go نیز شناخته می شود، یک زبان برنامه نویسی منبع باز محبوب است که توسط غول فناوری گوگل توسعه یافته است. Go با سادگی، کارایی و پشتیبانی قوی از همزمانی، محبوبیت زیادی در بین توسعه دهندگان در سراسر جهان به دست آورده است. از آنجای...
🔺 اگر تا به حال با یک پروژه node.js یا ری اکت کار کرده اید، احتمالا با فایل package.json مواجه شده اید. این فایل که بی سر و صدا در ریشه شما قرار دارد اما اجازه ندهید اندازه خودتون شما را فریب دهد این یکی از مهم ترین بخش های هر پروژه JavaScript/TypeScri...
آیا تا به حال به یک ساختار کامل و منظم برای مدیریت پروژههای #گولنگ ( Go# ) با معماری Domain-Driven Design (DDD) فکر کردهاید؟ در این پست قصد داریم این ساختار را با جزئیات بیشتری بررسی کنیم و به شما نشان دهیم چگونه میتوانید پروژهتان را مرتبتر و کارآمدتر پیش ببرید.
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): - شامل مدلها و ساختارهای دادهای مرتبط با دامنه است.
- service.go: - این لایه منطق تجاری رو پیادهسازی میکنه و سرویسها با repository تعامل دارند و مدیریت فرآیندهای مربوط به دامنه رو انجام میدن.
- handler.go: - این لایه مدیریت درخواستهای ورودی (HTTP یا gRPC) و اتصال اونها به سرویسها رو بر عهده داره.
ساختار دامنه دیگر (مثال: product/): - دامنههای دیگه مثل product ساختاری مشابه دارند. هر دامنه بهصورت مستقل پیادهسازی شده و شامل لایههای مدل، سرویس، ریپازیتوری و هندلر هست.
کاربرد این ساختار در DDD: - تفکیک دامنهها : - هر دامنه کاملاً مستقل پیادهسازی شده و میتونه به صورت جداگانه توسعه یابد.
- انعطافپذیری: - با این ساختار، میتونید تغییرات یا افزودن دامنههای جدید رو بدون تأثیر روی سایر بخشها انجام بدید.
-مقیاسپذیری: - هر دامنه میتونه بهصورت مجزا تست و مقیاسدهی بشه. برای مثال، در صورت نیاز، میتونید دامنه خاصی رو به یک سرویس مستقل تبدیل کنید.
سازگاری با معماریهای مدرن: - این ساختار برای پروژههای میکروسرویس، مونولیت ماژولار یا حتی معماریهای لایهای مناسب است.
آیا شما هم تجربهای در استفاده از معماری DDD# دارید؟ خوشحال میشوم که تجربیات و نظرات خود را با ما به اشتراک بگذارید!