2013-05-06 19 views
5

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à

  1. 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?
  2. 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?
+1

Đố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

+0

@mawia Điểm tốt, và cảm ơn thần tôi đã trích dẫn từ "phức tạp" :) –

Trả lời

2

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?

Có, một phần. Có vẻ như chính xác để xác thực dữ liệu đầu vào cho đúng như định dạng ngày, độ dài, vv Không cần phải đẩy chúng vào các lớp bên trong. Họ cần phải được xác nhận trả trước.

Có thể có một số xác thực theo quy tắc kinh doanh cần được thực hiện ở lớp dịch vụ, như tên người dùng/email đã được đăng ký trong khi thêm người dùng vào hệ thống, sẽ được thực hiện trong lớp dịch vụ.

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?

Nó không được coi là logic từ quan điểm của tôi. Việc xác nhận hợp lệ dữ liệu vào bộ điều khiển khác với việc thêm logic nghiệp vụ vào nó. Bạn không thay đổi/manupulating dữ liệu, nhưng kiểm tra tính chính xác của dữ liệu.

Như đã đề cập ở trên, một số xác thực tuân theo quy tắc kinh doanh cần được triển khai trong lớp dịch vụ.

Chỉnh sửa: Khi bạn đã thêm thẻ dịch vụ web, hãy tưởng tượng bạn đang gọi dịch vụ web & sau đó ở phía máy chủ, dữ liệu đó có định dạng không đúng. Nó có thể đã lưu một chuyến đi vòng, thời gian máy chủ, tài nguyên mạng, vv nếu nó đã được xác nhận trước đó.

+0

Giả sử tôi cần xác thực rằng tên người dùng không được vượt quá 15 ký tự và nó phải là duy nhất. Giới hạn 15 ký tự sẽ xảy ra trong bộ điều khiển và kiểm tra tính duy nhất sẽ xảy ra trong lớp dịch vụ/kinh doanh? – Aquillo

+1

@Aquillo Vâng, có thể hạn chế yêu cầu trong bộ điều khiển để xác nhận độ dài vv thay vì tiếp tục cho đến khi lớp dịch vụ xác định nó. Do đó, dữ liệu phải trải qua giai đoạn xác nhận ban đầu ban đầu để tiến hành giai đoạn tiếp theo, đó là cách tiếp cận sạch hơn và thuận lợi hơn. –

+0

Ok cảm ơn vì đã xác minh cách tiếp cận của tôi :) – Aquillo