۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

نحوه استفاده از الگوی طراحی مشخصات در سی شارپ

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

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

وقتی ما در برنامه‌های تجاری کار می‌کنیم، وظیفه ما نوشتن منطق کسب‌وکار است که قوانین کسب‌وکار را پیاده‌سازی می‌کند – یعنی قوانینی که شرکت ما برای کاربرد مشخص کرده است. چگونه می توانیم این کار را آسان تر کنیم؟ یک راه استفاده از الگوی طراحی مشخصات است.

الگوی طراحی مشخصات روشی انعطاف‌پذیر برای تعریف و ترکیب قوانین یا شرایط کسب‌وکار به روشی قابل استفاده مجدد و قابل نگهداری ارائه می‌کند، در نتیجه جداسازی نگرانی‌ها و کاهش تکرار کد را ترویج می‌کند.

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

یک پروژه برنامه کاربردی کنسول در ویژوال استودیو ایجاد کنید

ابتدا، اجازه دهید یک پروژه برنامه کاربردی کنسول NET Core در ویژوال استودیو ایجاد کنیم. با فرض اینکه Visual Studio 2022 در سیستم شما نصب شده است، مراحل ذکر شده در زیر را برای ایجاد یک پروژه برنامه کاربردی کنسول NET Core جدید دنبال کنید.

  1. Visual Studio IDE را راه اندازی کنید.
  2. روی “ایجاد پروژه جدید” کلیک کنید.
  3. در پنجره “ایجاد پروژه جدید”، “Console App (.NET Core)” را از لیست الگوهای نمایش داده شده انتخاب کنید.
  4. بعدی را کلیک کنید.
  5. در پنجره “پیکربندی پروژه جدید خود”، نام و مکان پروژه جدید را مشخص کنید.
  6. بعدی را کلیک کنید.
  7. در پنجره “اطلاعات اضافی” که در ادامه نشان داده شده است، “NET 7.0 (Standard Term Support)” را به عنوان نسخه چارچوبی که می خواهید استفاده کنید انتخاب کنید.
  8. روی ایجاد کلیک کنید.

ما از این پروژه برنامه کاربردی کنسول NET 7 برای کار با الگوی طراحی مشخصات در بخش‌های بعدی این مقاله استفاده خواهیم کرد.

الگوی طراحی مشخصات چیست؟

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

JetBrains Qodana پیش نمایش تجزیه و تحلیل لکه ها را برای PHP انجام می دهد

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

چرا از الگوی طراحی مشخصات استفاده کنیم؟

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

با استفاده از الگوی مشخصات، می توانید:

  • مدولار کردن کد: مشخصات قوانین و شرایط کسب و کار را در کلاس‌های جداگانه در بر می‌گیرد و درک، اصلاح و نگهداری آنها را آسان‌تر می‌کند. علاوه بر این، آنها با جدا کردن نگرانی‌ها در یک برنامه، به حفظ یک پایه کد تمیز و متمرکز کمک می‌کنند.
  • بهبود قابلیت استفاده مجدد: مشخصات را می توان با منطق اعتبارسنجی مشابه در بخش های برنامه مورد استفاده مجدد قرار داد. می‌توانید از تکرار کد جلوگیری کنید و با کپسوله کردن قوانین در اشیاء مشخصات قابل استفاده مجدد، از اعتبارسنجی ثابت در سراسر سیستم اطمینان حاصل کنید.
  • ترکیب پویا: مشخصات را می توان با استفاده از عملگرهای منطقی مانند AND، OR و NOT برای ایجاد شرایط پیچیده ترکیب کرد. ترکیب چند مشخصات به شما امکان می دهد پرس و جو یا فیلترهای پویا ایجاد کنید.
  • آزمایش ساده: مشخصات، قواعد کسب و کار فردی را نشان می‌دهند و آزمایش آنها را به صورت مجزا آسان می‌کند. در نتیجه، نوشتن آزمون‌های واحد آسان‌تر است و منطق اعتبارسنجی قوی‌تر است.
نظرسنجی JFrog نشان می دهد که هوش مصنوعی به طور گسترده برای امنیت استفاده می شود، اما برای کدنویسی استفاده نمی شود

اجرای الگوی طراحی مشخصات در سی شارپ

برای شروع پیاده سازی الگوی مشخصات، ابتدا می توانید رابط ISpecification را طراحی کنید. این یک متد به نام IsSatisfied خواهد داشت که یک شی را به عنوان پارامتر می پذیرد و یک مقدار بولی را بر اساس اینکه آیا شیء ارسال شده به عنوان پارامتر مشخصات لازم را برآورده می کند یا نه، برمی گرداند.

public interface ISpecification<T>
{
    bool IsSatisfied(T item);
}

