我不认为我是一个完全的面向对象的新手,但是你有时会觉得我们在私有化领域上走得有点太远了吗?你有没有一个好的经验法则,什么时候一个字段绝对必须是私有的,什么时候(也许)可以将它标记为受保护的或公共的?
有时候,这是一件显而易见的事情,让我着迷。
讨论
发布于 2010-08-20 03:47:44
简单的规则:
接口应为公共接口。实现应该是私有的。
当您将一个字段设置为公共的(甚至是受保护的)时,您实际上是将其声明为接口的一部分。问题是,它是一个实现细节--在几乎每种情况下,该字段对您的代码都有意义。任何想要设置它的人都可以,但您必须仔细解释如何设置它,以防止整个系统崩溃和烧毁。您甚至不能在设置时对其进行验证,因此在使用它之前需要对其进行every...single...time验证,这可能会降低性能,具体取决于验证需要如何完成。(即使这样,也不能保证字段将保持有效,因为您甚至不能强制同步访问它。)使用你的类的每个人都将不得不做同样的事情,因为$DEITY只知道其他代码一直在处理这个字段,并且可能会破坏它。
最重要的是,一旦它成为一个字段,人们就会编写期望使用该字段的代码。在以后需要验证的情况下,您不能在不破坏二进制兼容性的情况下将字段转换为getter/setter (这意味着使用您的代码的任何人都必须重新编译使用该字段的所有内容才能使其再次工作)。这样做太多次了,人们会害怕使用你的API --读:你不会有任何用户。
Getter和setter将实现与接口分开。它们允许调用者返回一些绝对有效的东西,并让您确保进入的任何东西都是绝对有效的。这使得事情更可预测,更稳定。因此,如果您编写的代码在编写之后将会用到,那么非平凡的getter和setter(验证值、可能同步等等--即:不仅仅是盲目地获取和设置变量)是个好主意。
发布于 2010-08-20 03:22:23
它适用于其他人将使用您的代码或类的情况。你可以准确地暴露和控制什么是接口,什么是“内部”。
如果你是唯一一个会使用你的代码的人,那么是的,这通常是“太过分了”。
我会因为提出这个建议而受到攻击,但不管怎样...
https://stackoverflow.com/questions/3525405
复制相似问题