我正在寫一個簡單的iOS應用程序,它使用表視圖來顯示來自一組模型對象(每個是「NTTrip」的一個實例)的信息。我決定使用UITableViewController的一個子類來管理視圖和模型對象集合,還是我應該將管理模型對象的邏輯分成一個新的對象,該對象將充當表視圖的數據源即將邏輯分成「視圖控制器」和「模型控制器」)。這是一個好主意,還是我會增加額外的複雜性到一個不一定需要它的系統?使用UIViewController與單獨的數據源對象來管理模型對象?
1
A
回答
1
一般來說,我喜歡將特定的職責(如UITableView的數據源)分解到非UIViewController控制器中。我認爲這種分離使測試和維護我的控制器變得更容易。
然而,這並不總是有道理。如果你正在考慮使用UITableViewController,那麼這意味着你期望你的表視圖填充屏幕,這裏可能並不是你的UIViewController子類負責的其他行爲。如果對每個控制器沒有明確的獨立責任,我認爲多個控制器會不必要的複雜。
一種替代方案可能是具有一個UIViewController子類,它充當表視圖的委託和數據源。該控制器可以呼叫某個NTTripService
控制器,該控制器可以負責加載並保留您的NTTrip
對象,並使它們可供多個UIViewController子類顯示。
1
控制器通常是應用程序中最複雜的部分,需要與數據交談並管理視圖。在iOS中,您通常沒有數據控制器。因此,您的表格視圖控制器還應該與您的模型進行通信,以便爲您的表格視圖顯示正確的數據。通過讓另一個數據控制器與數據模型交談並充當數據源,您的原始控制器還可以做什麼?當然,另一個極端是將每一點工作都包含在一個單獨的控制器中......但是你會發現這個問題。底線 - 你的單表視圖控制器應該管理你的數據和你的表視圖 - 這就是控制器的意圖。
儘管如此 - 如果您的相同數據由其他控制器進行管理(編輯,使用),您可能希望按照Jonah的建議將其納入服務中。否則,這只是不必要的工作和複雜。
相關問題
- 1. 無法使用Com4j與精度管理對象模型工作
- 2. 管理對象模型初始化
- 3. 來自核心數據和外部源的模型對象
- 4. 使用數據管理器單例管理核心數據對象
- 5. MVC4中的數據和模型對象管理
- 6. 結合模型數據與對象
- 7. 從Git中檢索核心數據管理對象模型
- 8. 管理對象
- 9. 管理對象
- 10. 核心數據:無管理的對象上下文在我的管理對象
- 11. 傳遞對象的名單與對象屬性MVC模型5
- 12. 對象數據源
- 13. 存儲庫模式與泛型和對象數據源
- 14. SSMS對象資源管理器上未顯示數據庫對象Azure DB
- 15. 從單獨的數據源檢索到的值對象?
- 16. 對象的管理
- 17. 應該使用自己的模型對象來管理屬性列表嗎?
- 18. 使用CodeIgniter模型作爲對象管理器/工廠
- 19. 「對象模型」與「數據庫模型」的方向性
- 20. 保存表單對象與backbone.js模型
- 21. 對象數組的數據模型
- 22. 使用單獨的模型方法來管理交易
- 23. 管理對象數組
- 24. 圍繞單實例庫編寫管理對象模型
- 25. 使用來自JSON對象的值提取對象(數據)
- 26. 使用對象數據預填充模型表單 - Django
- 27. 撤消核心數據管理對象
- 28. 核心數據 - 管理對象問題
- 29. 使用對象構造函數來管理cssClasses的錯誤
- 30. 使用angularjs中的複選框來管理對象數組
太好了,謝謝!你最後的想法完全符合我的想法。我意識到我需要至少有幾個不同的視圖控制器來訪問數據,所以創建服務控制器可能是有意義的。 – Sean