2010-08-13 31 views
6

Khi nhìn vào một số mã phản xạ từ các thư viện WCF, tôi nhìn thấy một mô hình sử dụng để tạo ra ngoại lệ:Giá trị của các nhà máy ngoại lệ là gì?

if(argument == null) 
{ 
    throw Error.ArgumentNull("argument"); 
} 

luận Null là một ví dụ đơn giản nhất, với các loại ngoại lệ có sẵn thông qua các lớp lỗi tĩnh.

Giá trị của mẫu nhà máy này là gì? Tại sao không sử dụng toán tử new và chỉ cần gọi hàm tạo ArgumentNullException?

Trả lời

2

Lý do lớn nhất tôi thấy là chuẩn hóa cách ngoại lệ được xử lý và xác định trong khuôn khổ của một nhóm phát triển cụ thể (hoặc nhóm). Ngay cả Microsoft phát hành rằng các loại ngoại lệ khác nhau không phải là tiêu chuẩn cụ thể giữa Ngoại lệ, SystemException và ApplicationException. Nó có thể là nhu cầu của ngoại lệ có thể khác nhau tùy thuộc vào các quy tắc quản lý các trường hợp logic cụ thể. Nó cũng hữu ích cho việc loại bỏ các tác vụ phổ biến (chẳng hạn như đăng nhập) từ các mối quan tâm hàng ngày của nhà phát triển. Tất cả các nhà phát triển phải làm là sử dụng ngoại lệ thích hợp trong nhà máy và nhà máy sẽ chăm sóc phần còn lại.

+0

Có bất kỳ ví dụ nào về loại tiêu chuẩn bạn đang đề cập đến không? –

+0

@Programming Hero - Tôi đang đề cập đến các tiêu chuẩn nội bộ. Ví dụ, trong nhóm phát triển của chúng tôi ở đây tại nơi làm việc, chúng tôi (các khách hàng tiềm năng) gặp nhau ngay sau khi được giao cho dự án đầu tiên của chúng tôi và băm ra những điều cơ bản về những gì chúng tôi muốn: đặt tên tiêu chuẩn, ghi nhật ký, xử lý ngoại lệ, xử lý sự kiện, n-tier Chúng tôi đã không tạo ra một nhà máy, nhưng chúng tôi đã chỉ định trong các tài liệu chuẩn của chúng tôi để sử dụng System.Exception thay vì ApplicationException và các tiêu chuẩn cho khi ngoại lệ phải được ghi lại, bị bắt, xử lý hoặc bỏ qua. –

0

Nhà máy có thể thực hiện công việc bổ sung, chẳng hạn như đăng nhập ngoại lệ?

+1

Nó chỉ có thể ghi lại việc tạo ngoại lệ. Không có dấu vết ngăn xếp hoặc bất kỳ thông tin thực sự hữu ích nào ở giai đoạn đó. –

+0

@Programming Hero: Có thể _conceivably_ sử dụng lớp 'StackTrace' để tạo ra một dấu vết ngăn xếp. Không phải là nó nên. –

5

Tôi nghĩ lý do chính là các thông báo ngoại lệ .NET được bản địa hóa. Văn bản tin nhắn thực sự cần được lấy ra từ một tài nguyên chuỗi. Tốt hơn là nên đặt loại mã đó ở một nơi để không ai sẽ mò mẫm tên tài nguyên chuỗi.

Ý tưởng sử dụng một nhà máy để loại ngoại lệ thực tế có thể được tinh chỉnh tấn công tôi ít hữu ích hơn. Làm như vậy có thể phá vỡ rất nhiều mã máy khách, vì lý do gì đó, cố gắng nắm bắt ngoại lệ đó. Một khi bạn gửi mã mà ném một ngoại lệ cụ thể, bạn đang khá nhiều bị mắc kẹt với nó. Chọn một cách khôn ngoan :)

Các vấn đề liên quan