oop - 什么时候不使用 setter 直接在对象上设置属性值被认为是好的设计?

标签 oop class setter getter getter-setter

这可能不是最适合 stackoverflow 的问题,但我只是在寻找一个最能描述为什么程序员有时不使用属性的 setter/getter 的答案,例如在属性注入(inject)(DI)的情况下。

考虑这个例子...

class Test
{
    public propertyA;
    protected propertyB;

    public function setPropertyB(val)
    {
        // do some logic to validate 'val'
        this.propertyB = val;
    }

    public function getPropertyB()
    {
        return this.propertyB;
    }
}

为什么会选择直接设置propertyA的风格:

var Test = new Test();
Test.propertyA = 1;

通过 propertyB 的 setter 选项:

var Test = new Test();
Test.setPropertyB(1);

我总是使用 setter/getter 方法,但我看到一些相当成熟的框架使用 propertyA 方法散布于 propertyB 方法。使用这种方法有什么好处?

最佳答案

为什么你可能不关心封装:

  1. 您可能会在 15 分钟后丢弃该项目。

  2. 您可能发现 getter/setter 是 CPU 密集型代码的瓶颈,导致您优化性能而不是设计。

  3. 实例字段可能是不可变且只读的,因此公开它可能不会有危险。

  4. 你懒得写 getter/setter。

关于oop - 什么时候不使用 setter 直接在对象上设置属性值被认为是好的设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8922745/

相关文章:

perl - 在@ISA 上使用拼接在 perl 5.12.2 中是否存在问题?

java - 如何解决有关需要从特定类扩展的类的 `unchecked` Java 警告?

java - 多级泛型

java - 为什么 Boolean 包装类实现 Serialized 接口(interface)和 Comparable 接口(interface)?它有什么用呢?

php - PHP 类中的 Mysqli

matlab - 为什么定义 MATLAB containers.Map 子类方法时输出为 "too many output arguments"?

java - 如何创建另一个类的实例,加载带有数据的对象并将其打印出来?

Delphi - 使用带有属性 setter 的函数

c++ - 在 char 数组包装类中实现 C++ setter 的正确方法是什么?

c++ - 尝试调用默认构造函数时没有匹配的构造函数