2008-09-18 40 views
18

Làm thế nào để bạn tổ chức các phương pháp mở rộng? Nói nếu tôi đã có phần mở rộng cho các lớp đối tượng và chuỗi lớp tôi bị cám dỗ để tách những phương pháp mở rộng vào các lớp IE:Tổ chức các phương pháp mở rộng

public class ObjectExtensions 
{ 
    ... 
} 

public class StringExtensions 
{ 
    ... 
} 

tôi làm điều này quá phức tạp hoặc không làm này có ý nghĩa?

Trả lời

12

Tôi tổ chức các phương thức mở rộng bằng cách sử dụng kết hợp không gian tên và tên lớp và nó tương tự như cách bạn mô tả trong câu hỏi.

Nói chung tôi có một số loại "lắp ráp chính" trong giải pháp của tôi cung cấp phần lớn các chức năng được chia sẻ (như các phương pháp mở rộng). Chúng tôi sẽ gọi hội đồng này là "Khung" vì mục đích thảo luận.

Trong khuôn khổ khung, tôi cố gắng bắt chước không gian tên của những thứ mà tôi có phương pháp mở rộng. Ví dụ, nếu tôi đang mở rộng System.Web.HttpApplication, tôi sẽ có một không gian tên "Framework.Web". Các lớp như "String" và "Object" nằm trong không gian tên "Hệ thống", dịch sang không gian tên "Khung" gốc trong hội đồng đó.

Cuối cùng, đặt tên dọc theo các dòng bạn đã chỉ định trong câu hỏi - tên loại có "Tiện ích mở rộng" làm hậu tố. Điều này mang lại một hệ thống phân cấp lớp như thế này:

  • Framework (namespace)
    • Framework.ObjectExtensions (class)
    • Framework.StringExtensions (class)
    • Framework.Web (namespace)
      • Framework.Web.HttpApplicationExtensions (class)

Lợi ích là, từ quan điểm bảo trì, thật dễ dàng để tìm phương pháp mở rộng cho một loại nhất định.

+0

Chà, điều tốt là tôi đã chạy vào câu trả lời này trước khi tạo lớp mở rộng đầu tiên của mình. – Sung

3

Có hai cách mà tôi tổ chức các phương pháp khuyến nông mà tôi sử dụng,

1) Nếu phần mở rộng là cụ thể cho dự án tôi đang làm việc trên, sau đó tôi giữ nó trong cùng một dự án/lắp ráp, nhưng trong không gian tên riêng của nó.

2) Nếu phần mở rộng là một loại để tôi có thể hoặc đang sử dụng nó trong các dự án khác, sau đó tôi tách chúng trong một hội đồng chung cho các phần mở rộng.

Điều quan trọng nhất cần ghi nhớ là, phạm vi mà tôi sẽ sử dụng các tính năng này là gì? Tổ chức chúng không khó nếu tôi chỉ ghi nhớ điều này.

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