2008-12-10 17 views
5

Cho phép nói rằng tôi có một cái nhìn, myView, một bộ điều khiển xem, myViewController, và một số loại đối tượng mô hình, myModel. Hơn nữa, giả sử mô hình có hai thuộc tính tuân thủ KVO, arrayOfPeopleNamesarrayOfAnimalKinds (cả hai NSStrings).MVC và cacao ràng buộc thực hành tốt nhất câu hỏi

Theo quan điểm của tôi, tôi muốn có hai cửa sổ bật lên bị ràng buộc với nội dung của hai mảng này.

Câu hỏi của tôi là, nếu myController có tham chiếu đến myModel và trình đơn thả xuống bị ràng buộc với myViewController là cách hay để đặt đường phím dọc theo các dòng myModel.arrayOfPeopleNames?

Hoặc tôi có cần phải thiết lập NSArray bổ sung trong myViewController mà phản chiếu một trong myModel và liên kết với đường phím đó thay thế không?

Thứ nguyên có vẻ đơn giản hơn rất nhiều so với điểm triển khai (tôi không phải làm cho mảng bộ điều khiển phản chiếu mảng mô hình), nhưng tôi tự hỏi liệu nó có hiển thị nhiều cho khung nhìn hay không.

Ý kiến?

Trả lời

8

Bạn không nên phản chiếu mảng của mô hình trong bộ điều khiển. Mặc dù tôi sẽ không quá lo lắng về việc ràng buộc trực tiếp vào mảng của mô hình trong một trường hợp rất đơn giản, bạn cũng có thể ràng buộc các đối tượng UI của bạn với một NSArrayController, nó quản lý mảng của mô hình. Điều này sẽ cung cấp sự tách biệt giữa mô hình và giao diện người dùng và quan trọng hơn là xử lý các tác vụ như sắp xếp, lựa chọn, thêm và xóa đối tượng, v.v.

Tôi có thể thấy bạn đến từ đâu bằng cách quan tâm KVO và các ràng buộc vi phạm thiết kế bộ điều khiển kiểu xem "thuần túy", nhưng đó không phải là điều bạn nên lo lắng. Mặc dù các thông báo KVO truyền trực tiếp đến khung nhìn từ mô hình, việc thiết lập và thay đổi kết nối giữa khung nhìn và mô hình vẫn là trách nhiệm của bộ điều khiển (chỉ trong trường hợp này nó được thực hiện thông qua IB thay thế). Ví dụ, bạn sẽ không muốn một đối tượng mô hình để có được một tham chiếu đến khung nhìn, và tự ràng buộc với giao diện người dùng, đó sẽ là trách nhiệm của bộ điều khiển.

Là một ví dụ khác về điều cần tránh, hãy xem xét thay vào đó, mô hình của bạn có một mảng "ID động vật" thay vì tên. Thay vì tạo phương thức dịch ID động vật thành tên động vật có thể đọc được của con người trong mô hình, thay vào đó bạn có thể muốn tạo biến thể hoặc trình định dạng giá trị để thực hiện chuyển đổi. Điều này cho phép bạn duy trì mức độ tách biệt đó giữa mô hình và chế độ xem.

Xin lưu ý rằng mục đích của các mẫu thiết kế là giảm độ phức tạp của việc mã hóa giải pháp cho một vấn đề, không bao giờ tăng nó. Bạn sẽ thấy rằng đây chính là cách Cocoa hoạt động, mặc dù nó có thể không phải lúc nào cũng tuân theo định nghĩa chặt chẽ nhất của một mẫu.

+0

Cảm ơn Marc, điều đó có ý nghĩa rất nhiều. Tôi đánh giá cao tất cả các câu hỏi bạn đã đóng góp câu trả lời cho tôi gần đây :). –

+0

Tôi rất vui vì nó đã giúp! –

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