Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 根据良好的OOP原则,nodeView应该请求添加到树中,还是树应该添加nodeView?_Ios_Oop_Design Patterns - Fatal编程技术网

Ios 根据良好的OOP原则,nodeView应该请求添加到树中,还是树应该添加nodeView?

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确实靠近没有左或右子节点的节点之一,则可以将节点

我想知道什么是好的OOP原则,如果在iOS应用程序中有一个
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似乎需要 做好这项工作

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


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

你能发一些代码吗?与处理这些更改的控制器和视图类似。