问题1:注释太少了
xxx
问题2:
这两个字段的命名不合适,太相似分不清哪个和哪个了。 下面这个BigPanelMaker
类的对象命名要修改。
问题3:方向信息是用字段bool[] m_isDirectionPressedArray = new bool[ 4 ];
来实现的
此时,当每次调用这个数组的时候,不是很清楚数组中的每一个项目代表的具体含义。导致①阅读困难;②维护困难
改成为用枚举
来实现。
问题4:生成大方块的类名不合适
命名问题很大,这个类主要是用来实现①生成大Panel②移动大Panel(移动的方法在这里,Form只是将要移动的Panel丢进来)
建议:
改成MoveObject
,这里提出疑问是否可改成MoveRectangle
?其实是可以的,前者命名的原因是:①“方块”这个信息是否重要,我们再代码中实现时候,根本没有涉及“方块”部分。②以后如果不是要移动“方块”,改成移动圆形呢?
此时觉醒:继承的作用,我现在这个类主要两个目的:①生成大Panel②移动大Panel。然而当使用继承Panel以后,就可以取消掉①,因为把它实例化出来,本身就是一个Panel。
问题5:方法名命名问题
建议这个方法名称直接改成Move
。如果是原来的名称,因为传进去的名称是BigPanel
,而方法名称又是MoveBigPanel
,会容易造成疑惑:自己移动自己?
一般情况下,类似的,如果Move后还有名词,则表示移动别人。
问题6:记录按键按下容器
原来我是使用一个bool
类型的数组bool[] m_isDirectionPressedArray = new bool[ 4 ];
来装方向的状态,每次按下键盘,会存入对应方向键信息;每次松开键盘,会清除对应方向键信息。
这样就导致一个问题:可阅读性很差,维护性也很差,因为没有人知道是数组中哪个对应的是哪个方向。每次都得看注释或者更多其他的代码来确定。
建议:
改成用枚举来存取方向键的信息。
问题7:传入方法内信息、传入名称
在大Panel的移动方块的方法时,我传入了①方向信息的数组;②Panel 类型的 大Panel;③Form类型的form
1. form
的名称取的不对,因为在这个类当中,本身就没有form这个概念,出现这个词就很怪,建议改成实际要用的、有意义的词汇,例如BorderInfomation
。但是这样的话,下面调用时会出现BorderInfomation.ClientSize.Width
就不是很合适。
2. 传入②Panel 类型的 大Panel;③Form类型的form有很大的问题。其实我们需要的信息相对较少,例如我们只是要BigPanel
的X和Y信息,只是要Form
的Width和Height信息,可以只把这些信息传入。
3.针对于传入Form的边界信息:由于边界信息是一直不变的(假设不手动缩放等),我们可以在调用方法之前就把坐标信息(size)传入,或者直接写在构造方法中。当发现Form的尺寸改变后,就再传入一次。
问题8:变量命名问题 nScale
这里的命名很不合适,因为“Scale”这个词,一般只有在CAD画图的比例缩放的时候才使用到,其余的用的不多。
建议:
将变量名称改为:MoveSpeed
,这样就能很好的体现了这个变量的功能。**也就是说,变量的命名要往实际运行体现来着想。**实际这个变量改变了,就会影响动的速度,因此改成MoveSpeed
就很合适。
而虽然实际移动的是距离,MoveDistance
这个名称在维护理解起来就不是很容易,要将这个部分的内容抽象出来,让人更容易理解。
问题9:单独拉一个方法出来,利用方法名和变量名是的代码可读性变强。
if( nDirectionArray[ 0 ] == true ) {
这一部分是判断方向信息,来决定往哪边移动。
1. 首先可以将这一部分内容做成一个方法,返回bool类型值,来判断是否可以(往左)移动。
2.每一个方向都可以做成一个方法,这样逻辑更清楚。
if( nBigPanelY < 0 ) {
这一部分是用来判断是否到边界,若到边界则让动作停止。这些逻辑可以放在上面制作的那个方法中。
例如:定义四个“是否可以移动”的bool值,做四个方法“检查是否可以往哪个方向移动”。
问题10:
这个部分是用来判断是否两个相反的按键同时按下,从而控制亮灯,但是!我的判断基准是方向键信息
哪个被按下了,这样其实不对!
让我们抽象出来看:首先是否亮灯在规格中定义为:方块往哪个方向移动,则会亮哪个方向的等,而我们用按键信息来判断其实是不准确/合适的。实际上是否亮灯,需要用是否移动来判断。
问题11:每次都new
此处在改变小Panel颜色时候,需要调用SmallPanelMaker类的方法,而为了减少字段的产生,我又new 了一个 对象出来。
这样其实很不好,因为①这个new出来的对象每次只做一件事,做完就没用了。一般不会出现这种只做一件事就舍弃的情况。②为了节省字段,但是这个不属于“节省”范畴,这个是必须作为字段存在了。