其实我觉得要实现这道题的功能并不难,但是,怎么样完美的实现代码的封装以及减少代码量才是我头疼的...例如对于这种判断名字和编号是否正确的方法是否可以封装等等问题。我觉得在测试类里代码越少越好,最好只要一句话调用一个方法就好了。还有对于业务的分析我感觉也遇到了障碍,从逻辑上来说,选书应该是人的方法,让人选书是图书馆的方法,我是否应该再创建一个人类,和一个图书馆类?
问题写得有些混乱,还请高手能详细替我解答,要是有代码就更好了,不胜感激!
下面是我个人的理解,参考了老师的代码,不保证正确性,自由采用。
图书馆借书系统整体上作为一个类对待,其中涉及属性和方法。
不需要创建人类吧,毕竟这里只需要获取控制台的命令,如果是真实的借书系统,可能会涉及到人类的创建,比如学生或者教职工;
这里我们尽量从全局上划分系统的实现方法,比如:
按照书名选书模块;
安装序号选书模块;
命令接受模块;
可以发现有了以上三个功能方法,该系统的功能就都实现了。
**尽量把和这些功能相关的组件都封装到该方法里,而不要放到主调用方法里,主方法只负责接受返回值和处理抛出的异常。**
然后用主方法,分布调用这些模块,处理这些模块抛出的异常即可。
我自己也说乱了,总之我觉得可以把方法里的异常分为两种类型,
一种可以把异常看做是方法自身内部的小bug,可以直接在方法里面处理掉用,
一种可以把异常看做是该方法的一类特殊返回值,既然是该方法的特殊返回值,当然应该可以抛给调用者处理,(有三种方式:1,返回值间接抛出;2,通过异常链打包抛出;3,直接抛出)
里面可能有讲的不对的地方,学习就是试错
再比如getBookByName()这个方法,会抛出“图书不存在异常”,当然可以在方法内直接处理这个异常,但是处理过程用到了main()里的其他命令,所以还是抛给mian()。