C#培训2019-10-17第三课 方块移动--导师问题讲解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41617697/article/details/102609230
问题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出来的对象每次只做一件事,做完就没用了。一般不会出现这种只做一件事就舍弃的情况。②为了节省字段,但是这个不属于“节省”范畴,这个是必须作为字段存在了。

猜你喜欢

转载自blog.csdn.net/qq_41617697/article/details/102609230
今日推荐