# 服务架构 * * * * * **什么是服务?** 在计算机领域中服务这个词应用非常广泛,比如操作系统里面的服务,比如分布式架构中的服务,再比如不同语言或框架对服务的解释也是有一定的出入。 咱们百度一下 服务 是啥意思, [释义] 履行职务,为大家做事 那么服务在OneBase中的意义就是跟这个示意差不多啦 ^_^。 在OneBase中建议将可能需要扩展的一组功能封装为服务, 就比如 支付服务,里面包含支付宝,微信 等,研发者可以扩展自己需要的支付。再比如短信服务,里面包含 阿里大鱼 等 短信发送方式,研发者可以扩展自己需要的短信平台。 服务封装的场景很多,就是咱们服务里面有很多服务提供商的情况下,像云存储,里面的服务提供商有 七牛,又拍云,阿里OSS 等,这样说相信大家更容易理解。 那么省市县三级联动插件 为什么不封装为服务呢? 因为省市县三级联动没有服务提供商,网上各种代码实现的效果也都是大同小异,最主要的是 三级联动功能咱们不需要进行横向扩展,顶多也就是将数据表中的城市信息更新一下,所以咱们就将ta封装成插件,方便复用就好咯。 * * * * * **什么是驱动?** ![](https://box.kancloud.cn/fc6040685747bf4e9cd5af6b31b89325_392x900.png) 上图中的driver目录是TP5的驱动,OneBase的驱动是参考TP5的驱动设计的,如下图。 ![](https://box.kancloud.cn/0b01ad0bb0c2e1945966eb9917787abf_323x742.jpg) 这样就很容易理解了吧,在OneBase里面 这些服务的提供者就是驱动,比如支付宝,比如七牛云 就是OneBase中的服务驱动,支付能力,云存储能力 就是 OneBase中的服务。 Driver.php 中定义了该服务下所有驱动的对外统一接口,这样研发者就只需要关注怎么实现驱动接口就好,以后新增一个支付服务驱动 比如 银联支付,只需要 实现 支付通知,获取订单 等接口方法就OK了,这样咱们驱动内部具体实现代码不管有多大变化 ,业务逻辑不管有多复杂,对上层提供统一调用方式,上层使用上毫无影响。 这算是在项目实战中使用多态的一种方式,希望童鞋们可以掌握。 ![](https://box.kancloud.cn/3ddba301afee3139915e0efb90ef9a1d_1494x924.png)