اکنون می‌توانیم کلاسی به نام IncentiveSpecification ایجاد کنیم که بررسی می‌کند آیا کارمندی واجد شرایط مشوق‌هایی است که در قطعه کد زیر نشان داده شده است.

public class IncentiveSpecification : ISpecification<Employee>
{
 public bool IsSatisfied<Employee employee>
 {
    return employee.Basic >=5000 && employee.IsFullTime;
 }
}

در قطعه کد قبلی، روش IsSatisfied بررسی می‌کند که آیا ویژگی Basic کارمند بزرگ‌تر یا برابر با ۵۰۰۰ است و آیا کارمند یک کارمند تمام وقت است. اگر این شرط برآورده شود، کد true و در غیر این صورت false را برمی گرداند.

ایجاد و ترکیب مشخصات در سی شارپ

الگوی طراحی مشخصات، ترکیب مشخصات را آسان می کند. می توانید مشخصات را با استفاده از عملگرهای منطقی (AND، OR، NOT) ترکیب کنید تا شرایط پیچیده را در کد برنامه خود نشان دهید. یک کلاس پایه انتزاعی C# جدید با نام Specification ایجاد کنید و کد زیر را وارد کنید.

public abstract class SpecificationBase<T> : ISpecification<T>
{
    public abstract bool IsSatisfied(T item);
    public Specification<T> And(Specification<T> specification)
    {
        return new AndSpecification<T>(this, specification);
    }
    public Specification<T> Or(Specification<T> specification)
    {
        return new OrSpecification<T>(this, specification);
    }
    public Specification<T> Not()
    {
        return new NotSpecification<T>(this);
    }
}

کلاس هایی برای پیاده سازی شرایط ایجاد کنید

اکنون طبقات پیاده سازی مشخصی از مشخصات AndSpecification، OrSpecification و NotSpecification را همانطور که در لیست کد زیر نشان داده شده است ایجاد کنید.

public class AndSpecification<T> : SpecificationBase<T>
{
    private readonly SpecificationBase<T> _leftSpecification;
    private readonly SpecificationBase<T> _rightSpecification;
    public AndSpecification(SpecificationBase<T> leftSpecification, SpecificationBase<T> rightSpecification)
    {
        _leftSpecification = leftSpecification;
        _rightSpecification = rightSpecification;
    }
    public override bool IsSatisfied(T item)
    {
        return _leftSpecification.IsSatisfied(item) && _rightSpecification.IsSatisfied(item);
    }
}
public class OrSpecification<T> : SpecificationBase<T>
{
    private readonly SpecificationBase<T> _leftSpecification;
    private readonly SpecificationBase<T> _rightSpecification;
    public OrSpecification(SpecificationBase<T> leftSpecification, SpecificationBase<T> rightSpecification)
    {
        _leftSpecification = leftSpecification;
        _rightSpecification = rightSpecification;
    }
    public override bool IsSatisfied(T item)
    {
        return _leftSpecification.IsSatisfied(item) || _rightSpecification.IsSatisfied(item);
    }
}
public class NotSpecification<T> : SpecificationBase<T>
{
    private readonly SpecificationBase<T> _specification;
    public NotSpecification(SpecificationBase<T> specification)
    {
        _specification = specification;
    }
    public override bool IsSatisfied(T item)
    {
        return !specification.IsSatisfied(item);
    }
}

کلاس هایی برای پیاده سازی مشخصات ایجاد کنید

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

public class FullTimeSpecification : Specification<Employee>
{
    public override bool IsSatisfied(Employee employee)
    {
        return employee.IsFullTime;
    }
}
public class BasicSpecification : Specification<Employee>
{
   public override bool IsSatisfied(Employee employee)
    {
        return employee.Basic >= 5000;
    }
}

مشخصات را بر اساس شرایط تأیید کنید

در نهایت، می‌توانید کد زیر را بنویسید تا بررسی کنید که آیا شرایط راضی هستند یا خیر.

Employee employee = new Employee();
employee.FirstName = "Joydip";
employee.LastName = "Kanjilal";
employee.Basic = 1000;
employee.IsFullTime = true;
var basicSpecification = new BasicSpecification();
var fullTimeSpecification = new FullTimeSpecification();
var compositeSpecification = new AndSpecification<Employee>(basicSpecification, fullTimeSpecification);
var isSatisfied = compositeSpecification.IsSatisfied(employee);
if (isSatisfied)
    Console.WriteLine("The conditions are satisfied...");
else
    Console.WriteLine("The conditions are not satisfied...");
Console.ReadLine();

از آنجایی که مقدار ویژگی Basic شیء کارمند ۱۰۰۰ است، هنگام اجرای کد بالا، متن “شرایط برآورده نشده اند…” را در پنجره کنسول نمایش داده می شود.

هوش مصنوعی و آینده توسعه نرم افزار

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