- 重学Java设计模式
- 付政委(小付哥)
- 569字
- 2025-02-20 21:46:38
7.4 违背设计模式实现
按照通常的需求迭代过程,往往最开始都是非常简单的,也是非常容易实现的。需求最初的模样,只是给每位考生创建出一张试卷即可,对于这样简单的需求,如果不仔细思考,可能会把所有代码写到一个类里。
7.4.1 工程结构


这个工程的结构只有一个用于生成试卷的控制类QuestionBankController,接下来看这样的类是如何实现的。
7.4.2 所有需求都写到一个类里



以上的代码主要包括三部分内容:将选择题和问答题创建到集合中,定义详情字符串包装结果,返回结果内容。单从代码阅读角度来看,这样的代码并不复杂,且更易于理解。因为它的编程方式不面向对象,只面向程序过程,业务逻辑需要什么就直接写什么。不考虑扩展性,能运行即可。但这段代码没有实现题目和答案乱序的功能,最终所有人的试卷题目的顺序都是一样的。如果需要增加混排题目功能,则代码实现就会非常混乱。
7.4.3 测试验证
1.单元测试

在单元测试中,调用了三次创建试卷的方法questionBankController.createPaper,给三位考生创建了三张试卷。
2.测试结果




以上是花花、豆豆和大宝三位考生的试卷:每个人的试卷内容是一样的,三个人的题目及答案顺序也一样,没有达到混排的要求。而且以上这样的代码很难扩展,随着题目的不断增加及乱序功能的补充,都会让这段代码变得越来越混乱。另外,这三张试卷本身题目一致,但在程序的实现方面,每次都需要创建题目信息,这相当于反复从数据库或者远程RPC接口中获取数据,会浪费服务资源。