OOP 是否所有属性都有 getter 和 setter

标签 oop design-patterns

我一直为大多数类属性提供 getter 和 setter。

虽然我读到这很糟糕 - http://www.codeweavers.net/getters-and-setters-are-evil/

依赖注入(inject)和单元测试不需要大多数属性都有一个setter吗?

最佳答案

应该始终使用 getter 和 setter。 getter 或 setter 的原因不是为内部属性提供公共(public)接口(interface),而是提供对属性读/写的控制。它们提供了类属性的抽象。

即使您的类属性是私有(private)的,您也需要 getter 和 setter。这允许在分配或读取之前控制值。

想一想您很久以前设计的一个类,您在其中对每次读取进行一些通用计算。

class A{
    private decimal x;
    public void do_stuff(){
        decimal a = this.x/70;
        // process with a
    }
    public void do_anoter_stuff(){
        decimal a = this.x/70;
        // process again a
    }
}

现在您要更改系数 (70)。你怎么做呢?每个地方都改吗?最好这样设计。

class A{
    private decimal x;
    private get_x(){ return this.x/70; }
    public void do_stuff(){
        // process with get_x()
    }
    public void do_anoter_stuff(){
        // process again get_x()
    }
}

事实上,盲目地为每个属性使用 getter 和 setter 是邪恶的。经验法则是。使用私有(private) getter 和 setter 将所有属性声明为私有(private)。稍后更改 getter 和 setter 的可见性,仅在需要时允许从外部世界访问

关于OOP 是否所有属性都有 getter 和 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12092583/

相关文章:

php - 检查一个类是否是另一个类的子类

python - 在方法链接期间临时保留对对象的更改

Android 监听器模式与回调模式

java - 如何在 Spring @Service 和非 Spring 对象之间集成?

javascript - 在 IE8 中初始化另一个对象内的对象失败

oop - 哪些指标显示了面向对象代码和过程代码之间的区别

java - 如何在java中使用扫描仪处理奇怪的输入

oop - 从全局状态转移到依赖注入(inject)等模式的好机制是什么?

design-patterns - 如何灵活地存储产品的多个价格?

java - 具有条件状态更改的状态模式