Developer Advocate
Ir al canal en Telegram
1 035
Suscriptores
Sin datos24 horas
Sin datos7 días
-130 días
Archivo de publicaciones
1 035
در داتنت، مفهوم interception و dynamic behavior عمدتاً با استفاده از Reflection و Dynamic Proxies (مثلاً Castle DynamicProxy) پیادهسازی میشود. اگر اهل معماری ماژولار و توسعهٔ reactive هستید، قابلیتهایی مشابه Proxy و Reflect در جاوااسکریپت، در #CSharp با امکانات پیشرفتهٔ reflection و dynamic قابل دسترسی است—ابزاری قدرتمند برای پیادهسازی AOP، lazy loading، logging شفاف و حتی ساخت ORMهای سبک!
فرض کنید میخواهید هر فراخوانی property را مانیتور کنید یا رفتار آبجکت را قبل/بعد هر عملیات کنترلکنید:
using Castle.DynamicProxy;
class LoggingInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
Console.WriteLine($"Calling: {invocation.Method.Name}");
invocation.Proceed();
Console.WriteLine($"Returned: {invocation.ReturnValue}");
}
}
public interface IUserService
{
string GetUser(int id);
}
public class UserService : IUserService
{
public string GetUser(int id)
{
return $"User_{id}";
}
}
// Proxy creation
var proxyGenerator = new ProxyGenerator();
IUserService userServiceProxy = proxyGenerator.CreateInterfaceProxyWithTarget<IUserService>(
new UserService(), new LoggingInterceptor()
);
Console.WriteLine(userServiceProxy.GetUser(12));
در مثال بالا، هر بار متد GetUser صدا زده شود، Interceptor ما قبل و بعد call لاگ میگیرد—بدون هیچ تغییری در پیادهسازی اصلی. مشابه Proxy و Reflect در جاوااسکریپت، اینجا هم امکان custom logic قبل و بعد یا حتی به جای متد اصلی داریم (مانند reflection-based delegation).
اگر به دنبال استفاده پیشرفتهتر هستید (مثلاً interception در سطح property یا reactive updates)، به dynamic objectها نیز نگاه کنید:
using System.Dynamic;
public class ReactiveObject : DynamicObject
{
private readonly Dictionary<string, object> _data = new();
public override bool TrySetMember(SetMemberBinder binder, object value)
{
Console.WriteLine($"Property '{binder.Name}' assigned: {value}");
_data[binder.Name] = value;
return true;
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
_data.TryGetValue(binder.Name, out result);
Console.WriteLine($"Property '{binder.Name}' accessed: {result}");
return true;
}
}
// استفاده
dynamic rx = new ReactiveObject();
rx.Name = "Arash";
var val = rx.Name;
این استراتژیها برای ساخت فریمورکهای reactive، پیادهسازی decorator pattern یا ایجاد validation خودکار روی مدلها، فوقالعاده کاربردی است.
مطالعهٔ بیشتر:
https://learn.microsoft.com/en-us/dotnet/standard/reflection-and-dynamic/advanced-reflection
#⚡️ #AdvancedNet #AOP #Reflection #DesignPatterns
Advanced JavaScript/TypeScript
@DeveloperAdvocate 🥑1 035
✅ Event Grid و EventBridge: سنگبنای معماری رویدادمحور در کلاد
معماریهای مبتنیبر رویداد (EDA) برای ساخت سیستمهای مقیاسپذیر، منعطف و مستقل، نقش حیاتی دارند. دو سرویس قدرتمند در دنیای کلاد—Azure Event Grid و AWS EventBridge—امکان پیادهسازی EDA را بصورت Cloud-native فراهم میکنند. این سرویسها مفاهیم pub/sub را با ویژگیهایی مانند filtering، dead-lettering، و event routing هوشمند به سطح جدیدی ارتقا میدهند.
⚡ چرا Event Grid؟
در اکوسیستم Azure، Event Grid نقطه اتصال بین تولیدکنندگان و مصرفکنندگان رویداد است. این سرویس:
- توزیع قابل اعتماد رویداد با Latency پایین و مقیاسپذیری اتوماتیک فراهم میکند.
- از مدل push-based استفاده میکند (برخلاف مدل pool-based).
- قابلیت Event Filtering بر اساس خصوصیات event، Subject و ... را فراهم میکند.
- از قابلیتهای robust مثل retry، DLQ (Dead-letter queue) و مدیریت Event بد بهره میبرد.
🔗 نمونه کد: ارسال Event سفارشی به Event Grid
var topicEndpoint = "https://<YOUR-TOPIC-NAME>.<REGION>-1.eventgrid.azure.net/api/events";
var topicKey = "<YOUR-TOPIC-KEY>";
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Add("aeg-sas-key", topicKey);
var customEvent = new[]
{
new
{
id = Guid.NewGuid().ToString(),
subject = "/sample/item/42",
data = new { foo = "bar" },
eventType = "sampleEventType",
dataVersion = "1.0",
eventTime = DateTime.UtcNow
}
};
var content = new StringContent(JsonConvert.SerializeObject(customEvent), Encoding.UTF8, "application/json");
await httpClient.PostAsync(topicEndpoint, content);
✨ بهترین کاربردها
- اتصال سرویسهای serverless مانند Azure Functions یا AWS Lambda.
- decoupling کامل بین producer و consumerها، پیادهسازی رویدادهای دامنهای در DDD.
- ساخت سیستمهای cross-platform و Hybrid Cloud.
📌 نکته معماری:
در دنیای microservices، Event Grid یا EventBridge میتوانند الگوهایی مانند Saga (با orchestration یا choreography) را سادهتر و پایدارتر کنند. همچنین با بهرهگیری از قابلیت Event Filtering میتوانید مصرف رویدادها را هوشمندانهتر و نیروهای کد را کاهش دهید.
🔗 مطالعه بیشتر | Microsoft Docs:
https://learn.microsoft.com/en-us/azure/event-grid/compare-messaging-services
Cloud Computing (Azure/AWS/GCP) & Serverless
@DeveloperAdvocate 🥑1 035
🔥 Trunk-Based Development: چرخههای انتشار سریعتر و آنتیپترن شاخههای ویژگی
در پروژههای بزرگ .NET، بسیاری از تیمها هنوز هم به سراغ استراتژی branching سنتی با feature branch طولانیمدت میروند. مشکل اینجاست که این رویکرد منجر به Drift، پیچیدگی Merge، Integration Hell و تست غیرقابل پیشبینی میشود. برای رسیدن به CI واقعی و delivery سریعتر، بهتر است به Trunk-Based Development (TBD) مهاجرت کنید.
در TBD، تمام توسعهدهندگان روی یک trunk (معمولاً master/main) کار میکنند و Pull Requestها باید کوتاه و کوچک باشند (اغلب کمتر از یک روز کار). قابلیتهای خام (Feature Toggles) کلیدی هستند:
- با استفاده از Feature Toggle، کد ناقص را میتوانید Safe به trunk merge کنید، بدون اینکه فوراً فعال شود.
- مزیت: آزمایش تدریجی، کاهش ریسک و شفافیت بیشتر کد اصلی.
یک سناریوی عملی در ASP.NET Core:
public class FeatureFlags
{
public bool NewCheckoutEnabled { get; set; }
}
// در پیکربندی DI
services.Configure<FeatureFlags>(Configuration.GetSection("FeatureFlags"));
// در کنترلر:
public IActionResult Checkout([FromServices] IOptions<FeatureFlags> flags)
{
if (flags.Value.NewCheckoutEnabled)
{
// کد جدید
}
else
{
// کد فعلی
}
}
⚡️ نتیجه:
- Mergeهای کوچک و فوری = رفع سریع Conflicts
- قابلیت Release سریعتر و بدون Branch-Based Chaos
- بازخورد سریع تست خودکار و CI
اگر هنوز feature branch طولانی دارید، TBD همراه با Feature Toggles و Integration مستمر را به تیم تزریق کنید.
مطالعهی بیشتر:
https://martinfowler.com/articles/branching-patterns.html
Advanced CI/CD & Automation
@DeveloperAdvocate 🥑1 035
🔐 آپلود امن فایل: مقابله با فایلهای مخرب
یکی از خطرناکترین نقاط آسیبپذیری در اپلیکیشنهای وب، امکان آپلود فایل است. یک فایل مخرب بهراحتی میتواند بهعنوان تروجان، اسکریپت یا بدتر از آن، ابزاری برای اجرای کد روی سرور استفاده شود. برای دفاع موثر، باید مجموعهای از تدابیر را بهکار بگیرید که صرفاً به چک کردن پسوند فایل محدود نمیشود.
🔸 مراحل کلیدی برای ایمنسازی آپلود فایل:
1. محدودسازی نوع و اندازه فایل
همیشه mime type و extension را با لیست سفید بررسی کنید.
var allowedExtensions = new[] { ".png", ".jpg", ".jpeg", ".pdf" };
var fileExtension = Path.GetExtension(uploadedFile.FileName).ToLowerInvariant();
if (!allowedExtensions.Contains(fileExtension))
throw new InvalidOperationException("Invalid file type.");
if (uploadedFile.Length > 5 * 1024 * 1024)
throw new InvalidOperationException("File too large.");
2. ولیدیشن امضای فایل (File Signature)
پیشفرض نگیرید فقط چون پسوند .png وجود دارد، فایل واقعاً تصویر PNG است! پایگاه دادهای از magic numberهای فایلها داشته باشید و فایل دریافتی را قبل از ذخیره اعتبارسنجی کنید.
static bool IsPng(Stream file)
{
var pngSignature = new byte[] { 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A };
byte[] buffer = new byte[8];
file.Read(buffer, 0, 8);
file.Position = 0;
return buffer.SequenceEqual(pngSignature);
}
3. اجتناب از ذخیره فایل در مسیر وبسرور
فایلها را بیرون از wwwroot ذخیره کنید و دسترسی مستقیم به آنها ندهید. دانلود فایل فقط از طریق API و با کنترل سطح دسترسی مجاز باشد.
4. تغییر نام فایل و حذف متادیتا
نام فایل را به GUID تغییر دهید و هرگونه متادیتای مخرب (EXIF، XMP) را قبل از ذخیره حذف کنید.
5. استفاده از آنتیویروس و sandboxing
فایلها را با ابزارهایی مثل ClamAV اسکن کنید. در فرآیند آپلود میتوانید از sandbox جهت اجرای تستهای امنیتی بهره ببرید.
6. تنظیم محدودیتهای سرور و فریمورک
مثل محدودیت Request Size و Timeout در لایه Kestrel/IIS و همچنین RequestSizeLimit attribute در ASP.NET.
یادمان باشد: اعتبارسنجی سمت کلاینت کافی نیست — هر چیز روی سرور باید جداگانه چک شود.
لینک تکمیلی از Microsoft Docs:
https://learn.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads?view=aspnetcore-7.0#security-considerations
Application Security (AppSec)
@DeveloperAdvocate 🥑1 035
در مقاله «هنوز به کد اهمیت میدهم» از وبسایت مارتین فاولر، نویسنده به تأثیر ظهور هوش مصنوعی—به ویژه مدلهای زبانی بزرگ مانند ChatGPT—بر توسعه نرمافزار و اهمیت کدنویسی توسط انسان میپردازد. فاولر توضیح میدهد که گرچه ابزارهای هوش مصنوعی میتوانند بخش زیادی از فرایند تولید کد را خودکار کنند و باعث افزایش بهرهوری توسعهدهندگان شوند، اما هنوز دلایل متعددی وجود دارد که توجه عمیق به کد و کیفیت آن ضرورت دارد.
او تأکید میکند که خروجی مدلهای زبانی براساس دادههای آموزش دیده است و ممکن است شامل اشتباه یا راهکارهای غیراستاندارد باشد. بنابراین برنامهنویسان باید همچنان قابلیت خواندن، درک، و بازبینی کد را داشته باشند. به باور او، فهم عمیق ساختار، منطق و معماری کد برای تضمین پایداری، نگهداری و قابل فهم بودن سیستمها ضروری است.
فاولر معتقد است که حتی اگر هوش مصنوعی بتواند قطعات بزرگی از کد را تولید کند، تصمیمگیری درباره ساختار و معماری، تست کردن و اصلاحها همچنان نیازمند دانش و تجربیات انسانی است. او بیان میکند که اگر توسعهدهندگان فقط به تولید خودکار اعتماد کنند، ممکن است کنترل طولانیمدت پروژه و قدرت حل مسائل پیچیده را از دست بدهند.
در نهایت، مقاله هشدار میدهد که اهمیت دادن به کد و توجه مداوم به کیفیت آن، نقش حیاتی در موفقیت پروژههای نرمافزاری دارد و هوش مصنوعی باید به عنوان ابزاری کمکی نه جایگزین مهارتهای انسانی دیده شود.
https://martinfowler.com/articles/exploring-gen-ai/i-still-care-about-the-code.html
@DeveloperAdvocate 🥑
1 035
مقاله «من هنوز به کد اهمیت میدهم» نوشته مارتین فاولر، به تأثیر ظهور مدلهای زبانی بزرگ و هوش مصنوعی مولد بر فرآیند توسعه نرمافزار میپردازد. نویسنده توضیح میدهد که با وجود پیشرفتهای چشمگیر در زمینه تولید خودکار کد توسط هوش مصنوعی، همچنان کیفیت و ساختار کد اهمیت ویژهای دارد. فاولر معتقد است کد خوب فقط توسط انسان نوشته نمیشود، بلکه نیازمند توجه به خوانایی، ساختار، تستپذیری و سازگاری با تیم توسعه است.
در این مقاله تأکید شده حتی اگر ابزارهای هوش مصنوعی بتوانند بخش زیادی از کدنویسی را خودکار انجام دهند، همچنان توسعهدهندگان باید کد را بازبینی (Review)، اصلاح و بهبود دهند تا مطمئن شوند استانداردهای کیفیتی رعایت شدهاند. همچنین به چالشهای مدلهای زبانی اشاره میشود؛ از جمله اینکه این مدلها گاهی راهحلهایی تولید میکنند که نه بهینه هستند و نه لزوماً با زمینه کسبوکار تطابق دارند.
فاولر تاکید میکند که با پیشرفت AI وظیفه اصلی توسعهدهندهها از نوشتن کد به سمت مراقبت از کیفیت و ساختار کد تغییر میکند. او مثالهایی از پروژههای واقعی مطرح میکند که چگونه AI میتواند کد تولید کند اما هنوز نیاز است افراد مطمئن شوند کد قابل درک، نگهداری و توسعه باشد.
در نهایت پیام اصلی مقاله این است که اگرچه آینده توسعه نرمافزار با کمک هوش مصنوعی متحول میشود و تولید کد راحتتر خواهد شد، اما همچنان نقش یک مهندس نرمافزار اهمیت خود را حفظ میکند؛ کسی که نه فقط به نتیجه بلکه به نحوه ساخت کد و کیفیت آن اهمیت میدهد.
https://martinfowler.com/articles/exploring-gen-ai/i-still-care-about-the-code.html
@DeveloperAdvocate 🥑
1 035
🔹 معرفی قابلیت تکمیل خودکار هوشمند و محیطمحور برای ++C در VS Code
در جدیدترین پست وبلاگ تیم توسعه ++C مایکروسافت، قابلیت جدید و پیشرفتهای برای تکمیل کد (Code Completion) یا همان Intellisense معرفی شده است که مخصوص توسعهدهندگان ++C در محیط VS Code طراحی شده. این ویژگی با نام Smarter Workspace-aware Code Completions فراتر از پیشنهادهای ساده و همیشگی عمل میکند.
✅ ویژگیهای اصلی:
- اکنون Intellisense جملات کامل را بر اساس فایلها، پروژهها و حتی وابستگیهای workspace پیشنهاد میدهد.
- تشخیص هوشمند اینکه چه نمادها، توابع یا کلاسهایی واقعا در پروژه شما قابل استفادهاند و پیشنهاد آنها تنها در صورت امکان واقعی import یا استفاده.
- کاهش پیشنهادهای اشتباه و بیرون از scope، دقیقاً متناسب با ساختار پروژه و تنظیمات کامپایلر شما.
- پشتیبانی بهتر برای پروژههای بزرگ و دارای چندین ماژول یا کتابخانه.
🔹 تأثیرات این قابلیت:
- سرعت بالاتر در نوشتن کد و کاهش خطاهای ناشی از پیشنهادهای بیربط.
- تجربه بهتر توسعه مخصوصا در پروژههای پیچیده یا ماژولار.
- کمک به تازهواردها و حتی برنامهنویسان حرفهای در یافتن سریعتر و دقیقتر توابع و نمادهای مرتبط.
🔸 فعالسازی این قابلیت در ورژن جدید افزونه ++C برای VS Code ممکن است و کاربران میتوانند با بروزرسانی، از این امکانات جدید بهرهمند شوند.
منبع: وبلاگ رسمی توسعهدهندگان ++C مایکروسافت
https://devblogs.microsoft.com/cppblog/smarter-workspace-aware-code-completions-for-c-in-vs-code
@DeveloperAdvocate 🥑
1 035
🔬 مرزهای جدید Web: نگاهی به Web Bluetooth، Web MIDI و Web Share API
امکانات پیشرفته مرورگرها، توسعه وب را وارد فاز جدیدی کردهاند. با این APIها میتوانید به دستگاههای BLE، ادوات موسیقی دیجیتال و حتی قابلیتهای بهاشتراکگذاری سیستمعامل دسترسی داشته باشید—مستقیماً از مرورگر!
🔹 Web Bluetooth API
امکان ارتباط امن و مستقیم با دیوایسهای Bluetooth Low Energy (مثل سنسورها و ابزار پزشکی) را فراهم میکند. مثلاً وضعیت یک دیوایس را از مرورگر واکشی کنید:
// اتصال به یک دستگاه BLE و خواندن ویژگی (Characteristic)
const device = await navigator.bluetooth.requestDevice({ filters: [{ services: ['battery_service'] }] });
const server = await device.gatt.connect();
const service = await server.getPrimaryService('battery_service');
const characteristic = await service.getCharacteristic('battery_level');
const value = await characteristic.readValue();
console.log(`Battery level: ${value.getUint8(0)}`);
🔹 Web MIDI API
به مرورگر اجازه میدهد با دستگاههای MIDI ارتباط برقرار کند. مثال: نمایش لیستی از ورودیهای MIDI متصل:
// دریافت لیست دیوایسهای MIDI متصل
navigator.requestMIDIAccess().then((midiAccess) => {
for (let input of midiAccess.inputs.values()) {
console.log(`MIDI IN: ${input.name}`);
}
});
🔹 Web Share API
قابلیت Share نیتیو سیستم عامل (موبایل/دسکتاپ) را به وب میآورد. به سادگی محتوا را در اپلیکیشنهای دیگر به اشتراک بگذارید:
// بهاشتراکگذاری یک لینک با Web Share API
if (navigator.share) {
await navigator.share({
title: 'مقاله ویژه',
text: 'APIهای پیشرفته مرورگر را بشناسید!',
url: 'https://your-site.com/advanced-web-apis'
});
}
⏳ در پروژههای کراسپلتفرم (مثلاً Blazor یا PWA)، این APIها یک لایه اینتگریشن مستقیم با جهان فیزیکی ایجاد میکنند—بدون نیاز به افزونه یا برنامه native.
منبع پیشنهادی برای مطالعهی بیشتر:
What’s New for Web Platform Developers (Google Developers)
#WebAPI #Blazor #PWA #Architecture #WebBluetooth #WebMIDI #WebShare
Advanced JavaScript/TypeScript
@DeveloperAdvocate 🥑1 035
در دنیای فناوری که هر روز شاهد موجی از ابزارها، کتابخانهها و مقالات جدید هستیم، فیلتر کردن و مصرف مؤثر اطلاعات به یک مهارت کلیدی برای معماران نرمافزار تبدیل شده است. تجربه نشان میدهد که «عمق»، نه «حجم»، معیار درست پیگیری دانش فنی است.
چند توصیه عملی:
- منابع را بر اساس سهم عمیق آنها در معماری سیستم و توسعه حرفهای انتخاب کنید. دائم به خود یادآوری کنید: هر مطلبی ارزش خواندن عمیق را ندارد.
- به جای جمعآوری انبوه خوراک RSS یا کانال تلگرام، چند منبع برگزیده را دنبال کنید؛ مثلا بلاگهای رسمی تیمهای محصول (: Microsoft DevBlogs)، یا نشریاتی مثل Martin Fowler که پشتوانه مفهومی دارند.
- برای ابزارهای نوظهور، یک POC ساده و سریع تدوین کنید—تنها زمانی که فرضیه عملی بودن یا مزیت راهکار برای تیم آشکار شد، وقت بیشتری روی آن تخصیص دهید.
- یادگیری فعال را جایگزین مصرف منفعل کنید: با نوشتن یادداشت تکنیکی، شرکت در گفتگوهای حرفهای و حتی کد زدن نمونه، دانستهها را تثبیت نمایید.
مثال: فرض کنید با موج تبلیغاتی پیرامون Minimal API در ASP.NET Core روبرو شدهاید. کافی است یک پروژه tiny به این شکل پیادهسازی کنید:
var app = WebApplication.Create();
app.MapGet("/health", () => Results.Ok("Alive"));
app.Run();
حالا به جای انباشته کردن دهها مقاله یا ویدیو، میتوانید تجربه عملی خود را سریع کسب کرده و در صورت مفید بودن، عمیقتر پیگیری کنید.
برای مطالعه بیشتر در مورد استراتژیهای عملی مدیریت جریان اطلاعات در توسعه نرمافزار، این مقاله Martin Fowler را توصیه میکنم:
https://martinfowler.com/articles/information-radiator.html
Productivity & Self-Improvement
@DeveloperAdvocate 🥑1 035
در دنیای فناوری که هر روز شاهد موجی از ابزارها، کتابخانهها و مقالات جدید هستیم، فیلتر کردن و مصرف مؤثر اطلاعات به یک مهارت کلیدی برای معماران نرمافزار تبدیل شده است. تجربه نشان میدهد که «عمق»، نه «حجم»، معیار درست پیگیری دانش فنی است.
چند توصیه عملی:
- منابع را بر اساس سهم عمیق آنها در معماری سیستم و توسعه حرفهای انتخاب کنید. دائم به خود یادآوری کنید: هر مطلبی ارزش خواندن عمیق را ندارد.
- به جای جمعآوری انبوه خوراک RSS یا کانال تلگرام، چند منبع برگزیده را دنبال کنید؛ مثلا بلاگهای رسمی تیمهای محصول (: Microsoft DevBlogs)، یا نشریاتی مثل Martin Fowler که پشتوانه مفهومی دارند.
- برای ابزارهای نوظهور، یک POC ساده و سریع تدوین کنید—تنها زمانی که فرضیه عملی بودن یا مزیت راهکار برای تیم آشکار شد، وقت بیشتری روی آن تخصیص دهید.
- یادگیری فعال را جایگزین مصرف منفعل کنید: با نوشتن یادداشت تکنیکی، شرکت در گفتگوهای حرفهای و حتی کد زدن نمونه، دانستهها را تثبیت نمایید.
مثال: فرض کنید با موج تبلیغاتی پیرامون Minimal API در ASP.NET Core روبرو شدهاید. کافی است یک پروژه tiny به این شکل پیادهسازی کنید:
var app = WebApplication.Create();
app.MapGet("/health", () => Results.Ok("Alive"));
app.Run();
حالا به جای انباشته کردن دهها مقاله یا ویدیو، میتوانید تجربه عملی خود را سریع کسب کرده و در صورت مفید بودن، عمیقتر پیگیری کنید.
برای مطالعه بیشتر در مورد استراتژیهای عملی مدیریت جریان اطلاعات در توسعه نرمافزار، این مقاله Martin Fowler را توصیه میکنم:
https://martinfowler.com/articles/information-radiator.html
Productivity & Self-Improvement
@DeveloperAdvocate 🥑1 035
🎯 فرصت شغلی: برنامهنویس .NET Core (تماموقت حضوری – تهران)
شرکت دانشبنیان ما با تمرکز بر طراحی و توسعه محصولات دیجیتال نوآورانه و مقیاسپذیر، در حال گسترش تیم فنی خود است. به همین منظور، از متخصصان مستعد و باانگیزه در حوزه برنامهنویسی .NET Core دعوت به همکاری مینماییم.
اگر به دنبال محیطی پویا، فرصت یادگیری روزافزون، پروژههای واقعی و تیمی جوان و حرفهای هستید، جای شما در کنار ما خالیست.
✅ شرح موقعیت شغلی
در این موقعیت، مسئولیتهای زیر بر عهده شما خواهد بود:
طراحی و توسعه وباپلیکیشنهای مقیاسپذیر با استفاده از ASP.NET Core
تحلیل نیازمندیها، شناسایی و رفع مشکلات فنی سیستم
بهینهسازی عملکرد و ارتقاء مستمر محصولات
تعامل و همکاری مؤثر با تیمهای UI/UX و توسعه فرانتاند
مشارکت در تصمیمگیریهای معماری و انتخاب تکنولوژیهای مناسب
🛠 مهارتها و تکنولوژیهای مورد نیاز
زبان و فریمورک:
ASP.NET Core (MVC, Web API)
C#
Entity Framework Core
زیرساخت و ابزارها:
SQL Server
PostgreSQL
MongoDB (NoSQL)
Redis
ElasticSearch
RabbitMQ
Docker
توسعه فرانتاند:
HTML، CSS، JavaScript، jQuery
Tailwind CSS
آشنایی با ابزار طراحی Figma و همکاری با تیم UI/UX
اصول طراحی و معماری:
آشنایی با معماری Microservices
تسلط بر Design Patterns و اصول SOLID
در صورتی که واجد شرایط این موقعیت شغلی هستید و علاقهمند به پیوستن به تیم ما میباشید، لطفاً رزومه خود را با عنوان «برنامهنویس .NET Core» به ایمیل زیر ارسال نمایید:
📨 meladhamedani@gmail.com
https://www.linkedin.com/jobs/view/4256909758
