tôi thấy hai câu hỏi ở đây, và ở đây là mất của tôi ...
Are hạn chế cơ sở dữ liệu tốt? Đối với các hệ thống lớn, chúng không thể thực hiện được. Hầu hết các hệ thống lớn có nhiều hơn một giao diện người dùng và không phải lúc nào cũng có các ngôn ngữ tương thích, nơi có thể chia sẻ logic kiểm tra dữ liệu giữa cấp hoặc giao diện người dùng. Chúng cũng có thể có các quy trình lô trong Transact-SQL hoặc chỉ PL/SQL. Nó là tốt để nhân đôi việc kiểm tra trên mặt trước, nhưng trong một ứng dụng đa người dùng cách duy nhất để thực sự kiểm tra tính độc đáo là để chèn các bản ghi và xem những gì cơ sở dữ liệu nói. Cùng với các ràng buộc khóa ngoại - bạn không thực sự biết cho đến khi bạn cố gắng chèn/cập nhật/xóa.
Trường hợp ngoại lệ có được phép ném hoặc trả về giá trị được thay thế không? Dưới đây là mã từ câu hỏi:
try
{
// inset data
}
catch (SqlException ex)
{
if (ex.Message.ToLower().Contains("duplicate key"))
{
if (ex.Message.ToLower().Contains("url"))
{
return 1; // Sure, that's one good way to do it
}
if (ex.Message.ToLower().Contains("email"))
{
return 2; // Sure, that's one good way to do it
}
}
return 3; // EVIL! Or at least quasi-evil :)
}
Nếu bạn có thể đảm bảo rằng các chương trình gọi điện thoại thực sự sẽ hành động dựa trên các giá trị trả về, tôi nghĩ rằng return 1
và return 2
được tốt nhất còn lại để phán xét bạn. Tôi thích để rethrow một ngoại lệ tùy chỉnh cho các trường hợp như thế này (ví dụ DuplicateEmailException
) nhưng đó chỉ là tôi - giá trị trả lại sẽ làm các trick quá. Sau khi tất cả, các lớp người tiêu dùng có thể bỏ qua các ngoại lệ dễ dàng như họ có thể bỏ qua các giá trị trả về.
Tôi chống lại số return 3
. Điều này có nghĩa là có một ngoại lệ không mong muốn (cơ sở dữ liệu bị hỏng, kết nối kém, bất cứ điều gì). Ở đây bạn có lỗi không xác định và thông tin chẩn đoán duy nhất bạn có là: "3". Hãy tưởng tượng đăng một câu hỏi trên SO nói rằng Tôi đã cố gắng chèn một hàng nhưng hệ thống đã nói '3'. Xin cho biết. Nó sẽ bị đóng trong vài giây :)
Nếu bạn không biết cách xử lý ngoại lệ trong lớp dữ liệu, không có cách nào để người tiêu dùng của lớp dữ liệu có thể xử lý nó. Tại thời điểm này bạn đang khá nhiều hosed vì vậy tôi nói đăng nhập lỗi, sau đó thoát ra như gracefully càng tốt với một "Unexpected error" tin nhắn.
Tôi biết tôi đã nói một chút về ngoại lệ không mong muốn, nhưng tôi đã xử lý quá nhiều sự cố hỗ trợ trong trường hợp lập trình viên chỉ sắp xếp lại ngoại lệ cơ sở dữ liệu và khi có điều gì đó bất ngờ xuất hiện ứng dụng không thành công hoặc không thành công. thông tin. Rất nghịch ngợm.
Nguồn
2013-03-22 19:22:02
Như một điều này, nếu bạn kiểm tra. Tôi sẽ kiểm tra trên ErrorCode vì điều đó sẽ độc đáo hơn và ít có khả năng thay đổi: http://msdn.microsoft.com/en-us/library/aa258747(v=sql.80).aspx –