From Apprentice To Artisan 02

#更进一步

使用另一个例子来巩固理解。或许我们想去通知客户缴费了,我们定义两个Interfaces (接口)、或者是Contracts (协议、约定,就是卖身契啦),这些约定在往后改变他们的实现更加灵活

//开账单者
interface BillerInterface {
    public function bill(array $user, $amount);
}

//账单通知者
interface BillingNotifierInterface {
    public function notify(array $user, $amount);
}

#下一个实现 BillerInterface 接口

// 条纹开账单者
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);
    }

    // ...
}

通过划分每个类的职责、现在就很容易注入不同的notifer(账单通知者接口)的 implementation(实现)到 billing (账单)类中。比如,我们可以注入(inject)一个 SmsNotifier 或者 EmailNotfier ,Biller (账单者)不在关注通知的实现、只需要遵守contract (协议、接口)即可。只要类坚守他的协议(接口)、biller 就能接收它。不仅仅如此,這样我们不仅仅方便开发,而且可以通过 注入(injecting)一个模拟(mock) BillingNotifierInterface 的通知者 隔离来测试 biller 。

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);

這是就是依赖注入。biiler (开账单者)不再关注怎么通知用户了,只需要把它交个一个通知者即可。小小的改变使你的应用焕然一新,你的代码变得更加容易维护,因为类的职责是明确指定的。并且更加容易测试,测试时,你只需要简单注入模拟依赖去隔离code 即可。


#IoC 容器呢,依赖注入不需要IoC 容器么? 当然,下面章节,容器使依赖注入更加容易管理,但它并不是必要的,只要准守本章的原则,可以在任何项目中使用依赖注入,而不管是否使用了容器


#太像java (copy 过来的)

有人会说使用接口让PHP代码看上去太像Java了——即代码太罗嗦了——你必须定义接口然后实现它,要多按好多下键盘。

对于小而简单的应用来说,以上说法也对。 接口通常是不必要的。将代码耦合到那些你认为不会改变的地方也是可以的。在你确信不会改变的地方就没有必要使用接口了。架构师说“不会改变的地方是不存在的”。不过话说回来,有时候的确不会改。


在大型应用中接口是很有帮助的。和提升的代码灵活性、可测试性比起来,多敲键盘费的功夫就微不足道了。当你迅速的切换了代码实现的时候,你的经理一定会被你的神速吓一跳的。你也可以写出更适应变化的代码。


总而言之, 记住本书提倡“简单”架构。如果你在写小程序的时候无法遵守接口原则, 别觉得不好意思。 要记住我们写代码是要快乐的写。如果你不喜欢写接口,那就先简单的写代码吧。日后再精进即可。



该文只是方便我个人理解,参照:http://my.oschina.net/zgldh/blog/305556


Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值