首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包装原始类型的优势?

包装原始类型的优势?
EN

Stack Overflow用户
提问于 2012-12-23 21:01:51
回答 2查看 550关注 0票数 1

我在读一篇关于对象健美操的文章,其中一条规则是wrapping primitive types and strings

代码语言:javascript
复制
class UIComponent {

    public function repaint($animate = true)
    {
     // 
    }

}

$component->animate(false);

变成:

代码语言:javascript
复制
class UIComponent {

    public function repaint(Animate $animate)
    {
     //
    }
}

class Animate {

    private $animate;

    public function __construct($animate = true) 
    {
        $this->animate = $animate;
    }
}

$component->animate(new Animate(false));

使用此技术我能获得哪些优势?在我看来,我认为它只是让事情变得复杂,增加了更多的代码行。

EN

回答 2

Stack Overflow用户

发布于 2012-12-23 21:06:38

在这种情况下,它确实有点过大,但还有其他示例,在这些示例中,它是有意义的

代码语言:javascript
复制
class Identifier {
  protected $id;
  public function __construct ($id) { 
    if (!preg_match('~^{a-z0-9]$~i', $id)) throw new Exception("Invalid id '$id'");
    $this->id = $id;
  }
  public function getId () { return $this->getId(); }
}

所以这个是不可变的,它保证了一个特定的格式。当您在另一个类中对这个类输入提示时,不需要测试标识符是否有效

代码语言:javascript
复制
class MyClass {
  protected $id;
  public function __construct (Identifier $id) { $this->id = $id; }
}

这只是一个简单的例子,实际上在php中并不常见。

..并添加了更多的代码行。

我不认为“更多的代码行”本身是不好的。如果它需要更多的行(甚至是类)来编写可读和干净的代码,那么它比紧凑但不可读的东西要好得多。

票数 4
EN

Stack Overflow用户

发布于 2015-10-17 00:32:40

想象一下,一个新的开发人员(或者你自己,在你最后一次接触项目一年后)正在阅读第一个例子中的代码:

代码语言:javascript
复制
$component->repaint(false);

如果不了解repaint()的定义或阅读该方法的文档,就无法知道该false在该方法的行为方面意味着什么。我是说,字面上写着“重绘错误”,所以...重新粉刷但是..。不是真的重画吗?意图并不明确,这是一件坏事。

这个极其简单的示例演示了如何通过包装原语来极大地提高代码的可读性。当您想要开始添加一些行为时,好处甚至更大,比如在简单的验证中进行烘焙,并将其自身与另一个实例进行比较。

对于创建这么小的一个小对象对性能的影响,你应该一点也不关心。至于“更多的代码行”有什么不好呢?SRP几乎总是产生“更多的代码”,但它是干净、可读和可维护的代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14011158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档