استراتژی یک الگوی طراحی میباشد که یک سری قوانین در آن نوشته میشود و اجازه میدهد پیاده سازی هایی متفاوت از آن داشته باشیم.
برای مثال میخواهیم یک ریپازیتوری برای خواندن دیتاها بنویسیم که بعدا در صورت نیاز بتوانیم محل خوانده شدن دیتاهارا (با کمترین تغییر در کد) تغییر دهیم. میتوانیم دیتاها را در Redis و یا InMemory ذخیره نماییم. برای این کار ابتدا یک ایترفیس به نام ICacheRepository ایجاد میکنم و سپس کلاس هایی به نام های RedisCacheRepository و InMemoryCacheRepository ایجاد میکنیم که متدهای آن اینترفیس را ایمپلیمنت میکنند. اینترفیس ICacheRepository شامل یک متد به نام Get میباشد و کلاس هایی که از آن اینترفیس ارث بری کردهاند باید متد Get را پیاده سازی نمایند.
public interface ICacheRepository
{
string Get(string key);
}
RedisCacheRepository:
public class RedisCacheRepository : ICacheRepository
{
public string Get(string key)
{
return "Get value from RedisCache" ;
}
}
InMemoryCacheRepository:
public class InMemoryCacheRepository : ICacheRepository
{
public string Get(string key)
{
return "Get value from InMemoryCache";
}
}
سپس درصورتی که کلاس RedisCacheRepository را به اینترفیس ICacheRepository انتساب نماییم، زمانی که در برنامه ما متد Get فراخوانی شود، مقدار "Get value from RedisCache" برگشت داده میشود و زمانی که کلاس InMemoryCacheRepository را به اینترفیس ICacheRepository انتساب نمایید مقدار "Get value from InMemoryCache" را دریافت میکنیم:
var cacheKey = "DotNetDocs";
ICacheRepository repository = new InMemoryCacheRepository();
Console.WriteLine(repository.Get(cacheKey)); //Get value from InMemoryCache
repository = new RedisCacheRepository();
Console.WriteLine(repository.Get(cacheKey)); //Get value from RedisCache
اگر کد نوشته شده را اجرا نمایید مقدار زیر را در خروجی مشاهده خواهید کرد:
Get value from InMemoryCache
Get value from RedisCache
هدف این مطلب ارائه الگوی طراحی Strategy در #C بود و پیاده سازی کلاس های InMemoryCacheRepository و RedisCacheRepository به صورت واقعی انجام نشده (برای خواندن دیتاها).
در مطلب بعدی یک پیاده سازی واقعی از الگوی طراحی Strategy همراه با Factory در یک برنامه Asp.Net Core ارائه خواهد شد.
Powered by Froala Editor