手把手带你写一个 Web 框架
叶剑峰
腾讯高级工程师,前滴滴技术专家
22731 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
特别放送 (1讲)
手把手带你写一个 Web 框架
15
15
1.0x
00:00/00:00
登录|注册

10|面向接口编程(上):一切皆服务,服务基于协议

服务提供者的接口定义
接口服务的理论基础
面向接口/对象/过程
屏蔽具体实现
抽象业务
面向接口编程

该思维导图由 AI 生成,仅供参考

你好,我是轩脉刃。
在上一节课我们已经将 Gin 框架迁移到自己的 hade 框架中,但是如果 hade 框架只止步于 Gin 的已有功能:支持 Context、路由、中间件这些框架最简单的功能,显然背离了我们设计这个框架的初衷,毕竟我们的目标是搭建一个生产中可用且具有丰富功能模块的框架。
那么如何组织这些功能模块更好地协作,就是我们今天要讨论的问题。
组织的方法也很简单,之前提到过。如果你还记得我们第五课封装请求和返回结构的时候,先定义了 IRequest 和 IResponse 接口,再一一实现具体的函数方法,这种先接口后实现的方式,其实不仅仅是一种代码优化手段,更是一种编程思想:面向接口编程这其实就是我们组织功能模块的核心思路。

面向接口编程

面向接口编程的思想到底是什么含义?我们从关键词“接口”开始思考。
不知道你考虑过这个问题没有,现在的高级语言,比如 PHP、Golang、Java 等,除了函数、对象等定义之外,都无一例外地拥有“接口”。但是为什么这些高级语言会需要有“接口”这个定义呢?我们从接口做到了什么的角度来反向思考。

抽象业务

首先,接口实现了对业务逻辑的抽象,设计接口就是抽象业务的过程。
因为在工作、生活中,我们需要把业务转换到代码中。但是一个真实的业务需求往往有很多复杂的描述,有些描述是某个业务特有的,而有些描述是所有同类型业务共有的,我们需要把描述的相同点抽象出来,成为一个个的步骤。而每个步骤实际上都是一个通过输入、产生输出的方法,把这些方法聚合起来,就是一个接口。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

面向接口编程是一种重要的编程思想,通过接口的抽象和实现,能更好地组织功能模块,实现业务逻辑的抽象和建模。本文深入探讨了面向接口编程的含义,强调了接口对业务逻辑的抽象和对具体实现的屏蔽。通过具体例子阐述了接口的优势,以及面向接口编程与面向对象编程、面向过程编程的区别。面向接口编程的思维方式更加抽象,使调用方对能力敏感,而对具体实现不敏感,从而提高了代码的灵活性和可维护性。文章通过对比分析,深入浅出地阐述了面向接口编程的重要性和优势,为读者提供了深入理解和应用该编程思想的指导。此外,还介绍了服务提供者的接口定义,包括获取服务凭证的能力、创建服务实例化方法的能力、获取服务实例化方法参数的能力,以及与实例化控制相关的方法。这些能力的设计符合面向接口编程的逻辑,为读者提供了清晰的思路和实践指导。文章强调了面向接口编程思想在框架设计、架构设计和微服务中的应用,鼓励读者在工作生活中思考并分享使用面向接口思想的实例。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一个 Web 框架》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(7)

  • 最新
  • 精选
  • 我敲 这就是laravel的设计 我曾几何时就思考过用go实现laravel的一些东西

    作者回复: 嗯嗯

    2021-12-07
    1
  • 看到 service provider 就想起了laravel 确实是这样 之前对这个概念也是比较浅的,但是这波直接悟了

    作者回复: 服务容器核心就是这样

    2021-12-07
    1
  • 宙斯
    对服务提供者的理解: 服务和容器是框架对组件管理的方式,服务组件之间通过框架主体调用的。 框架提供标准(出具服务组件提供者接口),服务组件需要实现注册到框架主体的逻辑(服务组件注册方式和时机不同)。 分享:工作生活中有遇到使用面向接口思想? 业务场景:基于不同消息主题计算会员等级和福利和积分。 依据不同主题有不同计算规则,都会影响会员的等级,福利,积分的变更,可以抽象接口:分数计算,等级计算,福利计算,等级变更,福利变更,积分变更。

    作者回复: 服务提供者就是一个桥梁,容器中某个服务由哪个实例来提供,完全由桥梁说了算

    2021-10-24
  • Geek_5244fa
    Laravel 既视感。 好奇最后怎样在 handler 里获取服务,怎样实现依赖注入。
    2021-10-08
    2
    5
  • 大量的接口化真的有意义么,很多接口一辈子也只有一个实现,根本不会有第二个实现了,为啥还要浪费时间去搞接口,直接拿来用不好么?
    2022-06-07
    3
    3
  • 🌿
    方法NewInstance和ServiceProvider.Register(Container) NewInstance 理解起来有点绕,希望老师可以在结尾提供一个注册服务的uml时序图,便于理解。
    2022-05-02
  • 拾掇拾掇
    签到,学习了
    2021-10-08
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部