Khi codebase của chúng ta chín muồi, tôi bắt đầu không thích mô hình chuyển các từ điển như là một cách để đóng gói thông tin để truyền thông điệp hoặc, tệ hơn, các đối số hàm. Nó đòi hỏi chức năng gửi và nhận cả hai đều có API không có giấy tờ của các chuỗi ký tự.Mô hình tốt hơn so với truyền NSDictionaries làm tham số?
..in some function..
NSDictionary *info = [NSDictionary dictionaryWithObjectsAndKeys:
thisObject, @"thisKey",
thatObject, @"thatKey",
nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"MY_NOTIFICATION" object:nil userInfo:info];
....
và sau đó trong người nghe someClass
's
- (void)someClassListener:(NSNotification *)notification {
NSDictionary *info = [notification userInfo];
ThisObject *ob1 = [info objectForKey:@"thisKey"];
ThatObject *ob2 = [info objectForKey:@"thatKey"];
}
Bạn phải nhớ rằng thisKey
và thatKey
là chìa khóa của loại ThisObject
và ThatObject
để thông báo rằng, chắc chắn bạn có thể tạo ra một số hằng ở đâu đó cho những người nhưng điều đó không thực sự giải quyết được vấn đề.
Và giả sử bạn có hàm cần 15 đối số, bạn sẽ không tạo hàm với 15 tham số, sẽ dễ dàng hơn nhiều (mặc dù ít có thể đọc hơn) để chuyển một từ điển nhưng bây giờ bạn có cùng một vấn đề như trên.
Tôi đã chơi với việc tạo ra các lớp thông báo trong các lớp tiêu đề của lớp đó (tức là hai giao diện trong một tiêu đề) và Lớp Thư chỉ là danh sách các đối tượng mà bạn xác định và gửi đến phương pháp tạo ra hợp đồng nhưng điều này cảm thấy sai.
Nó sẽ thật tuyệt nếu tôi có thể làm một cái gì đó giống như typeDef
một đối tượng tham số trong tiêu đề nhưng điều đó không hỗ trợ NSObject
's chỉ những thứ như int
hay float
, vv
Về cơ bản tôi đang cố gắng để tạo một hợp đồng mạnh hơn giữa người gửi tin nhắn và người nhận tin nhắn, là các chức năng hoặc thông báo đó.
Tôi đề cập đến hằng số cho khóa không phải là giải pháp tốt vì bạn vẫn phải tra cứu khóa là gì và không tạo ra một hợp đồng mạnh cho giá trị (đối tượng), giống như gợi ý. Việc đóng gói dữ liệu vào một lớp là hướng tôi đang điều tra nhưng có vẻ cồng kềnh khi tạo một lớp cho mỗi thư tôi muốn truyền, có thể là 2 đối số là 10, bạn có đồng ý không? – Shizam
@Shizam, Nếu những thông điệp đó sẽ được đưa vào các từ điển khác nhau, thì có thể bạn sẽ cần nhiều hơn một lớp. Tuy nhiên, nếu bạn đang nói về các thông điệp mà đôi khi vượt qua hai khóa từ một từ điển, và đôi khi 10, thì đó sẽ vẫn chỉ là một đối tượng lớp. – rdelmar
@rdelmar Những gì tôi quan tâm là trong suốt chương trình của chúng tôi, chúng tôi có thể có 10-15 thông báo duy nhất, mỗi thông báo đó sẽ cần lớp riêng của mình để xác định thuộc tính của nó cho tin nhắn, v.v. – Shizam