Chủ Nhật, 10 tháng 7, 2016

Phương pháp xử lý ngoại lệ tốt nhất trong .NET

Bài viết đầu tiên của blog này tôi sẽ nói về phần xử lý ngoại lệ trong lập trình phần mềm bằng .NET, bài viết này được dịch từ trang Code Project 
Nội dung bài viết như sau:
Phần mềm của tôi không bao giờ có lỗi”. Các bạn có tin không? Còn tôi thì đang nghe các bạn hét rằng tôi là kẻ dối trá. “Phần mềm không có lỗi là một thứ gì đó gần như là không thể”.
Trái ngược với niềm tin thông thường, đang tạo sự tin tưởng, phần mềm vững chắc không phải là một thứ gì đó gần như là không thể. Chú ý rằng tôi không đề cập đến phần mềm không có lỗi, dự định để điều khiển những nhà máy nặng lượng hạt nhân. Tôi đang đề cập đến phần mềm quản lý chung, cái mà có thể bỏ mặc nó chạy trên máy chủ, thậm chí một máy PC, trong một khoảng thời gian dài và công việc có thế đoán trước mà không có bất kỳ trục trặc nào đáng kể. Có thể đoán trước, tôi muốn nói rằng phần mềm có một tỉ lệ lỗi thấp, bạn có thể dễ dàng hiểu các lỗi là điều kiện để sửa nó nhanh chóng và không bao giờ gây thiệt hại dữ liệu trong sự phản hồi của một lỗi bên ngoài.
Nói cách khác, phần mềm đó ổn định.
Đang có một lỗi trong phần mềm của bạn là một điều có thể tha thứ được, thậm chí là bình thường. Cái không thể tha thứ được là đang có một lỗi tuần hoàn mà bạn không thể sửa nó vì bạn không có đủ thông tin.
Để hiểu tốt nhất những gì tôi đang nói, tôi đã thấy vô số phần mềm doanh nghiệp có lỗi out of disk space trong DBMS, thông báo một thứ giống thế này:
Không thể cập nhật thông tin khách hàng. Liên hệ quản trị và thử lại sau”.
Trong khi thông báo trên có thể là một thông báo đẩy đủ một lỗi không rõ nguồn gốc cho người dùng, đây luôn luôn là tất cả các thông tin để gỡ lỗi. Không có gì được ghi trong lịch sử của phần mềm, để hiểu những gì đang xẩy ra sẻ mất thời gian và các lập trình viên thường sẽ đoán nhiều nguyên nhân có thể xẩy ra cho đến khi họ tìm thấy nguyên nhân thật sự.
Chú ý rằng trong bài viết này, tôi sẽ tập trung vào cách làm thế nào để tạo một ngoại lệ tốt nhất khi dùng .NET: tôi sẽ không bình luận thế nào là một thông báo lỗi đúng đắn, vì tôi tin rằng nó thuộc về lĩnh vực UI, nó tùy thuộc nặng vào giao diện đã phát triển và mục tiêu đối tượng; một trình soạn thảo văn bản mục tiêu nhắm đến thanh thiếu niên nên thông báo lỗi theo một cách hoàn toàn khác biệt hơn một socket server, cái mà sẽ chỉ sử dụng chủ yếu bởi các lập trình viên.
Một vài khái niệm thiết kế cơ bản sẽ tạo cho chương trình của bạn vững chắc hơn và sẽ cải thiện trải nghiệm người dùng khi bất ngờ xuất hiện một lỗi. “cải thiện trải nghiệm người dùng khi bất ngờ xuất hiện một lỗi” ý tôi muốn nói là gì? Nó không phải là người dùng sẽ cảm thấy rạo rực khi hộp thoại bạn sẽ cho anh ta xem. Nó là nhiều hơn về không làm hỏng dữ liệu, máy tính không bị treo và hành xử một cách an toàn. Nếu chương trình của bạn có thể vượt qua lỗi out of disk space mà không có bất kỳ tổn hại nào, thì bạn đã cải thiện trải nghiệm người dùng.
Kiểm tra kỹ càng và xác nhận kiểu dữ liệu là những công cụ mạnh mẽ để ngăn chặn những ngoại lệ bất ngờ và để tạo tài liệu và kiểm tra code. Trước khi khởi chạy chương trình bạn phát hiện một vấn đề, thì sửa dễ dàng hơn. Cố gắng để hiểu điều mà aCustomerID làm trên cột ProductID trong bảng InvoiceItems sau một vài tháng thì không vui vẻ gì mà cũng không dễ dàng. Nếu bạn đã sử dụng các lớp để tạo các kiểu dữ liệu tự tạo, thay vì sử dụng những kiểu dữ liệu nguyên thủy (e.g., int, string, etc), rất có thể trình biên dịch sẽ không bao giờ cho phép bạn làm một việc như thế.
Dữ liệu bên ngoài thì không đáng tin cậy, nó phải kiểm tra rất nhiều. Nó không phải là vấn đề nếu dữ liệu đến từ registry, database, từ một ổ đĩa, từ một socket, từ một tập tin bạn vừa viết hoặc từ bàn phím. Tất cả dữ liệu ngoài phải được kiểm tra và chỉ khi đó bạn có thể tin tưởng vào nó. Tôi luôn luôn thấy rằng các chương trình tin tưởng các tập tin cấu hình bởi vì các lập trình viên không bao giờ nghĩ rằng một ai đó sẽ sửa tập tin và làm sai nó.
Bất cứ khi nào bạn cần đến dữ liệu ngoài, bạn có thể có những tình huống sau:
  •      Không đủ quyền để truy cập.
  •      Thông tin không có ở đó.
  •      Thông tin không đầy đủ.
  •      Thông tin đầy đủ, nhưng vô giá trị.
Thật sự không phải không là vấn đề nếu nó là một registry key, một tâp tin, một socket, một database, một web service hay một cổng nối tiếp. Tất cả nguồn dữ liệu ngoài sẽ gặp lỗi, sớm hay muộn. Hãy lập kế hoạch cho một lỗi an toàn và giảm thiểu thiệt hại.
Ghi cũng có thể lỗi, thật vây.
Không tin vào nguồn dữ liệu cũng không tin vào nơi trữ dữ liệu. Khi bạn đang lưu dữ liệu, tương tự các tình huống sau có thể xảy ra:
  •      Không đủ quyền để ghi.
  •      Thiết bị không có ở đó.
  •      Không đủ bộ nhớ.
  •      Thiết bị gặp lỗi vật lý.
Đó là lý do chương trình ép tạo một tập tin tạm thời và đổi tên nó sau khi chúng xong việc. Thay vì thay đổi một bản gốc, nếu ổ đĩa của bạn (thậm chí cả phần mềm) gặp lỗi vì một lý do nào đó, bạn sẽ không bị mất dữ liệu gốc của mình.

Còn nữa....

Không có nhận xét nào:

Đăng nhận xét