#更进一步
使用另一个例子来巩固理解。或许我们想去通知客户缴费了,我们定义两个Interfaces (接口)、或者是Contracts (协议、约定,就是卖身契啦),这些约定在往后改变他们的实现更加灵活
//开账单者 interface BillerInterface { public function bill(array $user, $amount); } //账单通知者 interface BillingNotifierInterface { public function notify(array $user, $amount); }
// 条纹开账单者 class StripeBiller implements BillerInterface{ public function __construct(BillingNotifierInterface $notifier) { $this->notifier = $notifier; } public function bill(array $user, $amount) { // Bill the user via Stripe... $this->notifier->notify($user, $amount); } // ... }
Be The Interface 使用接口 While writing interfaces might seem to a lot of extra work, they can actually make your development more rapid. Use interfaces to mock and test the entire back-end of your application before writing a single line of implementation! 写接口可能看上去挺麻烦,但实际上能加速你的开发。你不用实现任何接口,就能使用模拟库来模拟你的接口,进而测试整个后台逻辑!
$biller = new StripeBiller(new SmsNotifier);
#IoC 容器呢,依赖注入不需要IoC 容器么? 当然,下面章节,容器使依赖注入更加容易管理,但它并不是必要的,只要准守本章的原则,可以在任何项目中使用依赖注入,而不管是否使用了容器
#太像java (copy 过来的)
有人会说使用接口让PHP代码看上去太像Java了——即代码太罗嗦了——你必须定义接口然后实现它,要多按好多下键盘。
对于小而简单的应用来说,以上说法也对。 接口通常是不必要的。将代码耦合到那些你认为不会改变的地方也是可以的。在你确信不会改变的地方就没有必要使用接口了。架构师说“不会改变的地方是不存在的”。不过话说回来,有时候的确不会改。
在大型应用中接口是很有帮助的。和提升的代码灵活性、可测试性比起来,多敲键盘费的功夫就微不足道了。当你迅速的切换了代码实现的时候,你的经理一定会被你的神速吓一跳的。你也可以写出更适应变化的代码。
总而言之, 记住本书提倡“简单”架构。如果你在写小程序的时候无法遵守接口原则, 别觉得不好意思。 要记住我们写代码是要快乐的写。如果你不喜欢写接口,那就先简单的写代码吧。日后再精进即可。
该文只是方便我个人理解,参照:http://my.oschina.net/zgldh/blog/305556