Ios 根据良好的OOP原则,nodeView应该请求添加到树中,还是树应该添加nodeView?
我想知道什么是好的OOP原则,如果在iOS应用程序中有一个Ios 根据良好的OOP原则,nodeView应该请求添加到树中,还是树应该添加nodeView?,ios,oop,design-patterns,Ios,Oop,Design Patterns,我想知道什么是好的OOP原则,如果在iOS应用程序中有一个UITreeView,一个uinoteview,其中UITreeView对象有一个rootNodeView,并且这个根节点分支为leftChildNodeView,和righchildnodeview 如果每个UINodeView对象都可以在屏幕的任何位置“拖放”,这是在UINodeView的-touchesMoved处理程序中实现的,那么这是一个好的OOP原则吗?此外,如果新节点视图foo确实靠近没有左或右子节点的节点之一,则可以将节点
UITreeView
,一个uinoteview
,其中UITreeView
对象有一个rootNodeView
,并且这个根节点分支为leftChildNodeView
,和righchildnodeview
如果每个UINodeView
对象都可以在屏幕的任何位置“拖放”,这是在UINodeView
的-touchesMoved
处理程序中实现的,那么这是一个好的OOP原则吗?此外,如果新节点视图foo
确实靠近没有左或右子节点的节点之一,则可以将节点foo
作为子节点添加到该节点
我想,如果另一个节点视图是bar
,并且没有父节点(也就是说,也是悬挂的),那么foo
也可以作为bar
的子节点添加
此foo
nodeView是否应“请求节点的许可以添加为左或右子节点”和“如果允许添加它”,或者UIViewController
或UITreeView
是否检测到一个节点在自身内部移动,并“确定它靠近另一个节点(屏幕上的所有节点))没有左或右子项,并将foo
添加为子项“
显然,如果树中只有一个节点可以添加子节点,则UITreeView
可以执行此任务,但如果任何节点(悬挂或不悬挂)可以是父节点,则UIViewController
或主视图UIView
似乎需要执行此任务
这样做是否违反了良好的OOP原则?我认为UITreeView应该处理这个问题,节点应该通过协议/代理通信通知他位置变化。TreeView是唯一可以检查节点位置变化是否导致与另一个节点发生碰撞等的对象 如果您想编写真正优秀的OOP代码,请尝试使用“模型-视图-控制器”模式,其中您的视图是您的树视图,您的模型应包含所有节点数据对象,并提供一些用于节点之间碰撞检测的方法,并且您的控制器应接收来自视图的位置更改,与模型对话,决定要做什么,然后采取适当的操作(例如将一个节点添加为另一个节点的叶)
通过这种方式,您可以完全灵活地应对未来的更改,例如使用数据库而不是RAM来存储数据,或者通过替换视图来使用iPad而不是iPhone的代码。我同意stk的观点,在模型(即业务规则的实现)和视图之间需要有明确的区别,这就是视觉表现 最后一段是最具启发性的一段: 显然,如果树中只有一个节点可以添加子节点,那么 UITreeView可以执行此任务,但如果任何节点(悬挂或不悬挂)可以是 父视图,然后UIViewController或主视图UIView似乎需要 做好这项工作 换句话说,您的模型取决于业务规则。您需要设计逻辑,以便能够表达规则。如果您有自由浮动节点,那么显然它们必须持有附件逻辑
因此,将树/节点逻辑与视图逻辑分开 你能发一些代码吗?与处理这些更改的控制器和视图类似。