Tôi đang làm việc trên một dự án .NET, cần tương tác với một số lớp do người dùng định nghĩa - được sắp xếp thành "công việc". Tất cả các lớp công việc phải thực hiện một giao diện cụ thể IJob
theo thứ tự cho thư viện để tiêu thụ chúng. Đôi khi một lớp công việc có thể chứa tài nguyên không được quản lý, cần phải được xử lý rõ ràng.Tôi nên đảm bảo xử lý các vật thể có thể dùng một lần như thế nào?
Làm cách nào để đảm bảo rằng tất cả công việc được xử lý đúng cách sau khi sử dụng, nếu tôi không biết trước nếu công việc cần xử lý rõ ràng? Tôi có một vài ý tưởng bản thân mình, nhưng tôi muốn nghe ý kiến của bạn/gợi ý:
Hãy
IJob : IDisposable
, buộc tất cả các công việc để thực hiện một phương phápDispose()
. Điều này sẽ cho phép tôi làm việc với các công việc trong các khốiusing
, nhưng vì hầu hết công việc là không phải được mong đợi cần xử lý rõ ràng, điều này có thể thêm nhầm lẫn không cần thiết cho các nhà phát triển ứng dụng khách.làm tất cả công việc liên quan đến công ăn việc làm trong
try-finally
khối, và sử dụngfinally
để đảm bảo rằngDispose()
được gọi là nếu công việc thực hiệnIDisposable
. Điều này làm cho nó dễ dàng hơn cho các khách hàng để thực hiện một lớp công việc mới - bằng cách không phải thực hiện một phương thức trống rỗngDispose()
- nhưng nó cũng che giấu thực tế rằng thư viện biết và quan tâm đến các công việc dùng một lần.
Sau khi viết điều này, tôi có xu hướng nghiêng về giải pháp # 1, nhưng tôi vẫn nghĩ sẽ rất tốt khi xem các giải pháp thay thế và các ưu điểm khác.
Điểm tốt. Tuy nhiên, hầu hết các luồng sẽ cần xử lý, và tôi mong đợi một thiểu số công việc cần thiết. –
Nó xảy ra với tôi rằng 'System.Web.IHttpModule' cũng yêu cầu người triển khai của nó cung cấp phương thức' Dispose() ', mặc dù chỉ có vài mô-đun (IMHO) cần nó. Tôi đoán điều này cung cấp ưu tiên bổ sung cho # 1. –
+1, tôi nghĩ rằng hơn nữa, nó có ý nghĩa để cung cấp một phương pháp tiêu chuẩn hóa cho một công việc để làm sạch những gì nó được sử dụng. Bằng cách sử dụng 'IDisposable' bạn sẽ được hưởng lợi từ sự hỗ trợ khung và người dùng cuối được hưởng lợi từ ít nhất là phải suy nghĩ về nơi để đặt mã dọn dẹp thích hợp. – user7116