假设两个家庭,史密斯和约翰斯有两个同样制造和制造的草坪搬运工,我怎样才能在编程中模拟这种情况?
我的意思是,因为两个草坪搬运工都有单独的序列号,我可以将它们映射到两个不同的物体,这对现实世界的情况是封闭的。
或者我应该只创建一个对象并在两个系列之间共享它,这与现实场景完全不同。
哪种方法可以减少未来的问题并提供可行性?
提前致谢....
答案 0 :(得分:2)
你应该将你的草坪搬运工作为单独的物体,家庭用品应该拥有一个草坪搬运工。 这是“有一个”的关系,你可以使用组合。因此,家庭物品可以拥有物业草坪搬运工,他们的草坪搬运工将被存放在那里。您可以通过以下家庭对象访问家庭草坪搬运工:
$family = new Family();
$family->lawnMover->start();
家庭不应该扩展草坪搬运工,因为那是“是一种”关系,而草坪搬运工不是一个家庭!它属于家庭,所以家庭“有一个”草坪搬运工。
我认为你应该总是选择现实世界的例子。 阅读:Domain Driven Design
简而言之,DDD是指您尝试使用OOP模仿现实世界。
希望这有帮助!
答案 1 :(得分:1)
这是非常基本的,根据不同的程序员可能不是一个完美的例子,但是在这里;
class Family {
public $name;
public $inventory = array();
public function __construct($name = '') {
$this->name = $name;
}
public function add_inventory_item($object) {
if (is_object($object)) {
$this->inventory[] = $object;
return TRUE;
}
else {
return FALSE;
}
}
}
class Machine {
public $name;
public $manufacturer;
public $serial_number;
public function __construct($name = '', $manufacturer = '', $serial_number = '') {
$this->name = $name;
$this->manufacturer = $manufacturer;
$this->serial_number = $serial_number;
}
}
$fam_smiths = new Family('Smiths');
$fam_johns = new Family('Johns');
$lawnmower_a = new Machine('Lawnmower A', 'Some company A', '1234');
$lawnmower_b = new Machine('Lawnmower B', 'Some company B', '5678');
if ($fam_smiths->add_inventory_item($lawnmower_a)) {
echo 'Lawnmower A added to family Smiths\' their inventory.<br /><br />';
}
else {
echo 'Lawnmower A doesn\t have the correct strucure.<br /><br />';
}
if ($fam_johns->add_inventory_item($lawnmower_b)) {
echo 'Lawnmower B added to family Johns\' their inventory.<br /><br />';
}
else {
echo 'Lawnmower B doesn\t have the correct strucure.<br /><br />';
}
echo '<pre>';
print_r($fam_smiths);
print_r($fam_johns);
echo '</pre>';
<强>输出强>
Lawnmower A added to family Smiths' their inventory.
Lawnmower B added to family Johns' their inventory.
Family Object
(
[name] => Smiths
[inventory] => Array
(
[0] => Machine Object
(
[name] => Lawnmower A
[manufacturer] => Some company A
[serial_number] => 1234
)
)
)
Family Object
(
[name] => Johns
[inventory] => Array
(
[0] => Machine Object
(
[name] => Lawnmower B
[manufacturer] => Some company B
[serial_number] => 5678
)
)
)
你也可以制作超级建筑,其中割草机也是一个类,继承了机器的所有基础。