2017-06-18 16 views
6

Tôi mới phát triển và gần đây đang thực hành mẫu thiết kế MVVM. Để liên lạc giữa ViewModel & Controller Tôi đang sử dụng Closure. Tôi biết tôi cũng có thể sử dụng Đại biểu. Nhưng có bất kỳ quy ước hay lý do nào theo cách cụ thể tôi nên làm theo cho việc giao tiếp. Tôi bối rối một chút. Bất kỳ trợ giúp sẽ được đánh giá cao.Cách tốt nhất để giao tiếp giữa ViewModel và Controller

+0

Giao tiếp trong trường hợp này có nghĩa là trao đổi biến? –

+0

Có. Tôi đang chuẩn bị DataArray của tôi trong lớp ViewModel và nó sẽ được gửi đến bộ điều khiển để nạp TableView của tôi. – MarkMe

Trả lời

7

Tôi cũng đang tìm kiếm câu trả lời này và tôi đã thấy điều này,

Đi qua một đóng cửa từ UI Layer (UIL) đến Lớp logic nghiệp vụ (BLL) sẽ phá vỡ tách mối quan tâm (SOC). Các dữ liệu bạn đang chuẩn bị cư trú trong BLL vì vậy về cơ bản bạn sẽ nói "hey BLL thực hiện logic UIL này cho tôi". Đó là một SOC. (Tìm thêm tại đây https://en.wikipedia.org/wiki/Separation_of_concerns.)

BLL chỉ nên liên lạc với UIL thông qua thông báo của đại biểu. Bằng cách đó, BLL chủ yếu nói, "Này UIL, tôi đã hoàn thành việc thực hiện logic của tôi và đây là một số đối số dữ liệu mà bạn có thể sử dụng để thao tác các điều khiển giao diện người dùng như bạn cần".

Vì vậy, UIL không bao giờ nên yêu cầu BLL thực thi logic kiểm soát giao diện người dùng cho anh ta. Chỉ nên yêu cầu BLL thông báo cho anh ta.

Đây là Liên kết, bạn sẽ thấy rõ hơn.

Usage of MVVM in iOS

+0

Cảm ơn bạn đã dành thời gian và liên kết. – MarkMe

0

Bạn có nhiều tùy chọn, tùy thuộc vào cấu trúc của ứng dụng của bạn. Một là sử dụng một singleton. Tôi thích phương pháp này cho các ứng dụng không quá phức tạp. Việc xử lý dữ liệu (lưu trữ, cấu trúc) nằm trong lớp singleton. Các chế độ xem khác nhau truy cập dữ liệu từ lớp đơn này. Ví dụ, bạn có một singleton tên DataManager hoặc một cái gì đó như thế. Các bộ điều khiển khác nhau và các cấu trúc đơn giản khác truy cập vào dữ liệu cần thiết từ singleton này.

Dưới đây là một mã sân chơi rất đơn giản ví dụ:

class DataManager 
{ 
    static let sharedInstance = DataManager() 

    var _value: Int = 0 
    var value: Int 
    { 
     get 
     { 
      return _value 
     } 
     set 
     { 
      _value = newValue 
     } 
    } 
} 

class DemoController1 
{ 
    let dm = DataManager.sharedInstance 

    func incValue() 
    { 
     dm.value += 1 
    } 
} 

class DemoController2 
{ 
    let dm = DataManager.sharedInstance 

    func mulValue() 
    { 
     dm.value *= 2 
    } 
} 

let dm = DataManager.sharedInstance 
let dc1 = DemoController1() 
let dc2 = DemoController2() 

print ("value: \(dm.value)") 
dc1.incValue() 
print ("value: \(dm.value)") 
dc1.incValue() 
print ("value: \(dm.value)") 
dc2.mulValue() 
print ("value: \(dm.value)") 
Các vấn đề liên quan