Validation là gì?
Là quá trình kiểm tra dữ liệu người dùng (End User) nhập liệu đã đúng với các Quy tắc ràng buộc dữ liệu hay chưa? Tránh dữ liệu gởi đến Server là không chính xác/không sử dụng được (dữ liệu rác).
Trong lập trình C# và nhiều ngôn ngữ lập trình khác, việc xác thực dữ liệu (validate data) là một phần quan trọng của việc phát triển ứng dụng, vì nó giúp đảm bảo tính nhất quán, an toàn và đáng tin cậy của hệ thống.
Dưới đây là 1 ví dụ về việc sử dụng Validation trong C#
Trong ví dụ này, chúng ta sẽ tạo 1 console application để nhận data từ console app.Khai báo Person
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
Thực hiện việc kiểm tra trong hàm Validate()
var person = new Person();
// Get data
Console.WriteLine("Enter first name:");
person.FirstName = Console.ReadLine();
Console.WriteLine("Enter last name:");
person.LastName = Console.ReadLine();
if (string.IsNullOrWhiteSpace(person.FirstName))
{
Console.WriteLine("First name is required");
return;
}
if (string.IsNullOrWhiteSpace(person.LastName))
{
Console.WriteLine("Last name is required");
return;
}
Console.WriteLine("Validation successful!");
Hàm Validate khó mở rộng nếu bạn muốn thêm quy tắc hoặc thay đổi quy tăc validate. Để làm được điều này, chúng ta sử dụng Data Annotation.
Data Validation và Annotation
Data Annotation trong C# là kỹ thuật thêm thông tin bổ sung vào dữ liệu để mô tả ý nghĩa và cách sử dụng của dữ liệu đó. Trong trường hợp này, chúng ta sẽ dùng để validate data.
Thêm Data Annoation vào class Personpublic class Person
{
[Required(ErrorMessage = "First name is required")]
public string FirstName { get; set; }
[Required(ErrorMessage = "Last name is required")]
public string LastName { get; set; }
}
Thêm hàm Validate như sau:
var person = new Person();
// Get data
Console.WriteLine("Enter first name:");
person.FirstName = Console.ReadLine();
Console.WriteLine("Enter last name:");
person.LastName = Console.ReadLine();
// Validation
var context = new ValidationContext(person, serviceProvider: null, items: null);
var results = new List<ValidationResult>();
var isValid = Validator.TryValidateObject(person, context, results, validateAllProperties: true);
if (!isValid)
{
foreach (var validationResult in results)
{
Console.WriteLine(validationResult.ErrorMessage);
}
}
else
{
Console.WriteLine("Validation successful!");
}
Data Annotation khó bảo mở rộng và class Person đã thêm vào 1 số attribute mà có thể không dùng ở những đoạn code khác. Để khắc phục nhược điểm này, chúng ta sử dụng Fluent Validation
Fluent Validation
FluentValidation là một thư viện dùng để xác thực dữ liệu (data validation) trong ứng dụng C#
Cài đăt packagedotnet add package FluentValidation
Dưới dây là đoạn code validatte sử dụng Fluent Validation
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
//...
var person = new Person();
// Get data
Console.WriteLine("Enter first name:");
person.FirstName = Console.ReadLine();
Console.WriteLine("Enter last name:");
person.LastName = Console.ReadLine();
Console.WriteLine("Enter age:");
int age;
int.TryParse(Console.ReadLine(), out age);
person.Age = age;
var validator = new PersonValidator();
var validationResult = validator.Validate(person);
if (!validationResult.IsValid)
{
foreach (var error in validationResult.Errors)
{
Console.WriteLine(error.ErrorMessage);
}
}
else
{
Console.WriteLine("Data is valid!");
}
Tham khảo thêm: https://nhatkyhoctap.blogspot.com/2023/08/su-dung-fluent-validation-e-validate.html để biết cách customize Validation rules.
Nhận xét
Đăng nhận xét