依赖注入:为何如此热门?
1. 每个解决方案都源于问题
如今,大多数软件旨在自动化现实世界的流程,比如写信、购买喜欢乐队的新专辑或下达股票出售订单。在面向对象编程(OOP)中,这些流程由对象及其交互方法来实现。对象代表现实世界的对应物,例如飞机代表波音 747,汽车代表丰田汽车,采购订单代表购买书籍等。
以写邮件为例,使用电子邮件应用程序(如 Mozilla Thunderbird 或 Gmail)撰写邮件,并通过互联网发送给一个或多个收件人。这个过程可以建模为多个对象的交互,体现了对象作为服务的概念。在这个例子中,电子邮件充当消息撰写服务,互联网中继是传递代理,收件人的收件箱是接收服务。
1.1 将对象视为服务
给联系人发邮件的过程可分解为撰写、传递和接收邮件,分别由 Emailer、InternetRelay 和 RecipientInbox 负责,每个对象都是下一个对象的客户端。Emailer 使用 InternetRelay 服务发送邮件,而 InternetRelay 又使用 RecipientInbox 服务投递邮件。
撰写邮件的行为可进一步细化为更具体的任务:
- 撰写消息
- 检查拼写
- 查找收件人地址
每个任务都是一个特定的服务。例如,“撰写消息”属于文本编辑领域,选择 TextEditor 是合适的。将 TextEditor 建模为独立对象有诸多优点:
- Emailer 不会被用于文本操作的代码所干扰。
- TextEditor 组件可在其他场景(如日历或笔记应用程序)中复用,无需大量额外编码。
- 如果他人编写了通用的文本编辑组件,
超级会员免费看
订阅专栏 解锁全文
926

被折叠的 条评论
为什么被折叠?



