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

简介: 《从架构的角度看,如何写好代码?》这篇文章是一线开发人员实践的经验总结,文字很通俗,应该是基于Java语言环境,但我认为也是符合多数PHP项目团队的所处实践阶段的。“业余选手,越想从水里浮起来,就越想把头抬起来,身体反而沉下去。

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

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

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

img_ae58d26d2d9325f4bc3a4944bdb41436.png

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

逻辑只允许存在于右侧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开发框架,包括单元测试的骨架。

目录
相关文章
|
19天前
|
测试技术 API 数据库
Django测试入门:打造坚实代码基础的钥匙
Django测试入门:打造坚实代码基础的钥匙
29 3
|
6天前
|
测试技术 持续交付
软件测试的艺术:追求卓越的代码之旅
在软件的世界中,测试不仅仅是一项任务,它是一场精心编排的舞蹈,旨在确保每一个步伐都准确无误。本文将带您踏上一场探索软件测试之美的旅程,从基础理论到实践技巧,我们将一同揭开高效测试的秘密,并分享那些能让代码更健壮、更可靠的智慧精华。
13 2
|
11天前
|
测试技术 Go
写出高质量代码的秘诀:Golang中的测试驱动开发(TDD)
写出高质量代码的秘诀:Golang中的测试驱动开发(TDD)
|
19天前
|
Cloud Native PHP Docker
PHP 中的异常处理:提升代码的健壮性云原生时代的微服务架构实践
【7月更文挑战第31天】在PHP开发中,异常处理是确保应用程序稳定性和可靠性的关键。本文将引导您了解如何在PHP中实现有效的异常处理机制,通过实际代码示例展示如何捕获和处理异常,以及如何使用自定义异常类来增强错误管理的灵活性。我们将探索不同的异常处理策略,并讨论它们对提升代码质量的影响。 【7月更文挑战第31天】在数字化浪潮的推动下,云原生技术正成为企业转型的关键。本文将深入探讨如何在云平台上利用微服务架构实现敏捷开发和高效运维,通过具体的代码示例,揭示微服务与容器化部署的协同优势,同时指出在实施过程中可能遇到的挑战及应对策略。
22 1
|
2天前
|
缓存 Java Maven
SpringCloud基于Eureka的服务治理架构搭建与测试:从服务提供者到消费者的完整流程
Spring Cloud微服务框架中的Eureka是一个用于服务发现和注册的基础组件,它基于RESTful风格,为微服务架构提供了关键的服务注册与发现功能。以下是对Eureka的详细解析和搭建举例。
|
3天前
|
自动驾驶 测试技术 持续交付
软件测试的艺术:追求卓越的代码之旅
在软件开发的海洋中,测试是那艘不可或缺的航船,它带领我们驶向质量的彼岸。本文将带你领略软件测试的重要性,探讨如何通过创造性思维和系统方法提升测试效率与效果。我们将从测试基础出发,逐步深入到高级策略,最终实现测试的艺术化,确保软件产品能在复杂多变的环境中稳健航行。
|
4天前
|
Java 测试技术
单元测试问题之想通过单元测试来驱动代码的设计与重构,如何实现
单元测试问题之想通过单元测试来驱动代码的设计与重构,如何实现
|
4天前
分享一份 .NET Core 简单的自带日志系统配置,平时做一些测试或个人代码研究,用它就可以了
分享一份 .NET Core 简单的自带日志系统配置,平时做一些测试或个人代码研究,用它就可以了
|
4天前
|
存储 Kubernetes 测试技术
阿里云块存储问题之生产代码与测试代码需要同步原子提交如何解决
阿里云块存储问题之生产代码与测试代码需要同步原子提交如何解决
12 0
|
4天前
|
敏捷开发 安全 测试技术
软件测试的艺术:从代码到信心
在数字世界的舞台上,软件如同演员,而测试则是它们精彩表演的彩排。本文将带您穿梭于软件测试的幕后,揭示那些让软件从笨拙的初稿变成流畅的终演的魔法。我们将探索测试的多面性,从基础的单元测试到复杂的集成测试,再到用户面前的系统测试,每一步都旨在确保软件的优雅舞步不会因缺陷而绊倒。文章还将点亮持续集成的灯塔,指引船只安全航行,并展示自动化测试如何像忠实的伙伴一样,不断给予支持。最后,我们将探讨测试策略的选择艺术,如何在多变的需求与资源之间找到平衡点。让我们一起走进软件测试的世界,体验这场从代码到信心的旅程。