前提:
在 Web-stack 中: - Controller 通常对应 URL,而 View 则代表页面。 - View 可以通过 CSS、Javascript 和片段等方式避免重复代码。
在 iOS 中: - 进入新屏幕后,该屏幕对应一个 UIViewController。 - 我们有一个 UIView,这个 UIView 包含自己的 UIViews。 - UIView 与 UIViews 并存,UIViewController 也可以与 UIViews 并存。 - 我们一定要将繁重的逻辑或数据处理委托给最近的控制器。 - 在 iOS 中,感觉大多数情况都是 “View first”,这非常棒。
问题:
将视图组合到我的 self.view 中的最佳方法是什么? - 将视图作为 UIView 类 - 视图作为带有关联 UIView 类的 UIViewController - 视图作为具有内联 UIView 的 UIViewController 示例视图层次结构:
------------------------------
| A |
| |
| -------------------- |
| | B | |
| | | |
| | -------------- | |
| | | C | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | -------------- | |
| | | |
| -------------------- |
| |
------------------------------
[具体细节] 我的不舒服经历:
A
可能会[self addView:B_view]
(如果 B 只是 UIView)A
也可能会[self addView:B_viewController.view]
(如果 B 有一个视图控制器)A
还可能会[B setChildView:C_view]
- 我们可以有
B_viewController.delegate = A
&C_viewController.delegate = A
- 我们还可以有
B_viewController.delegate = A
&C_view.delegate = B
- 在所有这些情况共存的情况下,我们必须考虑范围
- 我看到通过长委托链回答了 A 的 C 的担忧。
逻辑分散在代理、视图控制器和视图之间。
分离关注点——但是如何?
除了"抽象良好和关注点分离"这个论点可以改善以上经验。我认为它们很容易造成视图控制器和视图控制器.视图的出血,从而导致广泛的耦合。
这很快变得混乱,感觉像意大利面条,尽管努力控制也很难。
话虽如此,
- 有哪些最佳实践可以解决以上问题?
- 有哪些绝对不要做的事情?
- 在很难提出好的论点时,我们如何避免长委托链,因为当有委托时,它有效地表示你可以更好地处理这个问题?