Chuyển đến nội dung chính

Fluent Validation trong .NET

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 Person
public 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 package
dotnet 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.

Tham khảo

https://www.c-sharpcorner.com/article/using-fluentvalidation-in-net-core/

Nhận xét

Bài đăng phổ biến từ blog này

[ASP.NET MVC] Authentication và Authorize

Một trong những vấn đề bảo mật cơ bản nhất là đảm bảo những người dùng hợp lệ truy cập vào hệ thống. ASP.NET đưa ra 2 khái niệm: Authentication và Authorize Authentication xác nhận bạn là ai. Ví dụ: Bạn có thể đăng nhập vào hệ thống bằng username và password hoặc bằng ssh. Authorization xác nhận những gì bạn có thể làm. Ví dụ: Bạn được phép truy cập vào website, đăng thông tin lên diễn đàn nhưng bạn không được phép truy cập vào trang mod và admin.

ASP.NET MVC: Cơ bản về Validation

Validation (chứng thực) là một tính năng quan trọng trong ASP.NET MVC và được phát triển trong một thời gian dài. Validation vắng mặt trong phiên bản đầu tiên của asp.net mvc và thật khó để tích hợp 1 framework validation của một bên thứ 3 vì không có khả năng mở rộng. ASP.NET MVC2 đã hỗ trợ framework validation do Microsoft phát triển, tên là Data Annotations. Và trong phiên bản 3, framework validation đã hỗ trợ tốt hơn việc xác thực phía máy khách, và đây là một xu hướng của việc phát triển ứng dụng web ngày nay.

Tổng hợp một số kiến thức lập trình về Amibroker

Giới thiệu về Amibroker Amibroker theo developer Tomasz Janeczko được xây dựng dựa trên ngôn ngữ C. Vì vậy bộ code Amibroker Formula Language sử dụng có syntax khá tương đồng với C, ví dụ như câu lệnh #include để import hay cách gói các object, hàm trong các block {} và kết thúc câu lệnh bằng dấu “;”. AFL trong Amibroker là ngôn ngữ xử lý mảng (an array processing language). Nó hoạt động dựa trên các mảng (các dòng/vector) số liệu, khá giống với cách hoạt động của spreadsheet trên excel.