
آموزش کار با FluentValidation در سی شارپ
آموزش کار با FluentValidation Fundamentals در سی شارپ یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته ی آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته ی آموزشی مباحث Validation در Domain Driven Design است که با نام اصلی FluentValidation Fundamentals از شرکت Pluralsightمنتشر شده است.
اعتبارسنجی یا Validateion چیست؟
اعتبارسنجی ورودی یا Input Validation یک مبحث گسترده و پیچیده است و اغلب مشخص نیست از چه ابزارهایی استفاده می کنیم. اما بهترین شیوه ها را در این زمینه دنبال کنیم. در دوره پیش رو یاد می گیرید که چگونه در برنامه های ASP.NET Core اعتبارسنجی کنید. ابتدا ویژگی های کتابخانه FluentValidation را کشف می کنید. سپس نحوه ترکیب آنها با بهترین شیوه های DDD را کشف خواهید کرد. در نهایت، نحوه استفاده از ویژگی ها را به عنوان جایگزین کتابخانه خواهید آموخت. پس از اتمام این دوره، مهارت ها و دانش اعتبارسنجی و کتابخانه FluentValidation مورد نیاز برای انجام اعتبارسنجی در هر برنامه ASP.NET Core را خواهید داشت.

به عبارت دیگر FluentValidation یک کتابخانه دات نت برای ایجاد قوانین تأیید اعتبار قوی است که از رابط کاربری روان و عبارات lambda برای ایجاد قوانین اعتبار سنجی استفاده می کند. این به پاکسازی کد دامنه و انسجام بیشتر آن کمک می کند، همچنین به شما یک مکان واحد برای جستجوی منطق اعتبار سنجی می دهد. به مثال زیر نگاه کنید:
static class Program {
static void Main (string[] args) {
List errors = new List();
PersonModel person = new PersonModel();
person.FirstName = "";
person.LastName = "S";
person.AccountBalance = 100;
person.DateOfBirth = DateTime.Now.Date;
PersonValidator validator = new PersonValidator();
ValidationResult results = validator.Validate(person);
if (results.IsValid == false) {
foreach (ValidationFailure failure in results.Errors) {
errors.Add(failure.ErrorMessage);
}
}
foreach (var item in errors) {
Console.WriteLine(item);
}
Console.ReadLine ();
}
}
public class PersonModel {
public string FirstName { get; set; }
public string LastName { get; set; }
public decimal AccountBalance { get; set; }
public DateTime DateOfBirth { get; set; }
}
public class PersonValidator : AbstractValidator {
public PersonValidator(){
RuleFor(p => p.FirstName)
.Cascade(CascadeMode.StopOnFirstFailure)
.NotEmpty().WithMessage("{PropertyName} is Empty")
.Length(2, 50).WithMessage("Length ({TotalLength}) of {PropertyName} Invalid")
.Must(BeAValidName).WithMessage("{PropertyName} Contains Invalid Characters");
RuleFor(p => p.LastName)
.Cascade(CascadeMode.StopOnFirstFailure)
.NotEmpty().WithMessage("{PropertyName} is Empty")
.Length(2, 50).WithMessage("Length ({TotalLength}) of {PropertyName} Invalid")
.Must(BeAValidName).WithMessage("{PropertyName} Contains Invalid Characters");
}
protected bool BeAValidName(string name) {
name = name.Replace(" ", "");
name = name.Replace("-", "");
return name.All(Char.IsLetter);
}
}
خروجی کد بالا بصورت زیر می باشد:
First Name is Empty
Length (1) of Last Name Invalid
FluentValidation چیست و چه مزایایی دارد؟
FluentValidation یک کتابخانه برای تعریف و اجرای قوانین اعتبارسنجی در برنامههای .NET است. این کتابخانه به توسعهدهندگان اجازه میدهد قواعد مربوط به ورودیها و مدلهای داده را در کلاسهای جداگانه تعریف کنند و منطق اعتبارسنجی را از بخشهای دیگر برنامه تفکیک کنند. به کمک این ساختار، قوانین میتوانند به شکلی خوانا و قابلنگهداری نوشته شوند و تغییر آنها لزوماً به تغییر مستقیم کدهای اصلی پردازش داده نیاز نداشته باشد. این رویکرد در پروژههایی با قوانین اعتبارسنجی متعدد مفید است.
یکی از ویژگیهای FluentValidation، امکان تعریف قواعد با یک رابط برنامهنویسی روان و قابلفهم است. توسعهدهنده میتواند مشخص کند هر ورودی چه شرایطی باید داشته باشد و در صورت نقض یک قانون، چه خطای اعتبارسنجیای گزارش شود. این کتابخانه را میتوان در بخشهای مختلف یک برنامه .NET به کار گرفت و در صورت نیاز با معماریهای مبتنی بر ASP.NET Core یا DDD ترکیب کرد. درک نحوه طراحی Validatorها به شما کمک میکند منطق بررسی دادهها را منظمتر و مستقلتر از سایر مسئولیتهای برنامه نگه دارید.
چگونه ورودیهای کاربر را با FluentValidation بررسی کنیم؟
اعتبارسنجی ورودی یکی از مراحل مهم در پردازش دادههای دریافتشده از کاربران یا سایر سیستمها است. دادهها ممکن است خالی باشند، قالب نامناسبی داشته باشند یا با قوانین کسبوکار سازگار نباشند. FluentValidation امکان تعریف این محدودیتها را بهصورت قواعد مشخص فراهم میکند تا پیش از ادامه پردازش، وضعیت دادهها بررسی شود. با جداکردن این قوانین از منطق اصلی برنامه، تشخیص خطاها و اصلاح رفتار اعتبارسنجی در طول توسعه سادهتر خواهد شد.

