2012-12-06 22 views
7

Tôi có giải pháp cho vấn đề thông báo hoạt động tốt, nhưng tôi sợ có thể là một ý tưởng tồi.Phương pháp và phương pháp lớp học có cùng tên trong Mục tiêu-C

Tôi có thông báo cần được xử lý bởi từng trường hợp của một lớp và theo chính lớp đó. Để xử lý điều này, tôi đăng ký một thông báo bởi cả lớp và các thể hiện của lớp. Vì đó là thông báo chính xác, tôi đã đặt tên cho lớp và phương thức thể hiện giống nhau. Điều này tuân theo tiêu chuẩn chúng tôi đã đặt cho cách trình xử lý thông báo được đặt tên.

Đây có phải là ý tưởng tồi không? Có một số got'ca ẩn mà tôi đang thiếu. Tôi có thể nhầm lẫn giữa các nhà phát triển trong tương lai không?

+ (void)initialize 
{ 
    if (self == [SICOHTTPClient class]) { 
     [[self notificationCenter] addObserver:self 
             selector:@selector(authorizationDidChangeNotification:) 
              name:SICOJSONRequestOperationAuthorizationDidChangeNotification 
             object:nil]; 
    } 
} 

- (id)initWithBaseURL:(NSURL *)url 
{ 
    self = [super initWithBaseURL:url]; 

    if (self) { 
     self.parameterEncoding = AFJSONParameterEncoding; 
     [self registerHTTPOperationClass:[SICOJSONRequestOperation class]]; 
     [self setDefaultHeader:@"Accept" value:@"application/json"]; 

     if ([[self class] defaultAuthorization]) 
      [self setDefaultHeader:@"Authorization" value:[[self class] defaultAuthorization]]; 

     [[[self class] notificationCenter] addObserver:self 
               selector:@selector(authorizationDidChangeNotification:) 
                name:SICOJSONRequestOperationAuthorizationDidChangeNotification 
               object:nil]; 
    } 

    return self; 
} 

- (void)dealloc 
{ 
    [[[self class] notificationCenter] removeObserver:self 
               name:SICOJSONRequestOperationAuthorizationDidChangeNotification 
               object:nil]; 
} 

#pragma mark Notifications 

- (void)authorizationDidChangeNotification:(NSNotification *)notification 
{ 
    NSString *authorization = notification.userInfo[SICOJSONRequestOperationAuthorizationKey]; 

    if ([authorization isKindOfClass:[NSString class]]) { 
     [self setDefaultHeader:@"Authorization" value:authorization]; 
    } else { 
     [self clearAuthorizationHeader]; 
    } 
} 

+ (void)authorizationDidChangeNotification:(NSNotification *)notification 
{ 
    NSString *authorization = notification.userInfo[SICOJSONRequestOperationAuthorizationKey]; 

    if ([authorization isKindOfClass:[NSString class]]) { 
     [self setDefaultAuthorization:authorization]; 
    } else { 
     [self setDefaultAuthorization:nil]; 
    } 
} 
+1

Siêu câu hỏi. Tôi không có hàng ngàn điểm, nhưng tôi có thể nói, các thể hiện và các phương thức lớp sẽ không xung đột, vì nhu cầu và triển khai của chúng rất khác nhau. –

Trả lời

3

Đây là những gì ý kiến ​​mã là dành cho :)

Không có vấn đề trong Objective C với một phương pháp học và phương pháp dụ có cùng tên.

tôi sẽ đề nghị một trong hai:

  • sửa đổi thông báo tên phương pháp spec để xử lý việc này (và sau đó xử lý các thông báo lớp học với một phương thức có tên thích hợp khác nhau) hoặc

  • thêm lời bình thích hợp để giải thích những gì đang xảy ra vì lợi ích của các nhà phát triển có khả năng bị nhầm lẫn trong tương lai

+0

Tôi nghĩ bạn nói đúng. Các bình luận sẽ đủ tốt để các nhà phát triển trong tương lai có thể nhìn thấy điểm của các phương thức lớp/thể hiện. Cảm ơn vì đầu vào của bạn. –

1

Bản thân ngôn ngữ và thời gian chạy sẽ se e không mơ hồ trong những gì bạn đang làm. Vì vậy, bạn an toàn trên mặt trận đó.

Trong điều khoản của người bảo trì trong tương lai khó hiểu, tôi đoán bạn không cần phải quá quan tâm với những lỗi tự động hoàn thành ngớ ngẩn vì nó không phải là phương pháp bạn dự định thực hiện cuộc gọi thủ công.

Điều đó nói rằng, tôi sẽ bị cám dỗ để chuyển nội dung lớp học thành một thể loại nhân tạo. Điều đó sẽ không chỉ cho phép tách biệt trên trang nhưng làm cho nó rõ ràng rằng lớp dự định trả lời dưới dạng một loạt các chức năng riêng biệt từ các câu trả lời cá thể.