【发布时间】:2012-04-06 22:25:58
【问题描述】:
我已经编程了一段时间,但从来没有兴趣从理论上了解每个概念的含义,我可能会使用各种编程概念,但并不知道。
服务定位器: 对我来说,是指通过减少代码量来加速开发的捷径记录。一个问题是:Locator 可以只引用命名空间/类,还是我可以拥有一个变量注册表?
这是我的理解:
$locator = new ServiceLocator()
$locator->set('app', new System\Application());
$locator->set('db', new System\Pdo());
// Get the objects
$locator->get('db')->connect();
$locator->get('app')->run();
依赖注入(和依赖注入容器): 在对象中注入对象,无论工厂模式如何,都可以更快地访问这些对象。还有 DI 容器?
这是我的理解:
$app = new System\Application(System\Config::load());
控制反转: 不懂这个设计模式(或者懂但不知道我做的是不是IoC)
那么,在理论上(最好有简单的例子),这些概念中的每一个是什么意思?我是正确的,还是有什么问题/可以改进?
谢谢!
【问题讨论】:
-
不确定您所说的“访问速度更快”是什么意思。全局变量或单例也一样快。我认为您所说的更多是关于模块化。
-
当我有一个 DI 时,整个类被注入到另一个类中,所以,我不需要另一个设计模式,因为我在我的第二类中拥有了我需要的一切。 (明白吗?!)
-
等一下......谁在这里问问题? :P
-
我将您的评论解释为一个问题。 (巴西初学者的东西)。你在谈论什么模块化? DI、IoC和service Locator跟这个有关系吗,能多解释一下吗?
-
将注入视为松散耦合的一种形式。不同的模块不必“知道”如何相互访问,但您可以注入引用。这使得在不破坏您忘记的东西的情况下更改不同的模块变得更加容易。为了代码的可持续发展,它是一种模块化方法,而不是访问方便。
标签: php design-patterns dependency-injection inversion-of-control service-locator