Web Devs
Open in Telegram
Articles, News, Jokes, Quotes, Back-End and UI/UX for web developers. Github : https://github.com/fullStackDevsGroup Advertising: @adsfullStackDevs
Show more708
Subscribers
No data24 hours
+17 days
-930 days
Posts Archive
708
Output ?
public struct Item { public int Value { get; set; } } var items = new List(2) { new Item() {Value = 1}, }; foreach (var item in items) { item.Value = item.Value + 1; } Console.WriteLine(items[0].Value);
708
🔹 6 API Architectures you MUST know/be aware
1 - REST
2 - Webhook
3 - SOAP
4 - MQTT
5 - Web Socket
6 - GraphQL
@fullStackDevs
708
#feature
#cSharp
یکی از ویژگی های که از C# 7.0 معرفی شد استفاده از خط زیر (underscore) ( _ ) به عنوان جداکننده رقم شناخته می شود. هدف این است که خوانایی بهتر و آسانتر را بخصوص در اعداد بزرگ فراهم کنیم.
📌 اطلاعات بیشتر
@fullStackDevs
708
#chunk
#linq
💡مجموعه اسپیلیت ( split) با LINQ Chank💡
اگر نیاز دارید که مجموعه و یا collection ای را به مجموعه های کوچکتر بدون روش های اضافی تقسیم کنید، LINQ یک متد 𝗖𝗵𝘂𝗻𝗸 را که از 6 NET. معرفی شد ،پیشنهاد میکند.
تعداد سایز عنصر را به عنوان پارامتر در نظر می گیرد و سپس مجموعه را با حداکثر تعداد عنصر به مجموعه های کوچکتر تقسیم می کند.
در مثال فوق در chunkResult سه آرایه وجود خواهد داشت که تعداد دو مجموعه اول 5 و مجموعه سوم 4 آیتم وجود دارد.!
@fullStackDevs
708
💡 .𝐍𝐄𝐓 8 𝐟𝐞𝐚𝐭𝐮𝐫𝐞𝐬
IPNetwork class is A representation of an IP network based on 𝐂𝐈𝐃𝐑 𝐧𝐨𝐭𝐚𝐭𝐢𝐨𝐧.
کلاس IPNetwork نمایشی از یک شبکه IP بر اساس 𝐂𝐈𝐃𝐑 𝐧𝐨𝐭𝐚𝐭𝐢𝐨𝐧 است. در این نسخه متدهای جدید Parse و TryParse t برای ایجاد یک شبکه IP اضافه شده است.
@fullStackDevs
708
#Net8
#DotNet8
ویژگی های جدید دات نت 8 : آنچه باید در مورد این ویژگی ها بدانید.
✏️ لینک مطلب
@fullStackDevs
708
#SemanticKernel
#Semantic_Kernel
سی شارپ (C#) و Python Copilot خود را بسازید و آنها را بهتر از ChatGPT با GPT4 بسازید :).
معرفی Semantic Kernel — یک پروژه منبع باز جدید که به توسعه دهندگان کمک می کند تا LLM های پیشرفته را به راحتی در برنامه های خود ادغام کنند: لینک
در واقع Semantic Kernel یک SDK سبک و منبع باز است که به شما کمک می کند از زبان طبیعی و کد بومی (natural language and native code) برای ساخت برنامه های مبتنی بر هوش مصنوعی با چهار کامپوننت استفاده کنید:
Skills،
Memories/Embeddings،
Connectors ,
Planner.
با OpenAI و Azure OpenAI Services کار می کند و از C# با پشتیبانی از پیش نمایش پایتون پشتیبانی می کند.
در اینجا بیشتر بیاموزید.
@fullStackDevs
708
Repost from Web Devs
#Caching
کشینگ (Caching) چیست؟
از جمله مواردی که استفاده درست و بجا از آن به طور قابل ملاحظه ای باعث افزایش کارایی برنامه میشود Caching میباشد.درواقع Caching مکانیزمی است که داده ها را ذخیره میکند تا درخواست های آینده برای آن داده ها سریعتر انجام شود و نتیجه به کلاینت زودتر بازگشت داده شود.داده های ذخیره شده می تواند نتیجه محاسبات قبلی یا کپی ای از داده های دیگر در جای دیگری باشد.این کار برای جلوگیری از محاسبات تکراری و یا کاهش درخواست ها به دیتابیس،برای داده هایی که امکان تغییر مداوم آنها کم است و همچنین هزینه محاسبه و یا ساخت دوباره آن زیاد است، صورت میگیرد.
خوشبخانه AspNetCore از روش های مختلف Caching پشتیبانی میکند.
از جمله این روش ها به Cache In Memory و Distributed Cache می توان اشاره کرد.
روش Cache In Memory از حافظه رم سرور برای ذخیره داده های کش شده استفاده میکند. این نوع Cache متناسب برای یک سرور است و برای استفاده از این روش زمانی که چند سرور دارید از ویژگی یا تکنینک Sticky session ( که به معنی درخواست های کلاینت به همان سروری که داده ها را Cache کرده برای پردازش Route میشوند) استفاده کرد.
از روش Distributed Cache برای share کردن داده های کش شده بین چندین سرور استفاده میشود. معمولا داده ها در یک سرور خارجی نگه داشته میشوند و دیگر سرور ها به آن دسترسی دارند.
محل قرا گیری عملیات Caching در معماری پروژه هایمان کجاست؟
معماری رایج در بین وب اپلیکیشن ها غالبا یک معماری تمیز (Clean Architecture) میباشد . و ما در این پست به قرار دادن عملیات مربوط به caching در چنین معماری هایی میپردازیم.
در این قبیل معماری ها براساس اصول طراحی و قوائد تعیین شده در DDD اپلیکیشن به لایه هایی تقسیم میشود و به ترتیب داخلی ترین لایه که Domain layer میباشد و کمترین وابستگی را به یک Dll خارجی دارد و هرچه به لایه های بالاتر میرویم وابستگی لایه ها به یکدیگر بیشتر میشود. از ویژگی های یک معماری خوب Loose Coupling در بین لایه ها میباشد یعنی وابستگی لایه ها به یکدیگر را بقدری کاهش داد که با تغییر یک لایه خللی در کار دیگر لایه ها صورت نگیرد. البته در این تعریف منظور از کاهش وابستگی یعنی کاهش وابستگی در زمان Compile time.
در یک Clean Architecture یا به عبارتی در یک Clean DDD Architecture معمولا لایه های بدین شکل خواهند بود :
1 - Domain|Core layer
2 - Services | Application Layer
3 - Infrastructure Layer
4 - UI Layer
در لایه Domain اپلیکیشن Entitiy ها و Contract ها(interface) های قرار میگیرد و در لایه Infrastructure معمولا پیاده سازی دسترسی به داده ها و دیگر سرویس ها خارجی مانند FileLogger و SmtpNotifier میباشد.این لایه امکان دسترسی و ذخیره سازی دائمی داده ها را ممکن میسازد،همچنین اطلاعات موجود Domain Entity ها در دیتابیس یا هر store دیگری به صورت دائمی در این لایه برای ذخیره، پیاده سازی میشود.از سوی دیگر ریپازیتوری های ما در این لایه پیاده سازی میشوند.(ریپازیتوری محلی است که امکان دسترسی یه اینتیتی ها و valueObject ها را فراهم میکند).
برای پیدا کردن محل درست caching باید با وظیفه یک عامل دیگر اشنا باشیم.
Repository pattern
الگوی طراحی ریپازیتوری یک روش برای انتزاعی کردن دسترسی به داده ها به جای استفاده Concrete شده از آنها میباشد.
از جمله دلیل استفاده از این الگو جلوگیری از دوباره نویسی Query ها و همچنین امکان تغییر دیتابیس یا ORM اپلیکیشن را میتوان بر شمرد.
همانطور که گفتیم ریپازیتوری راه دسترسی ما به داده هاست ، این داده ها ممکن از از دیتابیس واکشی شوند یا اینکه از Cache خوانده شوند و از آنجایی که پیاده سازی الگوی Repository در لایه Infrastructure صورت میگیرد پس در نتیجه لایه قرارگیری caching نیز در همین لایه و در ریپازیتوری میباشد .
اما پیاده سازی caching در داخل خود ریپازیتوری چند مشکل اساسی دارد، مشکل، عدم تست پذیری و نقض اصل اول Solid یعنی Single responsibility میباشد.
برای حل این مشکل یک الگوی طراحی Structural به کمک ما می آید و با پیاده سازی آن این مشکل را حل میکنیم.
در این قسمت به بررسی یک سری از مسائل پایه پرداختیم و در قسمت بعدی این پست به طریقه پیاده سازی آن خواهیم پرداخت.
@fullStackDevs
708
𝗥𝗲𝗰𝗼𝗺𝗺𝗲𝗻𝗱𝗲𝗱 𝗹𝗲𝗮𝗿𝗻𝗶𝗻𝗴 𝗿𝗲𝘀𝗼𝘂𝗿𝗰𝗲𝘀 𝗳𝗼𝗿 𝗖# 𝗮𝗻𝗱 .𝗡𝗘𝗧 𝗶𝗻 𝟮𝟬𝟮𝟮.
In the recent Stack Overflow Developer Survey 2022. .NET is marked as the most popular library, while ASP.NET is in the top 4 Web frameworks used by developers. If you want to become a full-stack or back-end developer in the Microsoft .NET stack or you want to improve your knowledge, it's not easy to find the right resources. Here is the list of curated resources that you can use:
𝟭. 𝗟𝗲𝗮𝗿𝗻 𝗖#
📝 Microsoft Learn C#: https://lnkd.in/eVdEzvBd
📝 Microsoft C# Fundamentals for Absolute Beginners: https://lnkd.in/e7iC2UUc
📝 Microsoft C# 101: https://lnkd.in/g42jb9bx
📝 Udemy C# for Beginners - Coding From Scratch (.NET Core): https://lnkd.in/eGbiBwq2
📝 C# Basics for Beginners: Learn C# Fundamentals by Coding: https://lnkd.in/ewmfFUdC
𝟮. 𝗟𝗲𝗮𝗿𝗻 .𝗡𝗘𝗧
📝 Learn.NET official Microsoft tutorials: https://lnkd.in/eYp4qNNN
📝 Become a Full-stack .NET Developer - Advanced Topics: https://lnkd.in/efVFFDJK
𝟯. 𝗟𝗲𝗮𝗿𝗻 𝗔𝗦𝗣.𝗡𝗘𝗧
📽 ASP.NET Core Fundamentals by Scott Alen: https://lnkd.in/e-fFq6Xt
📽 ASP.NET MVC 5 Fundamentals by Scott Alen: https://lnkd.in/esKxs8U3
👩🏫 Advanced ASP.NET Core 3.1 MVC: https://lnkd.in/e__kZ8Bg
📚 Pro ASP.NET Core 3: https://lnkd.in/eZSCwx4K
𝟰. 𝗕𝗼𝗼𝗸𝘀
📚 Learn C# in One Day and Lear it Well (the best for beginners): https://lnkd.in/dF9yxyCb
📚 C# in Depth: Fourth Edition (the best for intermediate): https://lnkd.in/eAJHZWWB
📚 Concurrency in C# Cookbook (the best for advanced): https://lnkd.in/dG4rgmyw
📚 The C# Yellow Book (the best book overall): https://lnkd.in/ePV_-U8e
𝟱. 𝗬𝗼𝘂𝗧𝘂𝗯𝗲 𝗖𝗵𝗮𝗻𝗻𝗲𝗹𝘀
📽 IAmTimCorey: https://lnkd.in/extYhz2k
📽 Programming with Mosh: https://lnkd.in/ezTTaz7g
📽 Nick Chapsas: https://lnkd.in/eS_ey2mB
📽 Milan Jovanovic: https://lnkd.in/dCQXDP4t
📽 Zoran Horvat: https://lnkd.in/dBYY4d-R
📝 Other .NET content creators by country: https://lnkd.in/duNXk5Z7
𝟲. 𝗟𝗲𝗮𝗿𝗻 𝗴𝗼𝗼𝗱 𝗽𝗿𝗮𝗰𝘁𝗶𝗰𝗲𝘀
📝 Clean code: https://lnkd.in/eSVMGGXh
📝 Code Complete, 2nd Edition (a must-read for any developer and/or architect): https://lnkd.in/e2Yuzjem
📝 Design Patterns: https://lnkd.in/edVcd_WX
📝 SOLID Principles of OO Design: https://lnkd.in/eerMF84K
📝 Advanced Unit Testing: https://lnkd.in/eMf584xC
📝 Refactoring Fundamentals: https://lnkd.in/exZxPWhZ by Steve Smith
𝟳. 𝗔𝗱𝗱𝗶𝘁𝗶𝗼𝗻𝗮𝗹 𝗺𝗮𝘁𝗲𝗿𝗶𝗮𝗹𝘀
📝 Roadmap for ASP.NET Core Developers in 2022: https://lnkd.in/d8zRRKyU
📝 Collection of Awesome .NET Librariers, tools, frameworks and software: https://lnkd.in/e3ESib7
📝 .NET Architecture: https://lnkd.in/dyjwyRf5https://media.licdn.com/dms/image/C4D22AQGEk_ws32sk4w/feedshare-shrink_2048_1536/0/1671005562030?e=1674691200&v=beta&t=trLTiIAaRcGiIIa62IVXb7N_ek9B_egiJaH9XOsvscM
708
Repost from Web Devs
#gRPC
🔸 یک بررسی ساده و مفید از پروتکل gRPC
برای اینکه بدانیم gRPC چیست ابتدا باید با rpc و Protocol Buffers اشنایی داشته باشیم .
1️⃣ RPC
مخفف Remote Procedure Call می باشد و همچنین به عنوان subroutine call و function call نیز شناخته میشود.
در واقع RPC پروتکلی هست که یک برنامه می تواند با استفاده از ان به یک برنامه که در کامپیوتری دیگر واقع شده است بدون اینکه اطلاعاتی در مورد شبکه داشته باشد درخواست ارسال کند.
از این پروتکل در شبکه های client-server استفاده میشود.
یک درخواست RPC یک عملیات synchronous است و برنامه درخواست دهنده تا زمانی که سرور درخواستش را پردازش و نتیجه را بازگرداند منتظر مانده و block میشود.
2️⃣ Protocol Buffers
پروتکل بافر که protobuf هم گفته میشود یک روش سریالیزه کردن اطلاعات است که توسط گوگل برای استفاده داخلی توسعه یافته بود که بعداً برای استفاده عموم منتشر شد. از این روش برای برقرار کردن ارتباطات بین برنامهها توسط سیم یا ذخیره کردن اطلاعات استفاده میشود. این روش شامل یک زبان توصیف میانی و یک کامپایلر که کدهای مختلف برای زبانهای برنامهنویسی مختلف از این زبان توصیف میانی تولید میکند، است.
در ابتدای ارائه توسط "گوگل"، کامپایلر آن فقط برای زبانهای C++، جاوا و پایتون، کد تولید میکرد ولی توسط اشخاص ثالث، برای خیل بیشتر زبانهای دیگر هم ابزارهایی ارائه شده است.
❇️ grpc
حال که با این مفاهیم اشنا شدیم نوبت به gRPC میرسد.gRPC یک پروتکلی است که هر دوی این ها را پیاده ساری کرده و ویژگی اصلی ان این است که زبان های برنامه نویسی زیادی را پشتیبانی میکند. و اپلیکیشن ها براساس معماری TCP client-server با این پروتکل با هم ارتباط برقرار میکنند.
این به این معنی است که سرور endpoint های مشخصی را تعریف میکند که توسط هر client ای که قادر است از طریق TCP protocol با سرور ارتباط برقرار کند صدا زده میشود و شما میتوانید همانند REST به این endpoint ها فک کنید و رابط هایی برای سرور برای کار کردن با انها فراهم بیاورید.
پروتکل های زیادی هستند که چنین امکانات و ارتباطاتی را ممکن میسازند اما gRPC ویزگی هایی را به ارمغان می اورد که دیگر پروتکل ها ندارند.
1. این پروتکل در داخل گوگل استفاده میشود پس مراحل تست های خود را دیگر گذرانده است.
2. از انجایی که پیام ها به صورت باینری تبادل میشوند بنابراین به پهنای باند کمتر نسبت به جیسون و ایکس ام ال دارید.
3. جی آر سی پی بسیار پرطرفدار است و لایبری های زیادی برای تعداد زیادی زبان برنامه نویسی وجود دارد تا از آن استفاده کنید.
4. محبوبیت زیاد مستندات خوب و همچنین انجمن هایی را به وجود می اورد که شما را میتواند در کار کردن با ان کمک کند.
@fullStackDevs
708
Repost from Web Devs
#exploring
#static
#Readonly
✳️Const vs Readonly Static
🔹Const
▫️متغیرهایی که به صورت Constant تعریف میشوند باید در هنگام تعریفشان مقدار دهی شوند و دیگر در طی طول عمر برنامه قابل تغییر نیستند. تنها type های داخلی سی شارپ را میتوان به
صورت Constant تعریف کرد. به استثنای (system.object).
تایپ های تعریف شده توسط کاربر شامل کلاس ها،struct ها و یا آرایه ها ، نمیتوانند به صورت Const تعریف شوند.
همچنین سی شارپ از متدها و پراپرتی ها و ایونت ها به صورت Const پشتیبانی نمیکند.
▪️مقادیر در متغیر های Const در
زمان compile-time شناخته و صدا زده میشوند.
▫️از Const زمانی استفاده کنید که مطمئن هستید مقدار یک متغیر در طی طول عمر اپلیکیشن تغییر نخواهد کرد.
هر متغیری که به صورت Const تعریف میشود به صورت غیر صریح static نیز تعریف خواهد شد.
▫️زمانی که کامپایلر با یک
متغیر Const مواجه میشود، مقدار آنرا مستقیما در کد IL تولید شده جایگزین میکند.
🔹Static
▫️یک عضو Static مانند : متغیرها ،متد ها و ... به Type شی تعلق دارند و از طریق نام Type در دسترس خواهد بود.
🔹ReadOnly
▫️یک فیلد ReadOnly در
زمان run-time مقدار آن ارزیابی میشود.به یک فیلد ReadOnly فقط در زمان تعریف و یا در متد سازنده کلاس دربردارنده آن میتوانید مقدار اختصاص دهید.در نتیجه این را میتوان استنباط کرد که می توان برای یک
فیلد ReadOnly در متدهای سازنده مختلف مقادیر متفاوت اختصاص داد.
🔸از اختصاص دادن مقادیر به یک فیلد Readonly برای value type ها
و reference type ها در متد سازنده چند نتیجه میتوان گرفت :
🔻در valueType ها از آنجایی که مستقیما شامل مقادیر خود هستند اگر یک فیلد به صورت ReadOnly تعریف شود immutable نیز خواهد بود.
🔻در referenceType ها که یک رفرنس به داده های خود هستند اگر یک
فیلد refrenceType
بصورت ReadOnly تعریف شود، همیشه باید به یک شی یکسان و از همان نوع اشاره کند و همچنین ReadOnly تعریف کردن آنها باعث جلوگیری از تغییر مقادیر فیلد های آن شی نمیشود.
▪️با این تعاریف به سوال اصلی خود باز میگردیم❕
❇️const vs static readonly
🔹اول از همه باید بدانیم که ویژگی های یک متغیر static readonly چیست⁉️
🔻در جایی غیر از متد سازنده static و یا در هنگام تعریف آن نمیتوانید به آن مقدار اختصاص دهید.(به خاطر readonly بودن آن)
🔻از طریق نام کلاس به آن دسترسی دارید (به خاطر static بودن آن)
🔹با این وجود در نگاه اول یک
متغیر static readonly به یک
متغیر const بسیار شبیه است زیرا یک constant فقط در هنگام تعریف می تواند مقدار بگیرد و در هیچ جای دیگری از کد مقدار آن نمیتواند تغییر کند اما تفاوت در جزئیات نهفته است.
اول از همه بدانید که یک متغیر const به جیزی ارجاع نمیکند (reference) و استفاده ار آن
به معنای hard code کردن مقدار آن میباشد .
✳️ علاوه بر اینها یک تفاوت کلیدی وجود دارد که باید از آن آگاه باشیم .همانطور که پیش تر گفتیم مقادیر یک متغیر const در کد IL جایگرین میشوند.
⚠️ اگر یک متغیر const در اسمبلی A وجود داشته باشد و اسمبلی B از اسمبلی A استفاده کند . اگر یک مقدار جدید به متغیر const موجود در اسمبلی A دهید و دوباره این اسمبلی را recompile کنید و تا زمانی که اسمبلی B را recompile نکرده اید، از همان مقدار قبلی hard code شده برای متغیر const موجود در اسمبلی A استفاده میکند.
خلاصه
🔻متغیرهای static readonly فقط میتوانند در لحظه تعریف شدن یا در متد سازنده static تغییر کنند.
🔻اگر مطمئن هستید و میدانید که مقدار یک متغیر تغییر نمیکند
از const استفاده کنید.
🔻اگر مطمئن نیستید که مقدار یک متغیر تغییر میکند یا خیر و نمیخواهید کلاس دیگری مقدار آنرا تغییر دهد
از read only استفاده کنید.
🔻متغیر های const به صورت غیر صریح static هستند.
🔻اگر میخواهید از طریق نام type به یک عضو آن دسترسی داشته باشید از static استفاده کنید.
منابع 🔍
1 - 2 -3 - 4 - 5 - 6
@FullStackDevs
708
#StringBuilder
⁉️ از " +" در حلقه های الحاق رشته ها استفاده نکنید!
1️⃣ در سی شارپ string بصورت immutable پیاده سازی شده است.(وقتی شما یک متغیر string تعریف و مقداردهی می کنید، دیگر نمی توانید آنرا تغییر دهید)
2️⃣ رشته ها بصورت یک آرایه از کاراکترها ذخیره میشوند که با هم کنار قرار گرفتن این کاراکترها، متن مورد نظر شکل می گیرد ( هنگام تعریف آرایه ها باید طول آرایه مشخص شود و بعد از تعریف آن، طول آرایه قابل اضافه و کم کردن نیست)
3️⃣ هنگاهی که مقدار string را میخواهید تغییر دهید، و از طرفی چون مقدار قبلی که یک آرایه از کاراکترها است و قابل تغییر نیست، بنابراین مقدار جدید را در یک آرایه جدید کپی می کند و با این کار یک بلوک جدید از خانه های حافظه را به آن اختصاص داده می دهد.
با انجام چندین بار اصلاح یک رشته موجود باعث می شود تخصیص چندگانه حافظه بر عملکرد تأثیر بگذارد.
✅راه حل استفاده از StringBuilder است که یک کلاس رشته mutable است .
این StringBuilder بعد از تغییر یک شیء جدید در حافظه ایجاد نمی کند بلکه dynamically memory برای قرار دادن رشته اصلاح شده ، تخصیص داده میشود.
@fullStackDevs
708
#استخدام
اگه عاشق کار و یادگیری هستی و به C# به خوبی تسلط داری و آشنایی خوبی هم با .Net core داری
جای خالیت تو وایرال تک حس میشه.. 🙂
وایرال تیم جاییه که پروژه های برنامه نویسی رو انجام میدن و تمرکز زیادی روی پروژه های کریپوکارنسی و ارز دیجیتال داریم(اگه ارز دیجیتال و بلاکچین هم میشناسی ما بیشتر دوست داریم 😉)
✉️ ارسال رزومه به :
hire@viral-team.com
#شغل #استخدام #موقعیت_شغلی #فرانت_اند #دولوپر #استخدام_برنامه_نویس #فرصت_شغلی
@fullStackDevs
