Mẫu thiết kế để xác thực dữ liệu


23

Điều gì sẽ là mẫu thiết kế tốt nhất cho vấn đề này:

Tôi có một đối tượng A. Đối tượng A có thể được đăng ký hoặc xóa khỏi cơ sở dữ liệu tùy thuộc vào yêu cầu của người dùng.

Xác thực dữ liệu được thực hiện trước khi đăng ký hoặc xóa đối tượng. Có một bộ quy tắc được kiểm tra trước khi đối tượng có thể được đăng ký và một bộ quy tắc khác để xóa. Một số quy tắc này là phổ biến cho cả hai hoạt động.

Cho đến nay, tôi nghĩ rằng mẫu thiết kế Chuỗi trách nhiệm phù hợp nhất nhưng tôi gặp khó khăn khi thực hiện nó.


6
Tại sao bạn nghĩ rằng mẫu thiết kế Chuỗi trách nhiệm là phù hợp nhất?
Adam Zuckerman

Câu trả lời:


17

Thông thường tôi sẽ sử dụng một lớp trình xác nhận riêng để xác thực từng trường hợp sử dụng. Ví dụ: trước khi thêm sản phẩm vào cơ sở dữ liệu, tôi sẽ sử dụng Add SẢNtValidator để xác thực quy tắc kinh doanh, trước khi xóa sản phẩm, tôi sẽ sử dụng Delete SẢNtValidator để xác thực, v.v.

Để cấu trúc lớp trình xác nhận, tôi làm theo cách tiếp cận ở đây: http://lostechies.com/jimmybogard/2007/10/24/entity-validation-with-visitor-and-extension-methods/

Nếu bạn sử dụng .NET, tôi nghĩ rằng bạn có thể muốn xem xét Xác thực thông thạo ( https://github.com/JeremySkinner/FluentValidation ). Tôi nghĩ nó khá tuyệt và khá gần với bài viết tôi đã đề cập ở trên


1
url mới của Xác thực thông thạo: github.com/JeremySkinner/FluentValidation
Brij

4

Theo mô tả, tôi có thể sẽ thực hiện một loại tùy chọn . Bằng cách đó, tôi có thể trả về "Không" hoặc giá trị được xác thực (có lẽ là lười biếng) nhưng đó là một chi tiết triển khai và dẫn đến ý tưởng sử dụng Công cụ trang trí .

Mẫu trang trí

Tất nhiên nếu giao diện trở nên xấu, tôi sẽ sử dụng mặt tiền .


Trình trang trí sẽ hoạt động, nhưng tôi thường nghĩ mẫu Trang trí như một thứ được sử dụng khi bạn muốn chuyển đổi đầu ra thành đầu vào cho một lớp khác sử dụng. Trong trường hợp này, bạn chỉ cần xác nhận. Tôi nghĩ rằng chuỗi trách nhiệm có thể làm việc tốt hơn imho.
Neil
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.