Oop 何时使用私有方法?

Oop 何时使用私有方法?,oop,design-patterns,language-agnostic,Oop,Design Patterns,Language Agnostic,例如,我理解Java或PHP中公共/受保护/私有访问器的含义。但是,什么时候您可以选择是否将方法设置为私有 假设我有一个处理配置字符串的类——它们必须符合特定的正则表达式,如果符合,则执行进一步的逻辑以确保字符串有效 我目前在配置类的私有方法中有这段代码。此类接受配置字符串,然后在验证字符串后将值返回给客户端代码 但是,我想对验证代码进行单元测试,所以它可能应该在另一个类中。但我通常不会这样做,除非我知道代码将被重用。如果像在本例中那样只由单个类使用,我通常只将该方法设置为私有 所以,我的问题是

例如,我理解Java或PHP中公共/受保护/私有访问器的含义。但是,什么时候您可以选择是否将方法设置为私有

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

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

但是,我想对验证代码进行单元测试,所以它可能应该在另一个类中。但我通常不会这样做,除非我知道代码将被重用。如果像在本例中那样只由单个类使用,我通常只将该方法设置为私有


所以,我的问题是-什么设计规则应该告诉程序员,与移动到它自己的类中相比,特定的方法应该是私有的?

那么,如果我在对象中只使用局部函数,并且我不想向其他对象显示它,因为我将来可能会使用它并犯错误,这将在我的代码中造成一些混乱,我不必这样做思考了很多,思考我必须使用什么功能,不能使用什么功能


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

< P>让私有验证方法留在同一个类中,并使单元测试类成为该类的朋友(至少在C++中,在java中,将单元测试放在同一个包中)这是我通常想到的。此外,考虑如果你真的需要这个类中的验证,或者如果它与它没有任何关系(也许验证不应该在域逻辑中,而是在它上面的另一个层处理)。
您可能已经知道,私有方法不应该在单元测试中进行测试,所以如果您真的需要测试这种功能,那么您应该将其放入自己的验证类中,只负责验证,然后进行测试。

在类中重构代码时,您应该使用私有方法。 例如,如果您有一些代码的和平,它在代码中重复了多个。 您应该进行提取方法重构。 看看更多的重构方法

将验证逻辑作为策略实施,如中所示。通过这种方式,您不仅可以单独对它们进行单元测试,还可以在需要时轻松地替换验证逻辑


因此,创建一个单独的
Validator
类来实现
IValidator
接口。然后通过
配置作为依赖项注入到配置的构造函数中,用相应的验证器编写
配置类。

阅读更多有关实体设计原则的信息
如果没有特殊要求,请将会员保密。我认为它的主要目的是更好的“封装”和维护

例如,使用不同的转向模式定义Car.class。Car(.class)有一个成员maxSpeed,它由一个setter设置:Car.maxSpeedSet(int模式)。然后,用户不能直接知道或更改maxSpeed的值,除非通过该方法更改其模式

这样,用户就不需要关心或编写关于如何从模式中获得maxSpeed的函数。当您需要更改功能时:maxSpeed=f(mode),您不必在使用汽车的任何地方更改它。您只需更改方法maxSpeedSett()。非常适合封装和维护,不是吗


如果成员仅为:x=a,“public”似乎足够好,但请确保以后不会更改赋值方法,特别是当对类有太多依赖时。

确切地说-用于重构和改进代码可维护性的私有方法。谢谢,这就是我要找的-OO基础。相关:(特别是杰罗恩的回答)