我倾向于避免使用私有方法,因为它们很难在子类实现中测试功能和/或覆盖该功能。
你使用私人方法吗?你喜欢受保护的方法而不是私有方法吗?
答案 0 :(得分:6)
私有方法非常适合在类中隐藏操作,客户端类和子类都不应该依赖它。隐藏此类操作的唯一方法是在您需要的地方内嵌功能。
答案 1 :(得分:3)
可测试性:
首先,它取决于您想要测试的内容。如果您想进行集成测试,那么您并不关心。您调用公共服务,激活所有堆栈,然后查看结果。您的集成测试可以运行数千行代码。这很好。
如果您正在考虑更多关于单元测试的内容,那么您需要使用简单易于测试的代码。这就是你不想一次测试多个代码,或者一次测试多个功能。
如果每个公共方法执行的代码不是太大/太复杂,那么你完全没问题。
如果被调用的代码最终太复杂而您想要拆分测试,则可以破解: - 将私有方法标记为受保护。 - 使用内省调用私有方法。
但最好的方法是定义一个可以处理某些行为的辅助类,测试这个类(因为它有公共方法),然后使用mock测试另一个类。
无论如何,我不同意这个“牺牲简化测试的角色是错误的,IMO。”。
事实上,让您编写可测试代码会为设计带来比人们想象的更多的更改。你需要接口,在任何地方注入模拟,确保所有对象分配都是可覆盖的,避免静态...有时候制作更小的类...如果你的代码不容易测试,它就不会被测试了。
你可以肯定,如果方法的唯一问题是易于存根/测试是一个受保护的可见性而不是私有,私人将会尽快消失,有人被要求测试它。
答案 2 :(得分:2)
你使用私人方法吗?
是
您喜欢受保护的方法而不是私有方法吗?
没有。
我不同意您对私有方法的可测试性的关注。任何私有方法的行为都应该通过一个或多个可见方法或构造函数来测试。如果不是,则可能是死代码。
私有方法在隐藏抽象的内部细节方面起着关键作用。为了简化测试而牺牲这个角色是错误的,IMO。
答案 3 :(得分:0)
创建一个好的API意味着向所有程序员公开他们需要的公共方法,并防止他们不需要的其他方法。
在某些情况下,需要提供私人功能,因为它可能会损害过程。
私有方法是编程语言可以为您提供的最常用的功能之一。
答案 4 :(得分:0)
我更喜欢“私有静态”作为辅助方法。这将使读者清楚地知道他们不会修改对象的状态,并且大多数IDE将以斜体显示对静态方法的调用,因此我将知道它是静态的而不查看签名。
答案 5 :(得分:0)
如果我们遵循oops的基础知识,我肯定会喜欢私有方法。以对象体为例。有许多私人功能正在进行,但我们从未见过它们。它们不必是静态的,因为它们可以改变对象的状态。呼吸过程涉及许多内部过程。如果它们中的任何一个出错,可能会导致身体(物体)的呼吸问题(改变状态)。它们是私有的,因为用户无需了解它们。可能存在这样的情况:预期在许多不同的更大的过程中使用小的过程。它们可能仍然不是对用户直接有用。因此最好将它们分离为私有函数并用于对象的其他函数。