خشایار نوریان


مهندس نرم‌افزار | مشاور فنی

سیستم‌های نرم‌افزاری قابل‌اعتماد، معماری عملی و اپلیکیشن‌های مجهز به AI.

پلتفرم‌های نرم‌افزاری را طراحی و مدرن‌سازی می‌کنم، عملکردشان را بهبود می‌دهم و به تیم‌ها کمک می‌کنم نرم‌افزار قابل‌اعتماد را بدون پیچیدگی اضافی تحویل دهند.

پروژه‌های منتخب

پروژه‌هایی که ساخته‌ام

همه‌ی پروژه‌ها

Pulseتوسعه: شروع - به‌روزرسانی

Pulse بررسی می‌کند که یک سرویس از شبکه‌های مختلف درست رفتار می‌کند، نه فقط اینکه یک مانیتور به آن می‌رسد. صفحه‌ی کنترل مرکزی ASP.NET تعریف بررسی‌ها را به ایجنت‌های قابل‌استقرار می‌رساند و آن‌ها اندازه‌گیری‌ها را از راه HTTP برمی‌گردانند.

بررسی‌های HTTP، ping و TCP تأخیر و خطاها را ثبت می‌کنند و dashboard نتیجه‌های اخیر و سلامت ایجنت‌ها را کنار هم می‌گذارد. SQLite استقرار اول را ساده نگه می‌دارد و قراردادهای مشترک، سرور، ایجنت‌ها و رابط Blazor را هم‌راستا می‌کنند.

ادامه مطلب ...

cowork-serverتوسعه: شروع - به‌روزرسانی

cowork-server یک API برای رزرو اتاق‌های جلسه در فضای کار اشتراکی است. پیش از ثبت رزرو، دسترسی کاربر، ساعت کاری اتاق، بازه و مدت رزرو، تداخل و مبلغ بررسی می‌شوند.

command و query در یک برنامه و یک دیتابیس مسیرهای جدا دارند. قفل رزرو فقط در یک فرایند جلوی درخواست‌های هم‌زمان را می‌گیرد؛ اجرای چندنمونه‌ای به راه‌حل دیگری برای هماهنگی نیاز دارد.

ادامه مطلب ...

از دفترچه‌ی یادداشت

آخرین نوشته‌ها

همه‌ی نوشته‌ها

CQRS با مخزن خواندن جدا: projectionهای مفید و تضمین‌های تازهمنتشر شده در

مخزن خواندن جدا به مدل query اجازه می‌دهد داده را برای یک صفحه یا گزارش شکل دهد، نه برای نیازهای مدل نوشتن. این کار می‌تواند joinهای پرهزینه را کم کند و ظرفیت خواندن را مستقل بالا ببرد.

در عوض، یک مسئله‌ی همگام‌سازی به وجود می‌آید. ممکن است داده‌ی خواندنی قدیمی باشد، projection باید بتواند امن بازیابی شود و برنامه باید روشن کند کاربر پس از ارسال یک command چه چیزی می‌بیند.

مهندسی معماری نرم‌افزار #architecture #cqrs #projections #eventual-consistency #dotnet #csharp

ادامه مطلب ...

CQRS حداقلی: مسیرهای کد را جدا کنید، یک برنامه و یک دیتابیس نگه داریدمنتشر شده در

CQRS لازم نیست از همان روز اول با دو دیتابیس و چند سرویس شروع شود. می‌توان command و query را در همان برنامه و همان دیتابیس جدا کرد، چون کارشان واقعاً یکی نیست.

مسیر command از تغییر محافظت می‌کند و مسیر query پاسخ مناسب خواندن را می‌سازد. این انتخاب تراکنش و خواندن فوری را نگه می‌دارد، اما مقیاس‌پذیری مستقل خواندن را به دست نمی‌دهد.

مهندسی معماری نرم‌افزار #architecture #cqrs #cqs #dotnet #csharp

ادامه مطلب ...

CQS و commandها: کاری کنید برنامه هدف کاربر را بفهمدمنتشر شده در

یک DTO تغییرکرده فقط می‌گوید وضعیت چه شده است، نه اینکه کاربر دقیقاً چه کاری خواسته. وقتی تغییر به مجوز، دلیل یا قانون‌های دیگر گره می‌خورد، این تفاوت مهم می‌شود.

commandی با نام روشن، مثل `DeactivateInventoryItem`، هدف کاربر را مستقیم به برنامه می‌رساند. بعد اعتبارسنجی، مجوزدهی و قواعد همان عمل در یک نقطه می‌مانند.

مهندسی معماری نرم‌افزار #architecture #cqrs #cqs #dotnet #csharp

ادامه مطلب ...

وقتی CRUD دیگر زبان مناسبی برای مسئله نیستمنتشر شده در

برای تغییر نام نمایشی یا یک تنظیم ساده، CRUD کاملاً کافی است. مسئله از جایی شروع می‌شود که تغییر چند فیلد، یک تصمیم کسب‌وکار با مجوز، دلیل و پیامدهای خودش را پنهان می‌کند.

این نوشته نشان می‌دهد چرا گاهی باید به‌جای فرستادن یک DTO تغییرکرده، خود عمل را نام ببریم. CQS و CQRS برای همین نقطه‌اند، نه برای پیچیده کردن هر update معمولی.

مهندسی معماری نرم‌افزار #architecture #cqrs #cqs #dotnet #csharp

ادامه مطلب ...