在Chapter 2: Meaningful Names中,Bob叔叔写道:
不添加不必要的上下文
在一个名为“加油站豪华”的虚拟应用程序中,用GDS作为每个类的前缀是个坏主意。坦率地说,你在使用你的工具。输入G和按下完成键,并得到系统中每一个类的一英里长的列表。
实际上,这是我一年多前在目标C的第一天发现的。在Java之后,这是相当令人失望的,但我认为我只是对此感到烦恼的人:)我理解,“干净代码”这本书大部分时间都是指Java,而且Java有名称空间(包),与Objective不同。
如果您正在构建一个应用程序,而不是库,那么在您的类中使用2-3个字母前缀吗?你怎么看,这是糟糕的语言设计,语言“功能”,还是鲍勃叔叔不在这里?
发布于 2012-03-06 13:46:20
也许这里的关键词是无端的。在目标-C中,前缀是减少名称冲突的重要目的。在Java和C++等其他语言中,对名称空间的支持使得前缀的使用变得毫无意义(并且违反了oft引用的DRY原则)。然而,在目标C中,前缀是有意义的,有用的,而不是没有意义的。
发布于 2012-03-06 13:27:28
我很想结束这个问题,但我想我以前没有见过类似的问题,这是一个有效的问题。以下是我在这件事上相当混乱的想法。
许多语言都有一个名为名称空间的特性,其中“完全限定”的类名以一个层次化的名称系列作为前缀。例如,Java中的String类是正确的java.lang.String,而自定义类是正确的com.whatever.foobar.MyClass。
不幸的是,命名空间从未添加到Objective中,这意味着Objective符号(类名、协议名和其他几种类型)即使使用Objective++(它具有函数、常量、结构等的命名空间特性)也不能放在名称空间中。
因此,防止共享代码中的符号冲突的唯一解决方案是使用某种形式的名称损坏来使您的符号名唯一。在Objective中,约定是对所有类使用两个字符的前缀(有时是数字不同的)。
这个Bob叔叔告诉你不要这么做,因为虽然你最终会得到一个不编译的程序,但是你将失去前缀仍然提供的名称空间的任何好处。你的应用程序使用插件吗?你需要前缀。你的应用程序有公共API吗?你需要前缀。
理论上,在一个从未触及外部世界的应用程序中,代码可以没有前缀,但去它的话--保持清晰的编码,甚至在那里添加一个前缀。以后会让你省心的。
发布于 2012-03-06 13:18:33
就我个人而言,我几乎从不使用前缀。唯一的例外是以某种方式相互连接的类,或者它们都应该存在。
举个例子:
用来聊天的客户端应用。让我们把这个聊天叫做ExampleChat。
然后,我将使用ECMessage、ECUser、ECRoom等来轻松地查看应该存在哪些类。
或者,如果我为UITableView定制了一些单元格,我会使用前缀来保持它们彼此之间的紧密联系,而不会在“一英里长的列表”中搜索它们。示例:
ECTextMessageCell、ECSoundMessageCell、ECUploadMessageCell、ECJoinOrLeaveMessageCell等。
这是我个人的看法,不可能是最好的。但对我来说还是最简单的。
希望它能帮上忙
https://stackoverflow.com/questions/9584302
复制相似问题