什么时候使用私有方法?

时间:2010-11-25 12:21:50

标签: oop design-patterns language-agnostic

我理解Java或PHP中的public / protected / private访问器的含义。但是,您何时会选择是否将方法设为私有?

想象一下,我有一个处理配置字符串的类 - 它们必须符合特定的正则表达式,如果是,则执行进一步的逻辑以确保字符串有效。

我目前在Configuration类的私有方法中使用此代码。此类接受配置字符串,然后在验证字符串后将值返回给客户端代码。

但是,我想对验证代码进行单元测试,所以也许它应该在另一个类中。除非我知道代码将被重用,否则我通常不会这样做。如果它只在这种情况下由单个类使用,我通常只是将该方法设为私有。

所以,我的问题是 - 与移入自己的类相比,哪些设计规则应该告诉程序员某个特定方法应该是私有的?

7 个答案:

答案 0 :(得分:3)

Single Responsibility Principle是我通常想到的。另外,考虑一下你是否真的需要在这个类中进行验证,或者它与它没有任何关系(也许验证不应该在域逻辑中处理,而是在它上面的另一层)。 您可能已经知道的私有方法不应该在单元测试中进行测试,所以如果您真的需要测试这种功能,也许您应该将它放在自己的验证类中,只负责验证然后测试它。

答案 1 :(得分:1)

然后,如果函数我只使用本地对象,我不想显示其他对象她,因为我可以在将来使用她并犯错误,这将在我的代码中做一些混乱我不必考虑很多想想我必须使用什么功能以及我不能使用什么功能。

我到处使用私有方法并使用一些简单和简短的公共方法来获取/设置数据到我的对象然后我的代码中没有混乱。

答案 2 :(得分:1)

在课堂上重构代码时,应该使用私有方法。 例如,如果你有一些代码的和平代码在代码中重复多个。 你应该进行提取方法重构。 看看更多的重构方法 refactor

答案 3 :(得分:1)

将验证逻辑实施为strategy Validator。这样,您不仅可以单独对它们进行单元测试,还可以在需要时轻松替换验证逻辑。

因此,请创建一个实现IValidator接口的单独Configuration类。然后通过注入将[{1}}类作为依赖在Configuration的构造函数中,使用相应的Validator撰写类。

答案 4 :(得分:0)

将私有验证方法保留在同一个类中,并使单元测试类成为该类的朋友(在C ++中,至少 - 在Java中,将单元测试放在同一个包中)。

答案 5 :(得分:0)

详细了解SOLID设计原则 SOLID

答案 6 :(得分:0)

如果没有特殊要求,请将成员保留为私人身份。我认为其主要目的是为了更好地进行“封装”和维护。

例如,您定义具有不同转向模式的Car.class。 Car(.class)具有成员maxSpeed,该成员由设置程序设置:Car.maxSpeedSet(int mode)。那么用户无法直接知道或更改maxSpeed的值,除非通过方法更改其模式。

通过这种方式,用户无需关心或编写有关如何从该模式获得maxSpeed的函数。而且,当您需要更改函数:maxSpeed = f(mode)时,无需在使用Car的任何地方进行更改。您只需更改方法maxSpeedSett()。非常适合封装和维护,不是吗?

如果只有一个成员:x = a,“ public”似乎足够好,但请确保将来不会更改分配方法,尤其是在对类的依赖性过多的情况下。