开始看demo没看明白
经过反复测试,确实有道理
先看几个原则,不理解可以多测试例子,帮助立即
对于价值设计模式不变性是关键,任何对于一个Value Object的变量amount的改变,是通过创建一个新的带有不同预期值的类的实例来完成的。上文中提高的最初那个$this->amount变量的值从未改变。
1.保护值对象的属性,禁止被直接访问。
2.在构造函数中就对属性进行赋值。
3.去掉任何一个会改变属性值的方式函数(setter),否则属性值很容易被改变。
<?php
class Dollar {
protected $amount;
public function __construct($amount = 0) {
$this->amount = (float) $amount;
}
public function getAmount() {
return $this->amount;
}
public function add($dollar) {
return new Dollar($this->amount + $dollar->getAmount());
}
}
//$d0 = new Dollar(100);
//$d = new Dollar();
//
//$d =$d->add($d0);
//$d =$d->add($d0);
//$d =$d->add($d0);
//echo $d->getAmount();
$d0 = new Dollar(100);
给一个很简单的例子,帮助大家理值对象模式,明天弄一个复杂一点的,进一步理解和学习!