305
社区成员
发帖
与我相关
我的任务
分享
这次迭代作业需要实现以下几点:
分析需求,我总结了一下几点:
在第五次迭代的时候,我对之前的代码架构进行了优化。
之前我统一把 Bottle, Spell, Equipment 归入 Item,然后用一个 Action 接口实现 use,这会产生一些问题,
之前的架构图如下:

后来我总结出 Equipment 和 Bottle 具有相同实物的相同点,即需要携带、删除等,Bottle 和 Spell 有相同点,比如都需要 use,所以将 Item 和 UsableItem 分离开,这样,Bottle 兼有了 Item 和 UsableItem 的特性。
后来的架构图如下:

但是对代码的重构并非易事,即使重构后的代码架构会明显更合理。第五次迭代因为采用了重构的策略,出现了很多细节问题,所以导致强测没能顺利通过。但是这样的重构对后来的迭代做了铺垫,后面几次迭代感觉到结构更清晰,修改不容易出错。
这几次迭代中,我独立形成架构,我的原则是,能用更简便的方法实现功能,就不用新增类和接口,不用更复杂的数据结构。
比如说,处理 fight 指令时,我没有像 use 单独设置接口,而是直接在 Adventurer 中定义方法实现。考虑如下:
JUnit 可以单独测试类,能产生局部测试的效果,比如说当我编写 AttackSpell 的时候,我忘记在 changeHitPoints() 中写负号,导致体力值不能正常减少,这样的漏洞在当时的 JUnit 测试中就找到了。同时,也要善用 @Before, @Test 来处理建立对象和测试对象的问题。要充分考虑边界值,如null、空集合等,用 JUnit 的 assertThrows 验证异常。
项哥真神!!!足够冷静和清醒!