2009-07-24 24 views
13

tôi thấy mình tạo ra một số lượng đáng kể của lớp wrapper, thuần túy bởi vì tôi muốn thử ra hành vi củaRule of thumb để đặt tên lớp wrapper

  • lớp mà không cho vay mình cũng với mô hình cách ly RhinoMocks (ví dụ như DirectoryInfo hoặc WindowsIdentity)
  • Native Win phương pháp API (tôi thường thu thập tất cả các phương pháp tôi cần vào một lớp duy nhất và quấn các cuộc gọi có nguồn gốc như một phương pháp học)

sau đó tôi thấy mình phụ thêm lớp học được bọc bằng chữ 'W' (để chỉ ra rằng đó là một wrapper) và vì vậy tôi kết thúc với DirectoryInfoW (trái ngược với DirectoryInfoWrapper mà có vẻ khá tiết). Tương tự như vậy, tôi kết thúc với các phương pháp bản địa được gọi là NativeMethods.DuplicateTokenW.

Điều gì sẽ là quy tắc hay để thực hiện khi đặt tên các lớp trình bao bọc?

+1

Thêm vào mặt sau là "phụ thêm";) – aberrant80

+0

Điểm tốt! Tôi đã chỉnh sửa câu hỏi của mình cho phù hợp – jpoh

Trả lời

14

Quy ước đặt tên là bất kỳ điều gì phù hợp với nhóm mà bạn đang làm việc cùng. Miễn là mọi người đều ổn với một hội nghị cụ thể, thì không sao đâu.

Tôi có xu hướng thích phiên bản tiết hơn, ví dụ: DirectoryInfoWrapper, thay vì có một chữ cái không giải thích bất kỳ điều gì không quen thuộc với mã. Nhưng đó chỉ là tôi.

3

Tôi đồng ý với aberrant80, nếu mọi người đồng ý với quy ước bạn đang sử dụng thì nó sẽ hoạt động.

Cá nhân tôi thích sử dụng tên ngắn hơn và mô tả cho mục đích của lớp học. Ít nhất là ở cấp độ giao diện. Nếu bạn đang sử dụng một khuôn khổ giả, sau đó IDirectory hoặc IDirectoryInfo sẽ là một bộ phong nha của tên, trong khi DirectoryInfoW hoặc DirectoryInfoWrapper sẽ là một người triển khai giao diện.

Ví dụ tốt hơn có thể là gói một HttpRequest; xác định một IRequest để nhà nước 'đây là những gì là quan trọng đối với ứng dụng của tôi', sau đó yêu cầu, HttpRequestWrapper, Yêu cầu, vv sẽ được thực hiện.

Vì vậy, để tóm tắt, hãy thử sử dụng tên giao diện mô tả, không quá chi tiết.

0

Cũng giống như một mặt lưu ý, tôi tìm thấy một (tốt, với tôi) cách hơn thẩm mỹ của gói phương pháp bản địa gọi:

public class NativeMethods 
{ 
     // made virtual so that it can be mocked - I don't really want 
     // an interface for this class! 
     public virtual bool RevertToSelf() 
     { 
      return WinApi.RevertToSelf(); 
     } 

     ... 

     private static class WinApi 
     { 
      [DllImport("advapi32.dll")] 
      public static extern bool RevertToSelf(); 

      ... 
     } 
} 

tức là tránh va chạm tên bằng cách đóng gói phương pháp bản địa gọi trong một lớp lồng nhau tin .

Không có giải pháp 'tốt' cho vấn đề đặt tên lớp bao bọc, mặc dù tôi có thể đi với đề xuất của aberrant80 và gọi rõ ràng trình bao bọc hàm bao của tôi.

0

Nếu bạn đang sử dụng C++, bạn có thể sử dụng không gian tên và sau đó chỉ cần sử dụng lại cùng một tên lớp. Ví dụ:

namespace WrapperNamespace 
{ 
    class MyClass {...}; 
} 

namespace InternalNamespace 
{ 
    class MyClass {...}; 
} 
Các vấn đề liên quan