1.架构设计
(1)最终架构
Main:处理输入并调用Cmd类进行处理。
Cmd:根据输入不同类型进行处理。
Adventurer:冒险者相关属性、方法。
Equipment、Food、Bottle:不同物品的实现。
Commodity:价值体接口。
不同Bottle、Equipment:继承实现。
Bag:处理背包相关的事物。
Shop:处理商店有关事物。
(2)迭代中的架构调整及考虑
在hw1-hw3中,一直在main中处理所有指令,然后发现main函数长度会超过60行~~~后来单独开了Cmd类来进行指令的处理。但是Cmd中处理指令仍有一些冗长和重复。
在战斗日志处理中,把战斗日志也放在了Cmd中,但是后来发现这样会使得Cmd类比较臃肿,最后一次作业本来想调整的,但不是很有思路,就放弃了…
最后一次作业中,在背包中存储物品时,单独开了Commodity的一个HashMap,方便清空背包时遍历,以免遍历HashMap和TreeMap的嵌套结构。
在迭代过程中使用了继承和接口,使得不需要对原有代码进行大改。
2.使用junit的心得体会
junit的测试一定要全面!我是采用造数据验证大部分函数的功能是否正常,用assert相关的函数判断结果是否符合预期。在课程中对junit测试要求很高(method覆盖率大于90%、line大于60%、Branch大于60%)。这使得在写测试时要对大部分函数都进行覆盖,或者在测试某个函数时充分调用一些其他函数。在提高branch覆盖率的同时,也是在对函数不同分支的考量。
我的函数都写得相对复杂,这样带来的好处是在使用不需要一次性调用很多函数,但是就对单个函数的正确性有了更高的要求,进行单元测试能很好地测试出程序中可能存在的错误。也可以通过对Cmd类进行数据输入来进行比较综合的测试。
3.学习oopre的心得体会
oopre中,我逐渐开始了解如何面向对象进行编程,而并非像原来C语言那样面向过程编程,不是仅仅考虑如何设计出代码,一步步解决问题,而是能够对代码进行封装,合理地构建自己的代码,使得代码能够方便迭代,方便进行大规模开发。
代码风格方面,一开始我对于checkstyle感到很痛苦,觉得没有必要把这个过程限定得这么死,Main类和方法不能超过60行,其他类不能超过500行,一行不能超过100个字符。但是后来逐渐明白,这样的代码便于维护和继续开发,具有更强的可读性,也对我们这些开发者的能力培养有了很大的帮助。
4.对oopre课程的简单建议
可以把gitlab配置和idea配置拆开做教程,合在一起容易让人不明白(也可能是我的问题)。
有几次迭代过程难度比较大,需要消耗比较多的时间。