【发布时间】:2012-09-27 02:42:51
【问题描述】:
我已经了解了一个包含约 50,000 个 LoC 的 Objective-C 代码库,我估计其中 25% 左右是重复代码。不幸的是,到目前为止,代码库中的 OO 原则大多被忽略,而倾向于复制和粘贴逻辑。耶!
我来自 Java 背景,很多这种重复可以通过老式的面向目标的编程来解决。在很多情况下,将共享逻辑提取到基类中感觉像是正确的解决方案。
然而,在我着手创建一堆基类并在派生类之间共享公共逻辑之前,我想我应该停下来看看是否还有其他可用的选项。从 2011 年开始观看 Ken Kocienda 的“Writing Easy-To-Change Code”WWDC 会议后,他建议我尽可能保持对象层次结构的浅层。他没有提供任何确切的统计数据来说明他为什么有这种观点,所以我想知道我是否错过了一些东西。
无论如何,我都不是 Objective-C 专家,所以我想知道在决定对象层次结构时是否有任何最佳实践。基本上,当您决定停止创建基类并开始使用组合而不是继承作为类之间共享代码的一种方式时,我想征求意见。
另外,从运行时性能的角度来看,有什么可以让我远离创建对象层次结构吗?
【问题讨论】:
-
在任何面向对象的语言中,使层次结构尽可能平坦并倾向于组合而不是继承是很好的做法,但是,就像在 Java 中一样,如果那是什么,该语言不会阻止您创建天高的层次结构你想做。与 Java 不同的是,Objective-C 添加了类别的概念,这应该有助于扁平化层次结构。还有类集群模式有助于保持私有类的私有性并仅公开某个公共接口,其方式与 Java 提供的方式截然不同。
-
@protocol类似于 Java 中的interface,id几乎是Object。id <protocol>类似于在 Java 中实现指定协议(接口)的对象。 -
测试,测试,测试,然后是更多的测试——如果你认为你可以删除 90% 的代码库,那么我希望你的测试能够确保你不会破坏它跨度>
-
@seanoshea,如果您正在寻找大型重构工作,我建议您查看AppCode,它在重构方面比 Xcode 好得多。至于由于深层层次结构对性能的影响,它基本上应该与 Java 没有什么不同。不同之处在于 Java 使用静态绑定,因此它比使用消息传递的 Objective-C 有更多的优化选项,因此总是进行后期绑定。
-
感谢 AppCode 推荐 Radu。我一定会看看的。感觉就像在争论 Objective-C 中的深层层次结构从性能角度来看是一个糟糕的主意,正在进入令人毛骨悚然的领域(特别是如果我可以将其保持在 2-3 级)。我将仅从教育的角度研究后期绑定。干杯。
标签: iphone objective-c ios design-patterns inheritance