BUAA-2023秋季学期面向对象先导OOpre-第八次作业-博客总结
目录
一、最终架构设计
1. 类&&接口
-
Main主类,包含输入指令、全局数据结构等。
更好的架构是将输入指令与全局的存储数据分离形成两个独立的类,再上层是主类。
(因为太懒所以没这样重构) -
Commodity(接口)-
Adventure -
BottleRecoverBottleReinforcedBottle
-
EquipmentCritEquipmentEpicEquipment
-
Food
价值体接口,下有冒险者、药水瓶、装备、食物。
其中药水瓶与装备下又分别有两个子类,表示不同功能的药水瓶与装备。 -
-
Lod=>FightLogLog类表示单个的战斗日志,FightLog类实现战斗日志相关的操作。 -
TradeRecord=>StoreTradeRecord类表示单个的商店交易记录。
Store为单例模式,负责存储交易记录以及进行交易、生产商品等相关操作。 -
Factory(接口)BotFactoryEquFactoryFdFactory
工厂接口,下有药水瓶工厂、装备工厂、食物工厂,负责生产不同的商品。
一开始设计工厂的时候我还想在药水瓶和装备工厂下再进一步细分,但由于这样一来类太多了过于混乱,因此重构成现在这样。 -
ObserveData=>ObserveObserveData表示单个的受观察者的数据。
Observe表示一个雇主与它的雇佣兵之间的观察关系,负责存储观察数据、进行观察(援助)相关操作。
2. 总结
架构不足之处很明显,(我一直都了解但就是懒得改),大体有两处,分别是类的内容混乱(最严重的是主类)以及没有对不同的类构建不同的层级目录;自认为对于工厂模式以及观察者模式的应用较好。
二、迭代过程
大体上分为下面几个过程:
- 初始只有基础的冒险者、药水瓶、装备以及主类。
- 加入了背包,整体架构几乎不变。
- 加入了战斗模式,新增战斗目录等类;此时主类方法快到60行了,因此开始将每个指令分离分别单独成方法(后续其实应该进一步将指令以及数据从主类分离,进一步抽象化)。
- 药水瓶以及装备的种类增加,新增子类分别继承原先的药水瓶类、装备类;新增价值属性,将价值体集成成为接口。(这个时候类就已经很多了,其实应该开始构建层级目录了,提高可读性、逻辑性)
- 增加了商店以及援助系统,应用工厂模式、观察者模式、单例模式。
刚开始几次作业真的跟老师说得一样:按照写c的方法写Java…后面经过几次重构之后代码就变得越来越抽象了,封装次数也在变多,也认识到了Java跟c的一些区别。
三、Junit使用心得
1. 有点用(但不多)
自己编一些数据样例,是可以起到一定作用的,但自己编写的强度以及广度肯定不够,(不然还要强测干什么)。
在后几次迭代中,我在中测前用junit自测,也发现了一些bug,但是也没有出现一次中测直接过的情况。
2. 写的过程很曲折
我重构test的次数是最多的…
到最后我只保留了一个test类,名字叫MainTest,顾名思义,在这个类中我对主类所有的指令进行测试,还算比较简洁~~(也很方便刷覆盖率)~~,但如果真的想测试各个方法的功能的话还应该要挨个写test。
3. 耗时中等偏多
上面也说了我test重构了很多次,再加上如果你真的想依靠test来发现自己的bug的话就要好好认真编测试数据,因此耗时应该不算少。
四、学习oopre心得
- 应该大概差不多可能算是已经Java入门了吧…
- 了解到了工厂模式、观察者模式等不同的模式
- 认识到了深克隆、浅克隆的区别
- 对于面向对象的了解变得透彻了(应该)
- …
- 迭代真的挺有讲究的,要做好每次作业都重构的准备*(要尽量避免在自己的屎山代码上继续拉屎)*。
- checkstyle代码风格检查真的挺
恶心有用 - 初步学习到了git的使用,这对于日后学习工作都很有帮助
- 心态、抗压能力以及
修仙熬夜能力的锻炼 - …
五、对oopre课程的建议
- 如果可能的话,每次迭代之后给予一些规范的或优秀的架构样例,或者将下次迭代的要求提前公布,这样能够很大程度上减少同学们的重构次数,减轻课业压力。
- 刚开始配置git等过程真的挺麻烦的,要是能有更详细的教程(最好是视频形式)就可以减轻一些难度。
本文总结了作者在BUAA-2023秋季学期面向对象先导课程OOpre中的第八次作业经历,包括类与接口设计、Junit使用体会、学习心得和对课程的建议。强调了架构改进、模式理解及代码重构的重要性。
573

被折叠的 条评论
为什么被折叠?



