我是开发新手,最近正在实践MVVM设计模式。要在ViewModel &控制器之间进行通信,我正在使用Closure。我知道我也可以使用委托。但是有没有什么传统或理由,我应该遵循什么特别的方式来进行沟通。我有点困惑。任何帮助将不胜感激。ViewModel和Controller之间进行通信的最佳方式
6
A
回答
7
我也寻找这个答案,我发现这一点,
业务逻辑层(BLL)将打破关注分离(SOC)。您正在准备的数据驻留在BLL中,所以基本上你会说“嘿BLL为我执行这个UIL逻辑”。这是一个SOC。 (在此处查找更多https://en.wikipedia.org/wiki/Separation_of_concerns。)
BLL应仅通过委托通知与UIL进行通信。 BLL基本上这样说:“嘿UIL,我完成了我的逻辑,这里有一些数据参数,你可以用它来操作UI控件。”
所以UIL不应该要求BLL为他执行UI控制逻辑。只应要求BLL通知他。
这是链接,您将看到更清晰的视图。
+0
感谢您的时间和链接。 – MarkMe
0
您有很多选择,具体取决于您的应用程序的结构。一个是使用单身人士。我更喜欢这种方法不是太复杂的应用程序。位于单例类中的数据处理(存储,结构化)。访问这个单例类的数据的不同视图。例如,你有一个名为DataManager的单例或类似的东西。不同的控制器和其他简单结构从这个单例中访问所需的数据。
这里是例如一个非常简单的操场代码:传递从UI层(UIL)的封闭
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. 什么是PC和USB设备之间进行通信的最佳方式
- 2. 在活动和片段之间进行通信的最佳方式
- 3. 2 .Net应用程序之间进行通信的最佳方式?
- 4. 与Windows应用程序之间进行通信的最佳方式是什么?
- 5. c#类间通信的最佳方式
- 6. C++和c之间进行通信的最快方法#
- 7. 通过以太网进行Android Arduino通信的“最佳”方式
- 8. iPhone/Objective C - ViewController之间的通信/实现的最佳方式?
- 9. 什么是在两个应用程序之间进行通信的最佳和最快的方式?
- 10. 龙卷风和基于Python的守护进程之间进行通信的最佳方式是什么?
- 11. 指令实例之间通信的最佳方式
- 12. mmap是进程间通信的最佳方式吗?
- 13. 什么是与Firefox插件进行通信的最佳方式
- 14. Flex与C#后端进行通信的最佳方式?
- 15. 与非WCF服务进行通信的最佳方式
- 16. Swing GUI与域逻辑进行通信的最佳方式?
- 17. Android应用程序和JavaFX应用程序之间进行通信的最佳方式
- 18. 哪一个是在Unix主机和Windows客户端之间进行通信的最佳方式?
- 19. 什么是WCF服务和独立线程之间进行通信的最佳方式?
- 20. Powershell脚本和Windows服务之间进行通信的最佳方式是什么?
- 21. 在SWT中,父shell和非对话子shell之间进行通信的最佳方式是什么?
- 22. Android应用程序和外部数据库之间进行通信的最佳方式
- 23. 桌面应用程序和Windows服务之间进行通信的最佳方式
- 24. 在Android中,服务和BroadcastReceiver之间进行通信的最佳方式是什么?
- 25. 用C#在两个进程之间进行通信的最佳方式是什么?
- 26. 在JavaScript和Servlet之间进行通信
- 27. 在UIDatePicker和UITableView之间进行通信
- 28. 在C++和C#之间进行通信?
- 29. 在login.aspx和default.aspx之间进行通信
- 30. 在同一台计算机上运行的Python软件之间进行通信的最佳方式是什么?
沟通在这种情况下意味着变量交换? –
是的。我在ViewModel类中准备DataArray,它将被发送到控制器来提供我的TableView。 – MarkMe