عنوان:

‫جداسازی کامل منطق تجاری و ثبت وقایع با استفاده از رویدادها در محیط DI


نویسنده: راویAI
تاریخ: ۱۴۰۴/۱۱/۲۰ ۰۹:۰۰
آدرس: www.dntips.ir
این مقاله به بررسی روشی برای ثبت وقایع (logging) می‌پردازد که به طور چشمگیری معماری را ساده کرده و اصول SOLID را تقویت می‌کند. رویکرد "ثبت وقایع سایه" (Shadow Logging) به گونه‌ای طراحی شده است که کلاس‌های تجاری هیچگونه فراخوانی مستقیم به لاگر (logger) نداشته باشند. در عوض، کلاس‌های تجاری رویدادها را تولید می‌کنند و کلاس‌های تخصصی لاگر این رویدادها را مدیریت می‌کنند. این امر منجر به جداسازی کامل منطق تجاری از ثبت وقایع می‌شود. مزایای این روش شامل خلوص SRP (اصل مسئولیت واحد)، قابلیت تست بالاتر (نیازی به mock کردن ILogger نیست)، انعطاف‌پذیری و مقیاس‌پذیری (یک رویداد می‌تواند به روش‌های مختلفی مانند ثبت وقایع، جمع‌آوری متریک‌ها و ممیزی مورد استفاده قرار گیرد) و جداسازی برای کتابخانه‌ها (مصرف‌کنندگان منطق تجاری تصمیم می‌گیرند که آیا رویدادها را ثبت کنند و کدام رویدادها را ثبت کنند) است. همچنین، عملکرد بهتری را ارائه می‌دهد زیرا کلاس‌های تجاری نیازی به قالب‌بندی داده‌ها برای ثبت وقایع ندارند. در مقابل، برخی معتقدند که این روش پیچیدگی غیرضروری به برنامه اضافه می‌کند. با این حال، نویسنده معتقد است که اگر برنامه ساده باشد، نیازی به این پیچیدگی نیست. ساده‌ترین راه برای جدا کردن منطق تجاری و ثبت وقایع، استفاده از یک Wrapper برای کلاس تجاری است، اما این روش نیز محدودیت‌هایی دارد، از جمله تحمیل قوانین استفاده، پیچیدگی بیشتر در بازسازی کد و ایجاد مشکلات تکرار و وراثت. رویکرد پیشنهادی، جداسازی کامل منطق تجاری و ثبت وقایع با استفاده از دو شیء مستقل، یعنی کلاس تجاری و هندلر لاگر است. در این روش، هندلر لاگر به رویدادهای تولید شده توسط کلاس تجاری گوش می‌دهد و اقدامات لازم را انجام می‌دهد. با استفاده از کانتینر DI (Dependency Injection)، می‌توان این دو شیء را به طور خودکار ایجاد و به هم متصل کرد. این رویکرد به ویژه برای برنامه‌هایی که از کانتینر DI استفاده می‌کنند، مناسب است. در نهایت، این روش با استفاده از رویدادها، جداسازی کامل منطق تجاری و ثبت وقایع را امکان‌پذیر می‌کند و به توسعه‌دهندگان .NET کمک می‌کند تا معماری تمیزتر، قابل تست‌تر و انعطاف‌پذیرتری ایجاد کنند.


مشاهده مطلب اصلی