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
Trả lời
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.
Cảm ơn bạn đã dành thời gian và liên kết. – MarkMe
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)")
- 1. C# Cách tốt nhất để giao tiếp giữa các lớp
- 2. Cách nào tốt nhất để giao tiếp giữa dịch vụ và hoạt động?
- 3. MVVM: Giao tiếp giữa Model và ViewModels
- 4. cách tốt nhất để giao tiếp giữa các hoạt động trang web asp.net và ứng dụng android là gì?
- 5. Cách tốt nhất để giao tiếp giữa dịch vụ WCF và các luồng riêng biệt là gì?
- 6. Giao tiếp giữa OCaml và Python
- 7. Cách tốt nhất để giao tiếp C# và Java là gì?
- 8. Giao tiếp Bluetooth giữa OSX và iOS
- 9. Giao tiếp giữa C++ và ActionScript 3
- 10. Cách tiếp cận tốt nhất giữa Sử dụng và đối tượng công cộng?
- 11. Giao tiếp giữa SAP và C#
- 12. Thực hành tốt nhất cho giao tiếp không đồng bộ giữa các dịch vụ
- 13. Giao tiếp giữa iFrames?
- 14. Giao tiếp giữa iPhone và iPhone
- 15. Cách tốt nhất để chuyển mảng giữa PHP và Javascript
- 16. Cách tiếp cận tốt nhất để tính khoảng cách giữa DOM Elements trong Vuejs là gì?
- 17. Giao tiếp giữa Rails và Ruby EventMachine Process
- 18. Cách tốt nhất để giao tiếp với máy chủ bằng PhoneGap là gì?
- 19. Cách tốt nhất để giao tiếp với Ogre (C++) trong một ứng dụng Java là gì?
- 20. Giao tiếp WiFi-Trực tiếp giữa Mac/Windows và Android
- 21. Cách tiếp cận tốt nhất để xây dựng NHibernate DTO's
- 22. Giao tiếp giữa hai thiết bị iOS
- 23. Giao tiếp an toàn giữa Flash và PHP script
- 24. MVC 4 ViewModel không được gửi lại cho Controller
- 25. Giao tiếp giữa hai microservices
- 26. Làm cách nào để giao tiếp giữa C++ và PHP trên Windows?
- 27. Giao tiếp giữa Node.Js và ASP.NET MVC Application
- 28. Giao tiếp giữa Mô hình và Bộ điều khiển - iOS
- 29. Cách tiếp cận tốt nhất để đăng nhập là gì?
- 30. Cách giao tiếp thành ngữ giữa cửa sổ Onsen và bố mẹ là gì?
Giao tiếp trong trường hợp này có nghĩa là trao đổi biến? –
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