Jer*_*y L 5 oop design-patterns ios
我想知道什么是一个好的OOP原则,如果在iOS应用程序中,有一个UITreeView和一个UINodeView,UITreeView对象有一个rootNodeView,并且这个根节点分支leftChildNodeView,和rightChildNodeView.
如果每个UINodeView对象都可以"拖放"在屏幕的任何地方,这是在执行UINodeView的-touchesMoved处理-是很好的OOP原则?此外,如果新的nodeView foo确实靠近没有左子节点或右子节点的节点之一,foo则可以将该节点作为子节点添加到该节点.
而且我想如果另一个节点视图bar也没有父节点(也就是悬空),那么它foo也可以作为bar孩子添加.
如果这种foonodeView"从一个节点要求允许添加为左或右的孩子"和"如果允许添加它",还是应该UIViewController或UITreeView检测到一个节点内自行移动,而"决定,这是接近另一节点(屏幕上的所有节点)并且没有左或右子节点,并添加foo为子节点"?
显然,如果树中只有一个节点可以添加一个子节点,那么UITreeView可以完成这项工作,但是如果任何节点(悬空与否)可以是父节点,那么UIViewController主视图UIView似乎需要完成这项工作.
这样或那样做是否违反了良好的OOP原则?
I\xc2\xb4d 说 UITreeView 应该处理这个问题,节点应该通过协议/委托通信通知他有关位置变化的信息。TreeView 是唯一可以检查节点位置变化是否导致与另一个节点发生碰撞等的对象。
\n\n如果你想编写真正好的OOP代码,请尝试使用“模型-视图-控制器”模式,其中你的视图是你的TreeView,你的模型应该保存所有节点数据对象,并提供一些方法来检测节点之间的冲突。节点,并且您的控制器应该从您的视图接收位置变化,与模型对话,决定要做什么,然后采取适当的操作(例如添加一个节点作为另一个节点的叶子)。
\n\n这样您\xc2\xb4就可以完全灵活地应对未来的变化,例如使用数据库而不是RAM来存储数据,或者只需替换视图即可使用iPad而不是iPhone的代码。
\n