Có phải là cách thực hành tốt để sử dụng ngoại lệ và ném / bắt ngoại lệ thay vì trả về 0 hoặc 1 từ các hàm và sau đó sử dụng if / other để xử lý lỗi. Do đó, làm cho nó dễ dàng hơn để thông báo cho người dùng về vấn đề này.
Không không không!
Đừng trộn lẫn các ngoại lệ và lỗi. Ngoại lệ là, tốt, đặc biệt. Lỗi thì không. Khi bạn yêu cầu người dùng nhập số lượng sản phẩm và người dùng nhập "xin chào", đó là một lỗi. Đó không phải là một ngoại lệ: không có gì đặc biệt khi thấy đầu vào không hợp lệ từ người dùng. Tại sao bạn không thể sử dụng ngoại lệ trong các trường hợp không đặc biệt, như khi xác thực đầu vào? Những người khác đã giải thích nó rồi, và hiển thị một sự thay thế hợp lệ cho xác nhận đầu vào.
Điều này cũng có nghĩa là người dùng không quan tâm đến các ngoại lệ của bạn và hiển thị các ngoại lệ vừa không thân thiện vừa nguy hiểm . Ví dụ: một ngoại lệ trong khi thực hiện truy vấn SQL thường tiết lộ chính truy vấn đó. Bạn có chắc chắn muốn mạo hiểm để hiển thị thông điệp như vậy cho mọi người?
nhiều hơn một điều có thể sai, chẳng hạn như vấn đề cơ sở dữ liệu, mục trùng lặp, sự cố máy chủ, v.v. Khi xảy ra sự cố trong quá trình đăng ký, người dùng cần biết về nó.
Sai lầm. Là người dùng, tôi không cần biết các vấn đề về cơ sở dữ liệu, các mục trùng lặp, v.v. Tôi thực sự không quan tâm đến các vấn đề của bạn . Những gì tôi làm cần phải biết là tôi bước vào một tên người dùng đó đã tồn tại. Như đã nói, một đầu vào sai từ tôi phải gây ra lỗi, không phải là ngoại lệ.
Làm thế nào để xuất ra những lỗi đó? Nó phụ thuộc vào ngữ cảnh. Đối với tên người dùng đã được sử dụng, tôi muốn thấy một lá cờ nhỏ màu đỏ xuất hiện gần tên người dùng, thậm chí trước khi gửi biểu mẫu, nói rằng tên người dùng đã được sử dụng. Không có JavaScript, cùng một cờ phải xuất hiện sau khi gửi.
Đối với các lỗi khác, bạn sẽ hiển thị toàn bộ trang có lỗi hoặc chọn một cách khác để thông báo cho người dùng rằng có lỗi xảy ra (ví dụ: một thông báo sẽ xuất hiện, sau đó mờ dần ở đầu trang). Câu hỏi sau đó liên quan nhiều đến trải nghiệm người dùng hơn là lập trình.
Từ quan điểm lập trình viên, tùy thuộc vào loại lỗi, bạn sẽ tuyên truyền nó theo những cách khác nhau. Ví dụ: trong trường hợp tên người dùng đã được sử dụng, yêu cầu AJAX http://example.com/?ajax=1&user-exists=John
sẽ trả về một đối tượng JSON cho biết:
- Người dùng đã tồn tại,
- Thông báo lỗi hiển thị cho người dùng.
Điểm thứ hai rất quan trọng: bạn muốn chắc chắn rằng cùng một thông báo xuất hiện cả khi gửi biểu mẫu với JavaScript bị vô hiệu hóa và nhập tên người dùng trùng lặp với JavaScript được bật. Bạn không muốn sao chép văn bản của thông báo lỗi trong mã nguồn phía máy chủ và bằng JavaScript!
Đây thực sự là kỹ thuật được sử dụng bởi các trang web Stack Exhange. Ví dụ: nếu tôi cố gắng nâng cao câu trả lời của riêng mình, phản hồi AJAX chứa lỗi hiển thị:
{"Success":false,"Warning":false,"NewScore":0,"Message":"You can't vote for your own post.",
"Refresh":false}
Bạn cũng có thể chọn một cách tiếp cận khác và đặt trước các lỗi trong trang HTML trước khi biểu mẫu được điền. Ưu điểm: bạn không phải gửi thông báo lỗi trong phản hồi AJAX. Nhược điểm: những gì về khả năng tiếp cận? Hãy thử duyệt trang mà không có CSS và bạn sẽ thấy tất cả các lỗi có thể xuất hiện.