5

我想知道什么是好的 OOP 原则,如果在 iOS 应用程序中,有 aUITreeView和 a UINodeViewUITreeView对象有 a rootNodeView,并且这个根节点用leftChildNodeView, 和分叉rightChildNodeView

如果每个UINodeView对象都可以在屏幕中的任何位置“拖放”,这在UINodeView's 的-touchesMoved处理程序中实现——那是好的 OOP 原则吗?此外,如果一个新的 nodeViewfoo确实靠近没有左或右子节点的节点之一,则foo可以将该节点作为子节点添加到该节点。

而且我想如果另一个 nodeView也没有父母(也就是说,也悬空),那么也可以添加为' 孩子是bar有道理的。foobar

foonodeView 是否应该“请求节点允许添加为左子或右子”和“如果允许则添加”,或者是否应该UIViewController检测UITreeView到一个节点在自身内部移动,并“决定它靠近另一个节点(屏幕上的所有节点)并且没有左或右孩子,并添加foo为孩子”?

显然,如果树中只有一个节点可以添加子节点,那么就UITreeView可以完成这项工作,但如果任何节点(悬空或不悬空)都可以成为父节点,那么UIViewController主视图UIView似乎需要完成这项工作。

这样做是否违反了良好的 OOP 原则?

4

2 回答 2

1

我想说 UITreeView 应该处理这个,节点应该通过协议/委托通信通知他位置变化。TreeView 是唯一可以检查的对象,如果一个节点的位置变化导致与另一个节点发生冲突等。

如果您想编写真正好的 OOP 代码,请尝试使用“模型-视图-控制器”模式,其中您的视图是您的树视图,您的模型应该包含所有节点数据对象并提供一些方法来检测节点,你的控制器应该从你的视图接收位置变化,与模型交谈,决定做什么,然后采取适当的行动(比如添加一个节点作为另一个节点的叶子)。

这样你就可以完全灵活地应对未来的变化,比如使用数据库而不是 RAM 来存储数据,或者使用 iPad 的代码而不是 iPhone,只需替换视图即可。

于 2012-09-07T12:38:21.937 回答
0

我同意 stk 的观点,模型(即业务规则的实现)和视图(即可视化表示)之间需要有明确的区别。

揭示段落是最后一段:

显然,如果树中只有一个节点可以添加子节点,那么 UITreeView 可以完成这项工作,但如果任何节点(悬空或没有)可以是父节点,那么 UIViewController 或主视图 UIView 似乎需要完成这项工作.

换句话说,您的模型取决于业务规则。您需要设计逻辑以便可以表达规则。如果您有自由浮动节点,那么显然它们必须保存附件逻辑。

因此,将树/节点逻辑与视图逻辑分开。

于 2014-01-28T06:12:12.337 回答