در فضایی که همواره هیچ تضمینی وجود ندارد که درخواست ارسال شدهی به یک API، همواره مسیر خود را همانطور که انتظار میرود طی کرده و پاسخ مورد نظر را در اختیار ما قرار میدهد، بیشک تلاش مجدد برای پردازش درخواست مورد نظر، به دلیل خطاهای گذرا، یکی از راهکارهای مورد استفاده خواهد بود. تصور کنید قصد طراحی یک مجموعه API عمومی را دارید، بهنحوی که مصرف کنندگان بدون نگرانی از ایجاد خرابی یا تغییرات ناخواسته، امکان تلاش مجدد در سناریوهای مختلف مشکل ...
این الگو اجازهی تعریف کردن عملیاتی جدید را برای مجموعهای از شیءها، بدون تغیر دادن ساختار خود شیءها، میدهد. همچنین اجازهی جدا کردن کلاس را از منطقی که کلاس پیاده سازی میکند، به ما میدهد. عملیات بیشتری میتوانند در شیء Visitor کپسوله سازی شوند. شیءها میتوانند یک متد visit داشته باشند که یک شیء Visitor را دریافت میکند. Visitor میتواند تغییرات مورد نیاز را ایجاد کند و عملیاتی را بر روی شیءهایی که دریافت کردهاست، انجام دهد. ...
الگوی command، اجازهی کپسوله سازی درخواستها و عملیات را در شیءهای جداگانهای میدهد. این الگو، شیءهایی که درخواستها را ارسال میکنند، از شیءهایی که مسئول اجرا کردن درخواستها هستند، جدا میکند. یک مثال را در نظر بگیرید؛ جائیکه یک کلاینت قرار است، دسترسی به متدهای یک API را به صورت مستقیم داشته باشد. چه اتفاقی خواهد افتاد اگر پیاده سازی آن APIها تغییر کند؟ هر جائیکه API، در حال استفاده شدن است، باید تغییرات صورت گیرد. برای اجتناب ...
در ابتدا اجازه بدهید تعریف درستی از این دو واژه، ارائه کنیم. DTO (Data Transfer Object) به بیان خیلی ساده، DTOها برای انتقال اطلاعات استفاده میشوند؛ پس هیچ منطق و رفتاری در این اشیاء تعریف نمیشود .اگر در DTO منطقی پیاده سازی شود، دیگر به آن DTO گفته نمیشود. اجازه بدید منظورمان را از منطق یا رفتار مشخص کنیم. منطق یا رفتار، همان متدهایی هستند که در نوع داده خود تعریف میکنیم. در #C، یک DTO تنها از خصوصیتها (Properties) ...
در قسمت قبل ، روشی را بر اساس الگوی Observer، برای به اشتراک گذاری حالت و مدیریت سراسری آن، بررسی کردیم. در این روش میتوان چندین مخزن حالت را نیز داشت؛ اما هر کدام مستقل از هم عمل میکنند. برای تکمیل آن فرض کنید قرار است عمل افزودن مقدار یک شمارشگر، در دو مخزن حالت متفاوت و مجزای از هم، در هر کدام سبب بروز تغییر حالتی خاص شود که در این مطلب روش مدیریت آنرا بررسی خواهیم کرد. نیاز به یک Dispatcher برای تعامل با بیش از یک مخزن حالت ...
نیاز به مدیریت حالت در برنامههای Blazor
«حالت» یا state، شیءای است، حاوی اطلاعاتی که برنامه با آن سر و کار دارد. بنابراین مدیریت حالت، روشی است برای ردیابی و مدیریت دادههای مورد استفادهی در برنامه و تقریبا تمام برنامهها، به نحوی به آن نیاز دارند. هر کامپوننت در Blazor، دارای state خاص خودش است و این state از سایر کامپوننتها کاملا مستقل و ایزولهاست. این مورد با بزرگتر شدن برنامه و برقراری ارتباط بین کامپوننتها، مشکل ای ...
همانطور که میدانید ASP.NET Core از تزریق وابستگیها ( Dependency Injection ) پشتیبانی میکند، که یک نوع Design Pattern است، و در اصل یک تکنیک است برای دستیابی و پیاده سازی اصل Inversion Of Control یا همان IoC بین کلاسها و وابستگیهای آن کلاسها. متد ConfigureServices در کلاس Startup وظیفهای دارد برای ثبت و تعریف سرویسهای مورد استفادهی در برنامه از جمله Platform Features مانند EF Core و معماری MVC. این متد در اصل DI Container ما است و ...
در بعضی از شرایط
پیش رفته، ممکن است نمونه سازی از یک Implementation Type ، نیاز به دخالت مستقیم ما را
داشته باشد. Implementation Factory کنترل بیشتری بر چگونگی استفادهی از Implementation Type ها را به ما ارائه میدهد. در هنگام ثبت سرویسی که Implementation Factory را در اختیار ما قرار میدهد، ما
یک Delegate را برای
فراخوانی سرویس استفاده میکنیم ...
در بخش پنجم از سری نوشتار « تزریق وابستگیها در ASP.NET Core »، میخواهیم به شرح کلاس ServiceDescriptor بپردازیم. اگر تعریف اینترفیس IServiceCollection را
مشاهده کنیم، میبینیم که IServicecollection در
واقع لیستی از اشیائی از نوع ServiceDescriptor را نگهداری میکند: namespace Microsoft.Extensions.DependencyInjection
{
public interface IServiceCollection :
ICollection&l ...
برای ایجاد «خواص الحاقی» قبلا در سایت مطلب ایجاد «خواص الحاقی» تهیه شدهاست. در این مطلب قصد داریم راه حل ارائه شدهی در مطلب مذکور را با یک TypeDescriptionProvider سفارشی ترکیب کرده تا به صورت یکدست، از طریق TypeDescriptor بتوان به آن خواص نیز دسترسی داشته باشیم. فرض کنید در یک سیستم Modular Monolith، نیاز جدیدی به دست شما رسیده است که به شرح زیر میباشد: نیاز داریم در گریدی از صفحهی X مربوط به «مؤلفه 1»، ستونی جدید را اضافه کنید ...