Giới thiệu về Eskema
Mỗi dự án Dart đều có một file mà bạn biết rõ — file chứa đầy những câu lệnh kiểm tra như if (value == null || value is! String || value.isEmpty). Đó chính là file mà mọi người thường tránh xa vì nó trở nên phức tạp và khó hiểu. Điều này đã khiến tôi tạo ra Eskema.
Eskema là một thư viện xác thực dữ liệu mạnh mẽ, giúp bạn dễ dàng kiểm tra các giá trị mà không phải lo lắng về việc tạo mã tự động phức tạp. Thư viện này mang lại sự đơn giản và khả năng mở rộng cao, phù hợp với mọi nhu cầu xác thực của bạn.
Tại sao chọn Eskema?
Tính năng nổi bật
-
API có thể kết hợp: Các bộ xác thực trong Eskema chỉ là các hàm Dart nhận giá trị và trả về
Result. Bạn có thể kết hợp chúng một cách tự do với các toán tử nhưall(),or(), hoặc toán tử&/|. Điều này giúp logic xác thực trở nên dễ hiểu và dễ tuỳ biến. -
Bộ xác thực tích hợp phong phú: Eskema cung cấp nhiều kiểu kiểm tra như
isString(),isInt(),isEmail(), và nhiều hơn nữa. Các kiểm tra sự hiện diện và so sánh cũng được tích hợp sẵn. -
Cú pháp toán tử: Bạn có thể kết hợp các bộ xác thực bằng toán tử
&(AND) và|(OR), và đảo ngược kiểm tra vớinot(). Ví dụ, thay vì viếtall([isString(), isNotEmpty()]), bạn có thể viết$isString & isNotEmpty(). -
Ngữ nghĩa tùy chọn và có thể null: Mặc định, một khóa phải có mặt và không null. Bạn có thể sử dụng
nullable(validator)để cho phép trường có thể lànull, hoặcoptional(validator)để cho phép nó không có mặt hoàn toàn. -
API builder: Eskema cung cấp một API builder cho những ai thích một cách tiếp cận an toàn về kiểu dữ liệu. Ví dụ:
final userValidator = $map().schema({ 'id': $string().trim().toIntStrict().gt(0), 'email': $string().trim().toLowerCase().email(), 'age': $string().toIntStrict().gte(18).optional(), }); -
Không cần mã tự động: Eskema xác thực các bản đồ và giá trị Dart thông thường trong thời gian chạy, không cần bước dựng mã hay lớp được tạo tự động.
-
Sẵn sàng cho sản xuất: Thư viện đã được kiểm tra đầy đủ, có tài liệu và thông báo lỗi hợp lý.
Ví dụ Xác thực Chức năng
Dưới đây là một bộ xác thực cho một đối tượng người dùng sử dụng API chức năng:
dart
final userSchema = eskema({
'username': isString() & isNotEmpty(),
'password': isString() & hasLength(8, 32),
'email': isString() & isEmail(),
'signupDate': optional(isDateTime()),
});
final result = userSchema.validate({
'username': 'alice',
'password': 'secret123',
'email': 'alice@example.com',
// signupDate bỏ qua là OK (tùy chọn)
});
if (!result.isValid) {
print(result.expectations);
}
So sánh Trước và Sau khi dùng Eskema
Chúng ta đều đã từng viết mã xác thực như thế này:
dart
bool validateUser(Map<String, dynamic> user) {
if (user['username'] == null || user['username'] is! String || user['username'].isEmpty) {
return false;
}
// Các kiểm tra khác...
return true;
}
Với Eskema, bạn có thể viết lại logic này một cách rõ ràng và dễ hiểu hơn:
dart
final userSchema = eskema({
'username': isString() & isNotEmpty(),
'password': isString() & hasLength(8, 32),
'email': isString() & isEmail(),
});
final result = userSchema.validate({...});
print(result.isValid); // true
Sử dụng Builder
Đối với những ai thích cách tiếp cận mượt mà, API builder của Eskema cho phép bạn kết hợp các bộ xác thực một cách dễ dàng và an toàn:
dart
final mapValidator = $map().schema({
'id': $string().trim().toIntStrict().gt(0),
'tags': $list().each($string()).lengthMin(1),
});
final res = mapValidator.validate({'id': '42', 'tags': ['dart', 'eskema']});
print(res.isValid); // true
Mẹo và Thực hành Tốt
- Sử dụng các phím tắt
$: Nhiều bộ xác thực không tham số có alias được lưu trữ. - Sử dụng toán tử: Làm quen với các toán tử
&,|vànot(). - Thông báo lỗi rõ ràng: Sử dụng
>để ghi đè thông điệp. - Hỗ trợ bất đồng bộ: Cần kiểm tra bất đồng bộ? Chỉ cần sử dụng
.validateAsync().
Kết luận
Eskema giúp bạn đơn giản hóa quá trình xác thực dữ liệu với cú pháp rõ ràng và linh hoạt. Nếu ứng dụng của bạn xử lý dữ liệu động, hãy thử Eskema. Một vài bộ xác thực tiện lợi có thể giúp bạn tránh khỏi các lỗi khó chịu và nâng cao hiệu suất lập trình.
👉 Hãy trải nghiệm ngay: Eskema trên GitHub.