درود دوستان عزیز ❤️🙂
انشاءالله که همیشه سلامت و شاد باشید.
به امید روزهای بهتر
انشاءالله که همیشه سلامت و شاد باشید.
به امید روزهای بهتر
❤7
#استخدام
استخدام Backend .NET Developer در ایرانخودرو
📍 محل کار: تهران -جاده مخصوص
🕰 نوع همکاری: تماموقت (حضوری)
🔹 مهارتهای مورد نیاز:
✅تسلط به Git
✅ تسلط به hashtag#C
✅تجربه کار با EF
✅ حداقل ۳ سال کار مرتبط
✅ تسلط به Asp .Net Core
✅تجربه در طراحی و پیادهسازی API
✅تجربه کار به پایگاهداده SQL Server
✅آشنایی به Design Patternها و Software Architecture
موارد زیر مزیت محسوب میشوند:
➕آشنایی با React.js
➕آشنایی با Api Gateway
➕آشنایی با Microservices
➕ آشنایی با ابزارهای Logging
➕ آشنایی با Docker و مفاهیم DevOps
➕ تجربه کار در طراحی پروژههای زیرساختی و معماریمحور
اگر به این موقعیت علاقهمند هستید رزومه خودتون رو با عنوان Backend .NET Developer به آدرس زیر ارسال کنید:
[email protected]
استخدام Backend .NET Developer در ایرانخودرو
📍 محل کار: تهران -جاده مخصوص
🕰 نوع همکاری: تماموقت (حضوری)
🔹 مهارتهای مورد نیاز:
✅تسلط به Git
✅ تسلط به hashtag#C
✅تجربه کار با EF
✅ حداقل ۳ سال کار مرتبط
✅ تسلط به Asp .Net Core
✅تجربه در طراحی و پیادهسازی API
✅تجربه کار به پایگاهداده SQL Server
✅آشنایی به Design Patternها و Software Architecture
موارد زیر مزیت محسوب میشوند:
➕آشنایی با React.js
➕آشنایی با Api Gateway
➕آشنایی با Microservices
➕ آشنایی با ابزارهای Logging
➕ آشنایی با Docker و مفاهیم DevOps
➕ تجربه کار در طراحی پروژههای زیرساختی و معماریمحور
اگر به این موقعیت علاقهمند هستید رزومه خودتون رو با عنوان Backend .NET Developer به آدرس زیر ارسال کنید:
[email protected]
👍4❤2
شاید Substring داره نرمافزارت رو کند میکنه و خبر نداری!
همیشه فکر میکردم وقتی مینویسم
text.Substring(0, 5)
دارم یه تیکه از متن رو میخونم. اما تازه فهمیدم پشت پرده چه خبره!
مشکل اینجاست که Substring نمیره اون تیکه رو بخونه؛ بلکه میره یه فضای جدید تو حافظه RAM میگیره و کاراکترها رو اونجا کپی میکنه. برای یه متن کوتاه شاید مهم نباشه، اما تو مقیاس بالا یعنی فشار الکی به Garbage Collector و کندی سیستم.
راهحل چیه؟ Span<T>
امروز توی مسیر یادگیریم با Span آشنا شدم که بازیش کلاً فرق داره.
اگه بخوام ساده بگم:
❌ء Substring: مثل اینه که از یه صفحه کتاب فتوکپی بگیری تا فقط پاراگراف اولش رو بخونی. هزینه کاغذ و جوهر
✅ء Span: مثل اینه که با انگشتت به پاراگراف اول توی همون کتاب اصلی اشاره کنی. هزینه صفر!
با استفاده از AsSpan، تخصیص حافظه (Allocation) به صفر میرسه و سرعت پردازش چندین برابر میشه.
پ.ن: برنامهنویسی فقط کد زدن نیست؛ درکِ رفتارِ کد با سختافزار شما چقدر تو پروژههاتون درگیر بهینهسازی حافظه میشید؟ تا حالا از Span استفاده کردید؟
همیشه فکر میکردم وقتی مینویسم
text.Substring(0, 5)
دارم یه تیکه از متن رو میخونم. اما تازه فهمیدم پشت پرده چه خبره!
مشکل اینجاست که Substring نمیره اون تیکه رو بخونه؛ بلکه میره یه فضای جدید تو حافظه RAM میگیره و کاراکترها رو اونجا کپی میکنه. برای یه متن کوتاه شاید مهم نباشه، اما تو مقیاس بالا یعنی فشار الکی به Garbage Collector و کندی سیستم.
راهحل چیه؟ Span<T>
امروز توی مسیر یادگیریم با Span آشنا شدم که بازیش کلاً فرق داره.
اگه بخوام ساده بگم:
❌ء Substring: مثل اینه که از یه صفحه کتاب فتوکپی بگیری تا فقط پاراگراف اولش رو بخونی. هزینه کاغذ و جوهر
✅ء Span: مثل اینه که با انگشتت به پاراگراف اول توی همون کتاب اصلی اشاره کنی. هزینه صفر!
با استفاده از AsSpan، تخصیص حافظه (Allocation) به صفر میرسه و سرعت پردازش چندین برابر میشه.
پ.ن: برنامهنویسی فقط کد زدن نیست؛ درکِ رفتارِ کد با سختافزار شما چقدر تو پروژههاتون درگیر بهینهسازی حافظه میشید؟ تا حالا از Span استفاده کردید؟
👍7❤1
متاسفانه موج شدیدی از تعدیل نیرو در شرکت ها در راهه
لطفاً آگهی هایی که میذارم رو به اشتراک بذارین تا دیده بشن ❤️
لطفاً آگهی هایی که میذارم رو به اشتراک بذارین تا دیده بشن ❤️
1❤4👍2
#استخدام
ارسال رزومه [email protected]
ما در شرکت سپید سیستم به دنبال یک کارشناس ارشد استقرار و پشتیبانی فنی هستیم که توانایی کار با سیستمهای مبتنی بر .NET، معماری Microservice و زیرساختهای ویندوزی را داشته باشد و بتواند در محیطهای عملیاتی (Production) بهصورت مؤثر پشتیبانی ارائه دهد.
مهارتها و الزامات فنی
تسلط کامل به IIS (Deployment، Configuration، Troubleshooting)
آشنایی و تجربه عملی با Microservice Architecture
تسلط به SQL Server
مهارت بالا در T-SQL (Query، Performance Tuning، Debug)
آشنایی مناسب با مفاهیم Network
(TCP/IP، Port، Firewall، Load Balancer، DNS)
تجربه استقرار و پشتیبانی سیستمهای تحت وب
توانایی عیبیابی و حل مشکلات در محیط عملیاتی (Production)
آشنایی با لاگها، مانیتورینگ و Root Cause Analysis
مزیت محسوب میشود
آشنایی با CI/CD
تجربه کار با Docker یا Containerها
آشنایی با مفاهیم Security و Hardening
سابقه کار در پروژههای Enterprise یا پرترافیک
ویژگیهای فردی
مسئولیتپذیر و دقیق
توانایی کار تیمی و ارتباط مؤثر با تیم فنی و مشتری
توانایی مدیریت همزمان چند Issue
روحیه یادگیری و حل مسئله
نوع همکاری
تماموقت (در صورت نیاز: امکان شیفت / On-call)
مزایا
حقوق و مزایای رقابتی
محیط کاری فنی و چالشی
امکان رشد و یادگیری
ثبات شغلی
ارسال رزومه [email protected]
👍4
#استخدام
09352194873
[email protected]
موقعیت شغلی توسعه دهنده وب (FullStack)
ما در شرکت سرزمین خرید(دیلی مارکت) در حوزه Retail به دنبال جذب توسعه دهنده وب (FullStack) هستیم.
این مجموعه با استفاده از تحلیل و طراحی مستندات Business requirements را آماده پیاده سازی کرده است .
روش همکاری بصورت پروژه ای و در قالب نفر/ساعت برنامه ریزی شده , بصورت دورکاری می باشد .
تسلط کامل بر ASP.NET Core Web API تجربه عمیق با Entity Framework Core و مدیریت پایگاه داده و Postgre Sql , MS SQL
دانش کار قوی و تجربه عملی با الگوهای طراحی (Design Patterns) شامل Repository، Unit of Work و CQRS
تسلط بر سیستم کنترل نسخه Git
تجربه کار عملی با سیستم های Caching مانندRedis
تجربه کار با Message Brokering ها مانند RabbitMQ
توانایی نوشتن کوئریهای پیچیده و بهینه سازی شده در SQL
تجربه کار با مفاهیم JWT Authentication و Identity Server
دارای روحیه کار تیمی و توانایی همکاری مؤثر
مسئولیت پذیر، دقیق و متعهد به ارائه کد با کیفیت بالا همراه با مستندات
مدیریت زمان و توانایی تحویل وظایف در زمانبندی مشخص
آشنایی با اصول Clean Architecture , Microservice
تجربه کار با Real-Time Applications و فناوریهایی مانند SignalR
تسلط بر Unit Testing و چارچوبهای مرتبط (مانند xUnit/NUnit)
داشتن حداقل مدرک تحصیلی کارشناسی مرتبط (مهندسی نرم افزار، IT) مزیت محسوب میگردد.
09352194873
[email protected]
❤3
#استخدام
[email protected]
سلام و احترام خدمت همه دوستان عزیز
اگر بهتازگی به دلیل تعدیل نیرو یا هر دلیل دیگری شغل خود را از دست دادهاید، ما ( گروه برنامه نویسان ) با آغوش باز آماده بررسی رزومههای شما هستیم.
باور داریم نیروی متخصص و باانگیزه ارزشمندترین سرمایه هر مجموعه است و جایگزینی افراد توانمند، هزینه و زمان بسیار بیشتری خواهد داشت.
با افتخار اعلام میکنیم که برای همکاری با نیروهای حرفهای و باتجربه در حوزههای مختلف برنامهنویسی آمادهایم.
امکان همکاری حضوری و کاملاً ریموت فراهم است.
مدل پرداخت نیز ساعتی یا ماهانه بوده و همراه با بیمه و مزایا، بر اساس رزومه، تجربه و توافق طرفین تعیین میشود.
شرایط همکاری:
- حداقل ۱ سال سابقه کار مرتبط
- ارائه نمونهکار معتبر
- تعهد، مسئولیتپذیری و توانایی کار تیمی
بخش قابلتوجهی از پروژههای ما بینالمللی است و در تمامی زبانها و تخصصهای برنامهنویسی به همکاران توانمند نیاز داریم.
لطفاً رزومه خود را به ایمیل زیر ارسال کنید. پس از بررسی، همکاران ما با شما تماس خواهند گرفت و پاسخگوی تمام پرسشهای شما خواهند بود.
[email protected]
❤3
#استخدام
https://www.linkedin.com/in/roozbeh-maheronnaghsh/
استخدام Senior .NET Developer
ما بهدنبال چند برنامهنویس حرفهای و باانگیزهی .NET هستیم که علاقه مند به سیستمهای مقیاسپذیر و enterprise-grade باشه و از چالشهای فنی واقعی لذت ببره.
مسئولیتها:
طراحی، توسعه و نگهداری سیستمهای بزرگ، امن و مقیاسپذیر با ASP.NET Core و .NET 6/7/8
طراحی و پیادهسازی Microservices و معماریهای Service-Oriented
توسعه APIهای پرکارایی RESTful و gRPC
پیادهسازی ارتباطات async با RabbitMQ
طراحی caching توزیعشده با Redis
نوشتن کد تمیز، قابل نگهداری و تستپذیر (Unit / Integration / E2E)
بهبود و نگهداری CI/CD (Azure DevOps / Jenkins)
مانیتورینگ، بهینهسازی عملکرد و observability با Application Insights، OpenTelemetry و ELK
همکاری نزدیک با تیمهای Product، DevOps و QA در محیط Agile/Scrum
مهارتهای فنی موردنیاز:
تسلط کامل به C# و .NET Core
(async/await، LINQ، performance tuning، memory management)
تجربه قوی با SQL Server و ORMها (EF Core، Dapper)
تجربه عملی طراحی و پیادهسازی Microservices
درک عمیق از مفاهیم مهندسی نرمافزار، design patternها و ساختار داده
تعهد بالا به کیفیت کد و تجربه جدی در Automated Testing (xUnit، NUnit، Moq)
اگر فکر میکنی این چالش برای تو ساخته شده خوشحال میشم رزومه ت رو داشته باشم.
https://www.linkedin.com/in/roozbeh-maheronnaghsh/
👍3
#جذب
https://www.linkedin.com/in/narjes-esmaeili/
من یک برنامهنویس ASP.NET هستم و در حال حاضر به دنبال فرصت شغلی دورکاری (Remote) میباشم.
🔹 تکنولوژیها و مهارتها:
ASP.NET Core
MVC , WebForm
معماریهای Clean Architecture ، Onion
Design Pattern ها: Unit of Work
SQL Server
اتوماسیونسازی فرآیندها با n8n
🔹 نمونهکارها:
www.dfzco.com
www.laklakbook.com
www.nezaz.com
و سایر پروژهها
اگر به دنبال همکاری با فردی متعهد، مسئولیتپذیر و علاقهمند به کدنویسی تمیز و اصولی هستید، خوشحال میشوم در ارتباط باشیم 🤝
📩 برای ارتباط، پیام دهید.
https://www.linkedin.com/in/narjes-esmaeili/
❤3
#جذب
https://www.linkedin.com/in/hussein-nm/
سلام ✋
استک من NET. هست و
در این زمینه 10سال تجربه همکاری دارم و
اگر پوزیشن hashtag#ریموت (یا تقریبا ریموت😉) بود لطفا بهم اطلاع بدید🙏🙏
https://www.linkedin.com/in/hussein-nm/
👍3
#جذب
https://www.linkedin.com/in/sorosh-majdeddin-886a5a135/
من توسعهدهنده Backend با تخصص .NET و C# هستم و سابقه کار حرفهای با معماری Microservices را دارم.
در پروژههای مختلف با SQL Server، Azure Cosmos DB و سرویسهای Microsoft Azure کار کردهام و با مفاهیمی مانند DDD (Domain-Driven Design) و TDD (Test-Driven Development) بهصورت عملی تجربه دارم.
متأسفانه به دلیل قطعی اینترنت حدود یک ماهه، همکاری من با یک شرکت خارجی متوقف شد و ناچار شدم آن موقعیت شغلی را از دست بدهم.
در حال حاضر بهصورت فعال به دنبال یک موقعیت شغلی دورکاری هستم و خوشحال میشوم در صورت وجود فرصت مناسب، با شما در ارتباط باشم.
https://www.linkedin.com/in/sorosh-majdeddin-886a5a135/
👍3
وقتی Span کم میاره! (خداحافظی با ارورهای عجیب Async)
توی پست قبلی دیدیم که Span<T> چقدر سریعه، چون دادهها رو کپی نمیکنه. اما به محض اینکه خواستم توی یه متد Async (مثلاً موقع دانلود فایل یا دیتابیس) ازش استفاده کنم، کامپایلر کوبید تو صورتم!
ارور معروف: Span cannot be used in async methods.
چرا؟
چون Span روی Stack زندگی میکنه (حافظه موقت و سریع). وقتی شما await میکنید، کانتکست عوض میشه و Span گم میشه. نمیتونی اون رو توی کلاس ذخیره کنی یا منتظر بمونی.
💡 قهرمان داستان: Memory<T>
اینجاست که داتنت Memory<T> رو معرفی کرده.
اگه Span مثل یه یادداشت روی دستت باشه (سریع ولی موقت)، Memory مثل یه دفترچه یادداشت واقعیه.
✅ تفاوت کلیدی:
۱.ء Span: فقط برای پردازش همگام (Sync) و لحظهای.عمر کوتاه
۲.ء Memory: برای ذخیرهسازی در کلاسها و عملیات ناهمگام (Async).عمر طولانی
فرمول طلایی مایکروسافت:
هر وقت داده رو لازم دارید ولی نمیدونید کِی کارش تموم میشه (مثل Task)، از Memory استفاده کنید. هر وقت خواستید پردازشش کنید، ازش یه .Span بگیرید و با سرعت نور کار کنید!
شما تو پروژههای سنگین، چطور دادههای حجیم رو بین متدهای Async پاس میدید؟
توی پست قبلی دیدیم که Span<T> چقدر سریعه، چون دادهها رو کپی نمیکنه. اما به محض اینکه خواستم توی یه متد Async (مثلاً موقع دانلود فایل یا دیتابیس) ازش استفاده کنم، کامپایلر کوبید تو صورتم!
ارور معروف: Span cannot be used in async methods.
چرا؟
چون Span روی Stack زندگی میکنه (حافظه موقت و سریع). وقتی شما await میکنید، کانتکست عوض میشه و Span گم میشه. نمیتونی اون رو توی کلاس ذخیره کنی یا منتظر بمونی.
💡 قهرمان داستان: Memory<T>
اینجاست که داتنت Memory<T> رو معرفی کرده.
اگه Span مثل یه یادداشت روی دستت باشه (سریع ولی موقت)، Memory مثل یه دفترچه یادداشت واقعیه.
✅ تفاوت کلیدی:
۱.ء Span: فقط برای پردازش همگام (Sync) و لحظهای.عمر کوتاه
۲.ء Memory: برای ذخیرهسازی در کلاسها و عملیات ناهمگام (Async).عمر طولانی
فرمول طلایی مایکروسافت:
هر وقت داده رو لازم دارید ولی نمیدونید کِی کارش تموم میشه (مثل Task)، از Memory استفاده کنید. هر وقت خواستید پردازشش کنید، ازش یه .Span بگیرید و با سرعت نور کار کنید!
شما تو پروژههای سنگین، چطور دادههای حجیم رو بین متدهای Async پاس میدید؟
👍4👏1
#استخدام
استخدام برنامهنویس Back-End (.NET Core / Microservices)
شرح موقعیت شغلی:
ما در شرکت ایز ایران (کنسرسیون متمایز) به منظور توسعه و نگهداری سامانههای مبتنی بر معماری مایکروسرویس و تکنولوژیهای روز، از برنامهنویسان Back-End توانمند و علاقهمند به کار در پروژههای مقیاسپذیر دعوت به همکاری میشود.
شرایط و مهارتهای مورد نیاز:
حداقل ۳ سال تجربه کاری مرتبط
تسلط به .NET Core
تسلط به SQL و طراحی پایگاه داده
تجربه کار با Dapper و EF Core
آشنایی با RabbitMQ
تجربه کار با Redis
تجربه کار با Docker و مفاهیم Containerization
تسلط به Git
آشنایی با مفاهیم CI/CD
درک مناسب از معماری Microservices
نوع همکاری:
تماموقت
مزایا و امکانات:
بیمه تأمین اجتماعی
بیمه تکمیلی (SOS)
ناهار و میانوعده
محیط کاری حرفهای و تیم فنی پویا
فرصت رشد و یادگیری در پروژههای بزرگ
لینک های زیر جهت ارسال رزومه می باشد.
https://lnkd.in/eziqVU9z
https://lnkd.in/ehXHUQqz
استخدام برنامهنویس Back-End (.NET Core / Microservices)
شرح موقعیت شغلی:
ما در شرکت ایز ایران (کنسرسیون متمایز) به منظور توسعه و نگهداری سامانههای مبتنی بر معماری مایکروسرویس و تکنولوژیهای روز، از برنامهنویسان Back-End توانمند و علاقهمند به کار در پروژههای مقیاسپذیر دعوت به همکاری میشود.
شرایط و مهارتهای مورد نیاز:
حداقل ۳ سال تجربه کاری مرتبط
تسلط به .NET Core
تسلط به SQL و طراحی پایگاه داده
تجربه کار با Dapper و EF Core
آشنایی با RabbitMQ
تجربه کار با Redis
تجربه کار با Docker و مفاهیم Containerization
تسلط به Git
آشنایی با مفاهیم CI/CD
درک مناسب از معماری Microservices
نوع همکاری:
تماموقت
مزایا و امکانات:
بیمه تأمین اجتماعی
بیمه تکمیلی (SOS)
ناهار و میانوعده
محیط کاری حرفهای و تیم فنی پویا
فرصت رشد و یادگیری در پروژههای بزرگ
لینک های زیر جهت ارسال رزومه می باشد.
https://lnkd.in/eziqVU9z
https://lnkd.in/ehXHUQqz
👍3❤1
لیستهایت را فقط خواندنی کن! خداحافظی با تغییرات ناخواسته
یکی از اصول مهم در طراحی کلاسها، حفظ یکپارچگی دادههاست. اگر یک پراپرتی از نوع List<T> رو به صورت عمومی (Public) در دسترس قرار بدید، یعنی به همه اجازه دادید که محتوای اون لیست رو (بدون اجازه شما) اضافه، حذف یا پاک کنن!
✅ راه حل حرفهای: استفاده از Read-Only Collections
در سیشارپ، با استفاده از ReadOnlyCollection<T> یا اینترفیس IReadOnlyList<T> میتونید به بقیه اجازه بدید دادهها رو فقط ببینند، اما نتونند تغییرش بدن.
به جای:
public List<string> Names { get; set; }
از این الگو استفاده کنید:
public IReadOnlyList<string> Names => _names.AsReadOnly();
اینطوری کنترل کامل لیست دست کلاس اصلی باقی میمونه و کدتون ایمنتر و تمیزتر میشه.
جزئیات بیشتر و مثالهای عملی رو در این مقاله بخونید:
https://lnkd.in/eET__xeR
شما برای محافظت از لیستها معمولاً از IEnumerable استفاده میکنید یا IReadOnlyList؟ توی کامنت ها بنویسید.
یکی از اصول مهم در طراحی کلاسها، حفظ یکپارچگی دادههاست. اگر یک پراپرتی از نوع List<T> رو به صورت عمومی (Public) در دسترس قرار بدید، یعنی به همه اجازه دادید که محتوای اون لیست رو (بدون اجازه شما) اضافه، حذف یا پاک کنن!
✅ راه حل حرفهای: استفاده از Read-Only Collections
در سیشارپ، با استفاده از ReadOnlyCollection<T> یا اینترفیس IReadOnlyList<T> میتونید به بقیه اجازه بدید دادهها رو فقط ببینند، اما نتونند تغییرش بدن.
به جای:
public List<string> Names { get; set; }
از این الگو استفاده کنید:
public IReadOnlyList<string> Names => _names.AsReadOnly();
اینطوری کنترل کامل لیست دست کلاس اصلی باقی میمونه و کدتون ایمنتر و تمیزتر میشه.
جزئیات بیشتر و مثالهای عملی رو در این مقاله بخونید:
https://lnkd.in/eET__xeR
شما برای محافظت از لیستها معمولاً از IEnumerable استفاده میکنید یا IReadOnlyList؟ توی کامنت ها بنویسید.
👍5🆒1
#استخدام
Back-End Developer (.NET Core)
تماموقت | حضوری
امید بانک سپه جهت تکمیل تیم فنی خود از متخصصین Back-End .NET Core مسلط به معماری Microservices دعوت به همکاری مینماید.
شرایط احراز:
تسلط به C# و ASP.NET Core
تجربه عملی در Microservices Architecture
تسلط به دیتابیس SQL Server
آشنایی با MongoDB و Redis
آشنایی با RabbitMQ و Message Brokerها
آشنایی با Elasticsearch
آشنایی با Git و مفاهیم CI/CD
📩 ارسال رزومه در لینکدین یا ایمیل زیر:
[email protected]
Back-End Developer (.NET Core)
تماموقت | حضوری
امید بانک سپه جهت تکمیل تیم فنی خود از متخصصین Back-End .NET Core مسلط به معماری Microservices دعوت به همکاری مینماید.
شرایط احراز:
تسلط به C# و ASP.NET Core
تجربه عملی در Microservices Architecture
تسلط به دیتابیس SQL Server
آشنایی با MongoDB و Redis
آشنایی با RabbitMQ و Message Brokerها
آشنایی با Elasticsearch
آشنایی با Git و مفاهیم CI/CD
📩 ارسال رزومه در لینکدین یا ایمیل زیر:
[email protected]
👍3❤2
🎨 برنامه نویسی با حال و هوای جدید!
بالاخره نسخه ۴ اکستنشن ویژوال استودیوی من آماده شد! 😍
توی این نسخه حسابی گردگیری کردیم و تعداد تمها رو به ۴۴ تا رسوندیم.
اگه دنبال یه تغییر توی محیط کدنویسیتون هستید یا میخواید چشمتون کمتر خسته بشه، DotNET Theme v4 رو نصب کنید. تمهایی مثل Dracula، Nord، Monokai، و حتی تمهای شبیه VS Code الان توی ویژوال استودیو در دسترسن.
دانلود
سورس
بالاخره نسخه ۴ اکستنشن ویژوال استودیوی من آماده شد! 😍
توی این نسخه حسابی گردگیری کردیم و تعداد تمها رو به ۴۴ تا رسوندیم.
اگه دنبال یه تغییر توی محیط کدنویسیتون هستید یا میخواید چشمتون کمتر خسته بشه، DotNET Theme v4 رو نصب کنید. تمهایی مثل Dracula، Nord، Monokai، و حتی تمهای شبیه VS Code الان توی ویژوال استودیو در دسترسن.
دانلود
سورس
❤6👏3
چرا ReadOnly برای امنیت دادههای شما کافی نیست؟
همیشه فکر میکردم اگر لیستم رو AsReadOnly() کنم، دیگه خیالم راحته و هیچکس نمیتونه خرابش کنه.
اما یه روز فهمیدم که ReadOnly فقط یه پنجره شیشهای به لیست اصلیه!
اگه یکی از اون پشت لیست اصلی رو تغییر بده، لیستِ فقط خواندنی من هم تغییر میکنه!
راه حل واقعی:
Immutable Collections
اگه میخواید دادههاتون مثل سنگ نوشته ثابت بمونن و با هیچ طوفانی (حتی توی Multi-threading) تکون نخورن، باید برید سراغ System.Collections.Immutable.
✅ فرقش چیه؟
۱.ء ReadOnly: اگه مرجع اصلی عوض بشه، اینم عوض میشه. (وابسته)
۲.ء Immutable: یه کپی کاملاً مستقل و ثابت. (مستقل)
جادوی Immutable:
وقتی میخواید به لیست Immutable آیتم اضافه کنید (Add)، اون لیست قبلی رو دستکاری نمیکنه! بلکه یه لیست جدید با اون آیتم اضافه شده بهتون میده.
این یعنی History یا تاریخچه دادههاتون همیشه حفظ میشه و هیچ باگ همزمانی (Concurrency) نمیتونه سیستم رو کرش کنه.
شما برای دادههای حساس و ثابت (مثل کانفیگها) از کدوم استفاده میکنید؟
🔗 اطلاعات بیشتر
همیشه فکر میکردم اگر لیستم رو AsReadOnly() کنم، دیگه خیالم راحته و هیچکس نمیتونه خرابش کنه.
اما یه روز فهمیدم که ReadOnly فقط یه پنجره شیشهای به لیست اصلیه!
اگه یکی از اون پشت لیست اصلی رو تغییر بده، لیستِ فقط خواندنی من هم تغییر میکنه!
راه حل واقعی:
Immutable Collections
اگه میخواید دادههاتون مثل سنگ نوشته ثابت بمونن و با هیچ طوفانی (حتی توی Multi-threading) تکون نخورن، باید برید سراغ System.Collections.Immutable.
✅ فرقش چیه؟
۱.ء ReadOnly: اگه مرجع اصلی عوض بشه، اینم عوض میشه. (وابسته)
۲.ء Immutable: یه کپی کاملاً مستقل و ثابت. (مستقل)
جادوی Immutable:
وقتی میخواید به لیست Immutable آیتم اضافه کنید (Add)، اون لیست قبلی رو دستکاری نمیکنه! بلکه یه لیست جدید با اون آیتم اضافه شده بهتون میده.
این یعنی History یا تاریخچه دادههاتون همیشه حفظ میشه و هیچ باگ همزمانی (Concurrency) نمیتونه سیستم رو کرش کنه.
شما برای دادههای حساس و ثابت (مثل کانفیگها) از کدوم استفاده میکنید؟
🔗 اطلاعات بیشتر
👍8❤1
خداحافظی با کندی جستجو در دادههای ثابت! سلام بر FrozenDictionary
تا دیروز وقتی یک لیست ثابت (مثل کانفیگها یا دادههای مرجع) داشتیم، فکر میکردیم ImmutableDictionary بهترین گزینه است. امن بود، ترد-سیف بود، ولی... سریعترین نبود!
داتنت ۸ با معرفی Frozen Collections بازی رو عوض کرد.
وقتی شما از ToFrozenDictionary() استفاده میکنید، داتنت وقت بیشتری میذاره تا دادهها رو آنالیز کنه و بهترین ساختار هَش (Hash) رو برای اون دادههای خاص بسازه.
این سرمایهگذاری اولیه باعث میشه که بعداً سرعت خواندن (Read) به طرز وحشتناکی بالا بره.
۱. اگه دادههاتون مدام تغییر میکنه - Dictionary (معمولی)
۲. اگه امنیت و ترد-سیف بودن مهمه ولی آپدیت هم دارید - ImmutableDictionary
۳. اگه دادهها یک بار لود میشن و دیگه تکون نمیخورن و سرعت جستجو حیاتیه - FrozenDictionary
پ.ن: بهینهسازی همیشه به معنی بازنویسی کد نیست؛ گاهی فقط انتخابِ ظرفِ درست برای دادههاست.
شما تو پروژههاتون برای دادههای ثابت (Static Data) از چی استفاده میکنید؟
🔗 اطلاعات بیشتر
تا دیروز وقتی یک لیست ثابت (مثل کانفیگها یا دادههای مرجع) داشتیم، فکر میکردیم ImmutableDictionary بهترین گزینه است. امن بود، ترد-سیف بود، ولی... سریعترین نبود!
داتنت ۸ با معرفی Frozen Collections بازی رو عوض کرد.
تفاوت کجاست؟
وقتی شما از ToFrozenDictionary() استفاده میکنید، داتنت وقت بیشتری میذاره تا دادهها رو آنالیز کنه و بهترین ساختار هَش (Hash) رو برای اون دادههای خاص بسازه.
این سرمایهگذاری اولیه باعث میشه که بعداً سرعت خواندن (Read) به طرز وحشتناکی بالا بره.
قانون انتخاب:
۱. اگه دادههاتون مدام تغییر میکنه - Dictionary (معمولی)
۲. اگه امنیت و ترد-سیف بودن مهمه ولی آپدیت هم دارید - ImmutableDictionary
۳. اگه دادهها یک بار لود میشن و دیگه تکون نمیخورن و سرعت جستجو حیاتیه - FrozenDictionary
پ.ن: بهینهسازی همیشه به معنی بازنویسی کد نیست؛ گاهی فقط انتخابِ ظرفِ درست برای دادههاست.
شما تو پروژههاتون برای دادههای ثابت (Static Data) از چی استفاده میکنید؟
🔗 اطلاعات بیشتر
❤4👍2👨💻1
اگه هنوز دو تا foreach تو در تو مینویسی، این پست مال توئه!
یکی از نشانههای کدهای Legacy یا قدیمی، دیدن حلقههای تو در تو برای استخراج دادههاست.
مثلاً فرض کنید لیستی از فاکتورها دارید و هر فاکتور لیستی از محصولات داره.
حالا مدیر از شما لیست همه محصولات فروخته شده رو میخواد.
❌ روش سخت - The Hard Way:
ساختن یه لیست خالی، نوشتن حلقه روی فاکتورها، نوشتن حلقه روی محصولات، و Add کردن دونه دونه...
✅ روش هوشمندانه - The Smart Way:
استفاده از متد قدرتمند SelectMany.
این متد کارش صاف کردن (Flattening) ساختارهای درختیه.
var allProducts = orders.SelectMany(o => o.Products);
این دستور میگه: برو تو دلِ هر سفارش، محصولاتش رو بردار و همه رو بریز رو هم، یه لیست صاف بهم بده.
نکته کنکوری:
فرق Select و SelectMany دقیقا همینجاست:
ءSelect: لیستی از لیستها میده (List<List<Product>>)
ءSelectMany: یک لیست واحد میده (List<Product>)
کد تمیزتر = باگ کمتر + نگهداری راحتتر.
شما کجاها از SelectMany استفاده کردید که نجاتتون داده؟
یکی از نشانههای کدهای Legacy یا قدیمی، دیدن حلقههای تو در تو برای استخراج دادههاست.
مثلاً فرض کنید لیستی از فاکتورها دارید و هر فاکتور لیستی از محصولات داره.
حالا مدیر از شما لیست همه محصولات فروخته شده رو میخواد.
❌ روش سخت - The Hard Way:
ساختن یه لیست خالی، نوشتن حلقه روی فاکتورها، نوشتن حلقه روی محصولات، و Add کردن دونه دونه...
✅ روش هوشمندانه - The Smart Way:
استفاده از متد قدرتمند SelectMany.
این متد کارش صاف کردن (Flattening) ساختارهای درختیه.
var allProducts = orders.SelectMany(o => o.Products);
این دستور میگه: برو تو دلِ هر سفارش، محصولاتش رو بردار و همه رو بریز رو هم، یه لیست صاف بهم بده.
نکته کنکوری:
فرق Select و SelectMany دقیقا همینجاست:
ءSelect: لیستی از لیستها میده (List<List<Product>>)
ءSelectMany: یک لیست واحد میده (List<Product>)
کد تمیزتر = باگ کمتر + نگهداری راحتتر.
شما کجاها از SelectMany استفاده کردید که نجاتتون داده؟
👍9❤4