从《从架构的角度看,如何写好代码?》中来看如何编写单元测试代码

《从架构的角度看,如何写好代码?》这篇文章是一线开发人员实践的经验总结,文字很通俗,应该是基于Java语言环境,但我认为也是符合多数PHP项目团队的所处实践阶段的。

“业余选手,越想从水里浮起来,就越想把头抬起来,身体反而沉下去。只有克服恐惧,把头往水里压下去,身体才能够从水里浮起来。真正专业的习惯往往是和我们日常的行为相反的”。

文章里面提出的代码分层结构如下图:

左侧的要直接面对用户的需求,右侧的更多的需要面对业务的核心。

逻辑只允许存在于右侧Business中,左侧Service、Glue Code、Repository都不允许存在业务逻辑。

分工:

  • Service专注于用户的需求,并组合Glue Code提供的服务完成需求。

  • Glue Code专注于组合business的调用,管理Business里面对象的生命周期,并且通过Repository保存或加载Business的状态。

  • Business专注于实现业务逻辑的核心模型。

  • Repository专注于数据的保存,并和存储设备一一对应。

    只要这几块的开发人员互相商量好了接口定义,这几个部分的开发就可以并行的进行,极大的提升开发的效率,缩短开发的时间。

概念详解

Repository

从BM对象传递过来,转换为对应的entity进行数据库操作

Business Model

业务逻辑

在软件代码中,不需缩进和计算的顺序调用,包括缩进的代码目的是catch exception的,都不算逻辑,除此以外都是逻辑。

BM与Entity

Model关心的实际上是业务行为,数据只是是这些行为的结果。所以Glue Code需要把Model转换为Entity(每个Entity对应一张表,并且跟着表的变化而变化),Entity和存储设备里面的存储粒度一一对应,这样就保证存储的变更不会影响Model。

Business Model是必须要重用的,一旦发现重用出现问题,那么说明Business Model的识别出现了问题,这是一个我们要重新思考Model的信号。

在PHP中,重用的标准,可以参考Java的Jar包形式,将BM打包成Phar包独立发行管理。

Business Model必须是一个完美的树状,如果不是,也说明Model的识别出了问题。

Service

确保每个Service只做一件事情。

当多个不同的角色访问同一个接口,一旦某个角色的需求发生了变化,就会要求开发人员去修改,而这个修改往往会影响到其他的角色。尽量给不同的角色不同的Service,避免重用,降低沟通成本。

Service里面没有逻辑的话,开发和管理非常的简单,可以快速应对业务的变化。只有更快地变,更容易的变,才能更好地应对变。

如何写单元测试代码

结论,对BM层的代码进行单元测试。

基于这篇文章,应该可以整理出一套供团队使用的PHP开发框架,包括单元测试的骨架。

原文地址:https://www.cnblogs.com/x3d/p/5410754.html