【发布时间】:2013-11-15 09:51:55
【问题描述】:
下面我有一系列的课程。我试图找出将数据从 Process.php 传递到以下每个类的最佳方法。
/CLI/
/Process/
/Condition
Rule.php
Condition.php
Single.php
Process.php
Response.php
Registry.php <-- I don't want to use this, It feels sloppy
起初我想传递如下层次结构中的数据(我目前没有扩展任何东西,倾向于组合而不是继承):
\CLI\Process.php
public function run() {
$condition = new Condition($dataToShare);
}
\CLI\Process\Condition.php
public function __construct($dataToShare) {
$this->data = $dataToShare;
}
\CLI\Process\Condition\Rule.php
public function __construct($dataToShare) {
$this->data = $dataToShare;
}
相反我决定使用注册表模式,因为我很偏执。我觉得共享数据从一个班级转移到另一个班级,而且很混乱。然后我发现自己在子类中设置了一些注册表值,结果同样糟糕!
所以一位同事告诉我尝试一个 Abstract 类,这样每个人都可以扩展它。我的问题是,如果我扩展一个抽象类,那么我的值将不会被设置(因为它是一个新的父实例)。
我的最佳选择是单身吗?有没有人有任何建议来保持这个清洁?我希望它是干净的,并且我不想有这种偏执的想法,即通过不断地将数据向下传递来污染数据。
当我问这个问题时,感觉就像我在水下说中文。
【问题讨论】:
-
喜欢他的第一个注释“依赖关系需要通过对象图传递是一种常见的误解。”
-
@Gordon 以房屋建筑商为例,您建议我如何在子类中获取建筑商?我无法重新实例化它,否则它将重置将在其中设置的值。
-
你为什么要这样做?只需在引导程序中预先组装所有内容,然后使用它。将构建器传递到协作者图的唯一原因是您需要稍后在运行时创建对象图。另一种选择是使用 DI 容器。见stackoverflow.com/questions/17142644和stackoverflow.com/questions/9348376
标签: php