2014-09-22 14 views
35

HAs có ai đã triển khai mẫu MVVM trong ứng dụng iOS của bạn mà không sử dụng ReactiveCocoa không?Thực hiện mẫu/ví dụ MVVM trong iOS

Tìm thấy nhiều ví dụ ở đây, nhưng tất cả đều sử dụng Ca cao phản ứng. Tôi muốn có một ví dụ đơn giản về triển khai MVVM.

+2

Câu hỏi của bạn là thú vị nhưng quá rộng. Bạn đang nghĩ gì vậy? Nếu không, bạn nên xem hai bài đăng trên blog này: [Swift: Sử dụng MVVM để làm việc với các tùy chọn] (http://natashatherobot.com/swift-mvvm-optionals/) và [Giới thiệu về MVVM] (http: // www.objc.io/issue-13/mvvm.html). Bạn cũng có thể đọc chủ đề này: [Viết lại mã từ Objective-C để phù hợp với các công cụ quyền lực Swift và phong cách ngắn gọn] (http://codereview.stackexchange.com/questions/62958/rewrite-code-from-objective-c-to -conform-với-swift-power-tools-và-concise-styl). Câu trả lời tuyệt vời được đưa ra bởi Rob Mayoff sử dụng thiết lập MVVM. –

+2

Ví dụ về Swift MVVM khác trên GitHub [ở đây] (https://github.com/shilgapira/SwiftDemoMVVM). –

+0

Bạn sẽ chỉ nhận được lợi ích của việc áp dụng MVVM nếu bạn có một hệ thống giúp bạn với ràng buộc dữ liệu.Trong iOS, điều này gần như chắc chắn sẽ là cơ chế KVO. Bạn sẽ cần điều này để tránh viết mã theo dõi thay đổi của riêng bạn cho mọi thuộc tính. ReactiveCocoa là dự án trưởng thành nhất hợp nhất API KVO cùng với thông báo và luồng không đồng bộ và cực kỳ mạnh mẽ khi bạn vượt qua đường cong học tập. Tôi khuyên không nên cố gắng tránh nó, nhưng thực sự ôm lấy nó. – fatuhoku

Trả lời

40

Ca cao phản ứng chắc chắn không bắt buộc đối với MVVM. Tôi đã xây dựng một khung MVVM rất thành công với bất kỳ sự ràng buộc nào cả. Các ràng buộc không phải là yêu cầu đối với MVVM.

Cụ thể, liên kết giữa Chế độ xem và Chế độ xem yêu cầu Mô hình xem để báo hiệu cho Chế độ xem mà nó cần cập nhật dữ liệu của nó. Điều này có thể đạt được bằng cách sử dụng Cocoa phản ứng, KVO (Tôi thực sự thích KVOController của Facebook), hoặc thậm chí sử dụng một mô hình đại biểu đơn giản.

Mô hình xem biết khi nào Chế độ xem cần cập nhật - dữ liệu đã thay đổi hoặc bạn đang thực hiện yêu cầu dữ liệu không đồng bộ qua Mô hình và Mô hình đã được tải vào Mô hình xem.

Khi bạn thiết lập Chế độ xem, bạn có thể liên kết từng điều khiển với giá trị tương ứng trên Mô hình xem. Tôi đã thấy rằng khi tôi cần phải bật ra màn hình, điều này có thể rất tẻ nhạt. Thay vào đó, tôi muốn có một phương thức duy nhất được gọi khi Mô hình xem báo hiệu rằng Chế độ xem nên tự cập nhật. Trong phương pháp đó, tôi chỉ đơn giản là sẽ thiết lập tất cả các thuộc tính điều khiển của tôi.

Bây giờ, bạn chỉ cần quan tâm đến chính mình bằng cách phương thức đó được kích hoạt. Trong khuôn khổ cá nhân của tôi, tôi tận dụng KVO và ViewControllers của tôi theo dõi một thuộc tính dấu thời gian trên cơ sở ViewModel của tôi. Bất kỳ lúc nào mô hình chế độ xem của tôi cập nhật dữ liệu cơ bản của chúng, dấu thời gian của nó được cập nhật sẽ kích hoạt cập nhật. Bạn có thể dễ dàng có View Controller đăng ký chính nó như là delegate cập nhật của ViewModel và sử dụng một mẫu ủy nhiệm tiêu chuẩn.

Một lần nữa, MVVM không phải là về các yêu cầu triển khai cụ thể và hơn thế nữa về khái niệm phân tách mối quan tâm cao hơn, tách phụ thuộc và đóng gói.

+1

Đây là một bài đọc tốt http://rasic.info/bindings-generics-swift-and-mvvm/ – DogCoffee

+0

Tôi đã sử dụng mẫu đại biểu khá hiệu quả. – SilentNot

+0

OP được yêu cầu cho một ví dụ đơn giản. – nmdias

0

tôi đã MVVM Design Pattern trong Swift POP với cách tiếp cận KVC. bạn có thể kiểm tra xem bạn có thích điều này không, nó sẽ là niềm vui của tôi trên GitHub.

https://github.com/AbhimanyuForiOS/ASMVVM Chúc mừng mã hóa !!

1

Tôi đã tạo ra một dự án đơn giản sử dụng MVVM: Model-View-ViewModel

Vui lòng kiểm tra bên dưới liên kết Github:

https://github.com/harshal-wani/MVVM-BestPractice

+0

khi nào bạn muốn tạo/đính kèm nửa còn lại của dự án? việc đặt giá thầu dữ liệu dường như đã hoàn thành một nửa ... – holex

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