Domain Validation در NET. و Nilgon
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: دو دقیقه

در مواقع بسیاری پیش‌میاد که در توسعه‌ی لاجیک پروژه‌ها، نیازمند روند اعتبارسنجی و برگرداندن exception به سمت بخش‌های دیگر هستیم. معمولا توسعه دهندگان دات نت به صورت توکار و دستی این validation‌ها را انجام میدهند. یک مثال برایتان میزنم:
public class Person
{
     public string Firstname { get; private set; }
     public string Lastname { get; private set; }

     private Person(string firstname, string lastname)
     {
          ArgumentNullException.ThrowIfNull(firstname);
          ArgumentNullException.ThrowIfNull(lastname);
          Firstname = firstname;
          Lastname = lastname;
     }
     
     public static Person Create(string firstname, string lastname)
     {
          return new Person(firstname, lastname);
     }
}
و در زمان استفاده در لایه‌ها یا بخش‌های دیگ، به این صورت عمل می‌کنند:
public void CreateNewPerson()
{
     Person.Create("AmirAbbas", "Mottaghipour");
}
خب اول از همه Person را بررسی میکنیم. یک کلاس زیبا و ایزوله که متد سازنده‌اش تو ذوق همگان خواهد زد. چاره چیه؟ یک سری پکیج از قبل آماده شده هستند که به ما کمک میکنند این validation‌ها را تمیز‌تر بنویسیم. یک نمونه‌اش پکیج Throw هست؛ ولی به دل من آنطوری که باید ننشست و شروع کردم به توسعه‌ی پکیجی با نام Nilgon Validation. قبل از اینکه فیچری به Nilgon Validation اضافه شود، شرط‌هایی را در پکیج Nilgon Condition اضافه میکنیم. Nilgon Condition  یک پکیج کاملا جدا از Validation هست و به هیچ پکیج دیگری وابستگی ندارد و نسخه‌ی preview.1  هم از آن منتشر شده. متد‌های Nilgon Condition هم به این شکل هستند:
using Nilgon.Condition.Helpers;

public Person(string firstname)
{
     if (firstname.IsNull() && firstname.IsEmpty())
     {
          throw ...;
     }
}
در اصل کمک میکند شرط‌ها را ساده‌تر بنویسیم و کد تمیز‌تری داشته باشیم و مکمل Nilgon Validation هست. Nilgon Validation هم هنوز نسخه‌ای ازش منتشر نشده و در حال تکمیل شدن است. متدهایش هم به این صورت هستند:
public Person(string firstname, string lastname)
{
     Firstname = firsname.MustNotBeNull();
     Lastname = lastname.MustNotBeNull();
}
در این محتوا تلاش کردم یک مشکل را معرفی کنم و یک پکیج راه حل، برایش قرار دهم. پروژه‌ی Nilgon هم پروژه‌ی متن باز خودم است که با منطقی که فکر میکنم، از پکیج‌های دیگر بهتره توسعه‌اش میدم. اگر از نظر شما نیلگون مفیده، در گیتهاب star بدید و اگر هم علاقمند به توسعه‌اش هستید از لایسنس MIT پیروی میکند و میتوانید فورکش کنید.