Tôi đang viết một dịch vụ web.Trong đó xác thực lớp nào nên được thực hiện?
Thông thường, đầu vào sẽ là tài liệu XML và XML hoặc JSON đầu ra.
Ứng dụng này sử dụng patter MVC, có các lớp khác nhau
- Bộ xử lý: Nhận XML và cung cấp phản ứng (XML/JSON)
- dịch vụ: Kinh doanh logic, giao dịch
- DAO: Truy vấn các nguồn dữ liệu (Cơ sở dữ liệu hoặc có thể một dịch vụ web khác)
Hiểu biết của tôi là xác thực cơ bản (ví dụ: XML đối với XSD) phải được thực hiện càng sớm càng tốt trên lớp Trình điều khiển.
Sau đó, tôi vẫn cần phải thực hiện thêm xác nhận, một số vụ việc phê chuẩn như là cơ bản, ví dụ
- Định dạng ngày phải đúng
- Tên người dùng không thể vượt quá ký tự X (có lẽ cũng phải được thực hiện trên XSD?)
Theo như tôi hiểu, các xác thực cơ bản như vậy nên được thực hiện khi unmarshalling XML thành đối tượng Java. Đó cũng sẽ happend trong lớp điều khiển (mặc dù xác nhận chính nó sẽ được thực hiện bởi các đối tượng Java nơi XML được unmarshalled vào)
Và cuối cùng tôi phải đối mặt với nhiều "phức tạp" kiểm chứng thực ví dụ
- ngày không nên trước khi tới 1950 (chỉ là một ví dụ ngẫu nhiên)
- Nếu giá trị A là lớn hơn B, sau đó giá trị C không nên vượt quá D
như vậy valiations "phức tạp" có vẻ là một mỗi ứng viên fect cho giao diện javax.validation.Validator. Và cũng cảm thấy như họ nên được thực hiện trong lớp điều khiển.
Các câu hỏi là
- là phương pháp này có đúng không? Tôi cũng nên xác nhận điều gì đó ở các lớp khác?
- Tôi có thêm quá nhiều logic vào bộ điều khiển không? Tôi có nên di chuyển một số xác nhận đến lớp Dịch vụ trong đó logic nghiệp vụ không?
Đối với tôi, xác thực được gọi là "phức tạp" của bạn có vẻ giống nhu cầu kinh doanh hơn và như vậy nên được đặt ở lớp logic nghiệp vụ. – mawia
@mawia Điểm tốt, và cảm ơn thần tôi đã trích dẫn từ "phức tạp" :) –