我是開發新手,最近正在實踐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