در طراحی Validatorها، باید میان بررسیهای عمومی داده و قواعد خاص کسبوکار تفاوت قائل شد. برای مثال، بررسی وجود یک مقدار با بررسی اینکه یک عملیات از نظر قوانین دامنه مجاز است یا خیر، الزاماً یک مسئولیت واحد نیست. همچنین اعتبارسنجی ورودی جایگزین کنترلهای امنیتی یا بررسی مجوزهای دسترسی نمیشود. در این آموزش با قابلیتهای FluentValidation برای بررسی ورودیها آشنا میشوید و یاد میگیرید چگونه قوانین اعتبارسنجی را به شکلی ساختارمند تعریف کنید تا مدیریت خطاها و نگهداری کدها آسانتر شود.
ارتباط FluentValidation با Domain-Driven Design
Domain-Driven Design بر مدلسازی دقیق مفاهیم و قوانین کسبوکار تمرکز دارد و به همین دلیل، محل قرارگیری منطق اعتبارسنجی در آن اهمیت ویژهای پیدا میکند. برخی بررسیها به قالب یا کاملبودن ورودی مربوط هستند، در حالی که برخی دیگر باید همواره در مدل دامنه رعایت شوند. استفاده از FluentValidation میتواند به تعریف روشن قواعد ورودی کمک کند، اما برای طراحی صحیح باید مشخص شود کدام قانون به مرز ورود داده تعلق دارد و کدام قانون بخشی از مسئولیت اصلی مدل دامنه است.
ترکیب FluentValidation با DDD زمانی مؤثر است که مسئولیتها بهدرستی تفکیک شوند و قواعد کسبوکار صرفاً به یک مرحله اعتبارسنجی بیرونی وابسته نباشند. برای مثال، اگر یک محدودیت باید در تمام مسیرهای تغییر وضعیت یک Entity برقرار بماند، لازم است مدل دامنه نیز آن را حفظ کند. در مقابل، بررسیهای مربوط به شکل ورودی یا الزامات یک درخواست مشخص میتوانند در لایه اعتبارسنجی انجام شوند. این آموزش به بررسی ارتباط میان FluentValidation و اصول DDD میپردازد تا بتوانید محل مناسب تعریف قوانین را در معماری برنامه بهتر تشخیص دهید.
این آموزش FluentValidation برای چه کسانی مناسب است؟
این آموزش برای توسعهدهندگان C# و .NET مناسب است که میخواهند روش منظمتری برای تعریف و اجرای قوانین اعتبارسنجی در برنامههای خود به کار بگیرند. اگر هنگام توسعه با ورودیهای پیچیده، قوانین متعدد یا نیاز به جداسازی منطق بررسی دادهها از سایر بخشهای برنامه مواجه هستید، آشنایی با FluentValidation میتواند به بهبود ساختار کد کمک کند. سطح متوسط دوره نیز برای افرادی مناسب است که با مفاهیم پایه برنامهنویسی آشنا هستند و قصد دارند شیوههای طراحی اعتبارسنجی را عمیقتر بررسی کنند.
همچنین توسعهدهندگانی که از اصول Domain-Driven Design در پروژههای خود استفاده میکنند، میتوانند از مباحث مربوط به ترکیب Validation و DDD بهره ببرند. شناخت تفاوت میان اعتبارسنجی ورودی و حفظ قوانین دامنه، به تصمیمگیری بهتر درباره مسئولیت کلاسها و لایههای برنامه کمک میکند. در طول این آموزش، هم قابلیتهای FluentValidation و هم ارتباط آن با مدلسازی دامنه بررسی میشود تا بتوانید از این کتابخانه در ساختارهای نرمافزاری مختلف استفاده کنید و قوانین اعتبارسنجی را متناسب با نیاز پروژه سازماندهی کنید.
سرفصل مطالب آموزش ویدئویی کار با FluentValidation Fundamentals در سی شارپ
فصل اول: معرفی این دوره آموزشی- معرفی این دوره آموزشی
- مقدمه
- اعتبارسنجی در یک نگاه
- معرفی برنامه نمونه این دوره آموزشی
- اعتبارسنجی ورودی به روش ساده
- جمع بندی
- مقدمه
- اعتبار سنجی و یا Validate کردن Property های ساده
- جمع بندی: اعتبار سنجی و یا Validate کردن Property های ساده
- اعتبارسنجی و یا Validate کردن Property های پیچیده
- جمع بندی: اعتبارسنجی و یا Validate کردن Property های پیچیده
- اعتبار سنجی و یا Validate کردن مجموعه ها
- جمع بندی: اعتبارسنجی و یا Validate کردن مجموعه ها
- بررسی Inheritance Validation
- بررسی کردن Rule Set ها
- جمع بندی: اعتبارسنجی و یا Validate کردن Rule Set ها
- Throw کردن Exception ها
- جمع بندی
- مقدمه
- بررسی اعتبار سنجی شرطی
- جمع بندی: اعتبار سنجی شرطی
- تغییر دادن Cascade Mode
- جمع بندی: تغییر دادن Cascade Mode
- ادغام FluentValidation در NET Pipeline
- خودکار کردن بررسی های Model State
- جمع بندی: ادغام FluentValidation در NET Pipeline
- بررسی Validation Rule های سفارشی
- جمع بندی: اعتبار سنجی سفارشی Rule ها
- جمع بندی
- مقدمه
- بررسی Always-valid Domain Model
- بررسی Not-always-valid Domain Model و Primitive Obsession
- معرفی کردن Value Object ها: اولین بررسی
- اعتبارسنجی و یا Validation چیست؟
- معرفی کردن Value Object ها: مناسبترین روش
- جمع بندی: بررسیAlways-valid Domain Model و اعتبارسنجی
- مقایسه Validation و Invariant ها
- چگونه می توان قوانین اعتبارسنجی را در Domain Layer مدیریت کرد؟
- جمع بندی
- مقدمه
- ترکیب کردن FluentValidation با Value Object ها
- جمع بندی: ترکیب کردن FluentValidation با Value Object ها
- تفاوت در پیاده سازی های اعتبار سنجی
- بررسی مفهوم Validation Is Parsing
- اعتبار بخشیدن به داده های پیچیده
- تأیید اعتبارسنجی با استفاده از داده ها در پایگاه داده
- جمع بندی: اعتبارسنجی داده های پیچیده
- جمع بندی
- مقدمه
- بررسی Explicit Error ها
- استانداردسازی API Output
- جمع بندی: Explicit Error ها و API Output
- نحوه بررسی منحصر به فرد بودن ایمیل
- بررسی DDD Trilemma
- تکمیل کردن Validation ها
- جمع بندی: تکمیل کردن Validation ها







