我需要一些关于我正在使用的项目的设计模式的建议。假设我有很多类将使用依赖注入和IoC容器进行实例化。很多这些类将依赖于“环境”设置,例如依赖于服务器位置的memcached类,以及依赖于SQL主机详细信息的SQL类,但我不确定如何编写此依赖项。
我可以将这些写入课堂,但它并不灵活。如果我让类使用全局变量,我觉得它们不再松散耦合,单元测试将更难完成。因此,如何保持松散的类耦合但是从中心位置维护这些设置?
如果服务器设置改变,我不想挖掘12个PHP脚本来更改每个设置。
理想情况下,我想:
干杯! 阿德里安
答案 0 :(得分:5)
我必须承认我是KISS的粉丝。根据你的写作,我会做以下事情:
创建一个包含变量的配置类:
class Configuration {
protected $sqlUser = "myUser";
protected $sqlPass = "myPass";
// ... and the remaining config variables
public function getSQLUser() {
return $this->sqlUser();
}
public function getSQLPass() {
return $this->sqlPass;
}
// ... and the remaining getters
}
这使您可以完全控制将来如何继续进行配置。例如,您可以通过更改此课程
我自己这样做。这足以满足我的需要,它避免了建筑摩天大楼。
答案 1 :(得分:1)
配置永远不应该存在于您的代码中。维护凭证或值来操作不是代码的“工作”,应该将这些值交给他们。
对此的一个很好的解读和解决方案是The Twelve-Factor App,它将告诉您将这些存储在环境中(通常是服务器上的环境变量)而不是代码。
答案 2 :(得分:0)
class App {
public function getConfig($conf_name){
return new Config($conf_name);
}
}
class Config {
private $DB_host = '127.0.0.1';
function __construct($conf_name){
//return config
}
}
class DB extends App {
public function conn(){
$this->getConfig('DB');
//.......
}
}