24 - 积分兑换系统实战

2021-08-25  本文已影响0人  舍是境界

需求分析及设计中,我们讲了积分系统的需求分析和系统设计。本文,我们来讲它的代码实现。

讲解的重点,并不是教你如何来实现积分系统的每个功能、每个接口,更不是教你如何编写 SQL 语句来增删改查数据,而是给你展示一些更普适的开发思想。比如,为什么要分 MVC 三层来开发?为什么要针对每层定义不同的数据对象?

业务开发包括哪些工作?

  1. 针对积分系统,我们先来看,如何设计数据库。
积分明细表设计示意图
  1. 接下来,我们再来看,如何设计积分系统的接口。
接口设计示意图
  1. 最后,我们来看业务模型的设计。

为什么要分 MVC 三层开发?

  1. 分层能起到代码复用的作用
  1. 分层能起到隔离变化的作用
  1. 分层能起到隔离关注点的作用
  1. 分层能提高代码的可测试性
  1. 分层能应对系统的复杂性

BO、VO、Entity 存在的意义是什么?

小结

  1. 为什么要分 MVC 三层开发?分层能起到代码复用的作用
    • 分层能起到隔离变化的作用
    • 分层能起到隔离关注点的作用
    • 分层能提高代码的可测试性
    • 分层能应对系统的复杂性
  2. BO、VO、Entity 存在的意义是什么?
    • 从设计的角度来说,VO、BO、Entity 的设计思路并不违反 DRY 原则,为了分层清晰、减少耦合,多维护几个类的成本也并不是不能接受的。但是,如果你真的有代码洁癖,对于代码重复的问题,我们可以通过继承或者组合来解决。
    • 如何进行数据对象之间的转化?最简单的方式就是手动复制。当然,你也可以使用 Java 中提供了数据对象转化工具,比如 BeanUtils、Dozer 等,可以大大简化繁琐的对象转化工作。
    • 尽管 VO、BO、Entity 的设计违背 OOP 的封装特性,有被随意修改的风险。但 Entity 和 VO 的生命周期是有限的,都仅限在本层范围内,相对来说是安全的。Service 层包含比较多的业务逻辑代码,所以 BO 就存在被任意修改的风险了。为了使用方便,我们只能做一些妥协,放弃 BO 的封装特性,由程序员自己来负责这些数据对象的不被错误使用。
  3. 总结用到的设计原则和思想
    • 从表面上看,做业务开发可能并不是特别有技术挑战,但是实际上,如果你要做到知其然知其所以然,做到透彻理解、真的懂,并不是件容易的事情。深挖一下,你会发现这其中还是蕴含了很多设计原则、思想和模式的。
上一篇 下一篇

猜你喜欢

热点阅读