Archive for » 十一月, 2008 «

这周一一来Troy就说又想要新的格式化字符串,但是这个C#自带的那种Format又无法支持,于是他说那就先Hard coding到代码里面去,或者自己写一个可以自由输入命令的小东西出来~时间那么紧,我还没有完全做好心理准备,于是就先硬编码后编译了一下给他用,然后我就自个儿琢磨这玩意儿要怎么写。觉得到公司来养成了一个很好的习惯,就是在写代码前自己会在笔记本上写写画画,把这个小块的类图啊,状态关系啊,甚至是流程都画一遍,发现这样在写起代码来确实能够让思路更清晰,也减少很多异常情况没有考虑的机会。这次在写这个自定义命令的时候,我又应用了一个模式 – Factory Method Pattern,不过因为都没怎么写过,有点忘了,后来在Wiki上认真地又看了一遍才开始动手写。BTW,以前一直觉得Wiki其实没有那么神,再加上前一段时墙时不墙的,几乎没上过,来了公司以后才发现,这是个好东东啊,难怪那么多人对它趋之若鹜。说回代码,设计模式的确博大精深,在这么一个小地方运用了这么一个小模式,我就感觉受益匪浅,以后如果要自己添加命令,只需要自己继承一个类,改写好那些纯虚函数,一切OK,以前的代码基本上不需要改动便可以运行,这在大型的软件项目中是非常非常重要的,因为你改动一个地方就可以导致很多其他引用这段代码的地方需要相应的更改,也有可能引入很多的regression。就像上次Troy给我Review代码时所说,我们往里面加东西,一个很重要的原则就是对原来的代码修改地越少越好。接下来我又做了一个我自己加上的需求,tag name那边我加了一个自动提示框,就像Google那样可以根据输入自动给出对应的提示,技术上其实不难实现,就是用ComboBox的下拉框来模拟这么一个效果~这样以后用这个软件再也不用费神去原来的xaml文件Copy/Paste了~在后半周我就开始了对OWL的测试,这也是我毕业设计可以涉及到的东西,

这周又开始了新的任务,我以为Troy还要Review我的Provider的代码所以我可以忙里偷闲一会儿的时候,Troy和我说,要从Miles那里转一个任务给我 — 果然,在公司里很难得会有轻松的时候啊。那个任务挺简单的,是做一个小工具帮忙我们修改Inventor的xaml文件,具体的说就是能方便地修改AutomationID以供接下来的使用。其实Miles已经做了一个原型出来了,能够读文件,解析Id属性,并且能够单个修改,但是还是远远不够,因为我们可能要面对的是大量的修改工作,然而他还有其他工作要做,所以我就揽下了这个活儿~Troy说最好周三就能用,可是我接到任务的时候已经周一下午了~没关系,相信我自己的水平,HOHO~说到这个任务,比较麻烦的就是在界面上面~因为这是我第一次写WPF的程序,还是比较生疏的,这次要用的又是一个比较灵活的控件 – GridView,在怎么动态添加列以及WPF特有的Data Binding上,我花了好大的力气,周二一天就泡在这上面了,本来以为要加班,不过最后很勇猛地在下班前五分钟搞定了~哈哈,还是要多谢Miles,已经写好了很多有用的函数,我只需要调用就好了~虽然和他之前没有过多的交流,不过这或许也能体现出软件工程上面对接口定义的要求?总之周三给Troy的时候他还是比较满意的,后来他又提出要求,说希望能格式化AutomationID的输出~看,客户的需求总是在不断地变,于是做为“软件工程师”的我们只能不断地修改代码,以符合客户的需求。不过这个以前在学校完全没有接触过,在学校做课程项目的时候,我就是自己的客户,哼哼,什么要什么不要全由我说了算,做出来了就拉倒,根本不可能涉及到需求变更的情况,这也是公司的实际情况和学校的理论情况的差异吧。这里面涉及到的代码重用是我一直跃跃欲试的area,不过具体到这次的变更,其实还没有那么高深,加一个对话框再改一处函数就可以了~很轻松地解决掉以后就到了周五了,例行性地偷懒,于是这一周就结束了。

这一周比较闲~因为周四周五的时候Troy请假了~所以这两天子明告诉我怎么用iFlip对Inventor的一些Transcript进行测试,因为Team里面现在要准备一份报告,人手不够,所以我要帮忙加入进来~内容非常非常简单,我就不说了~可是因为我这个破电脑…所以周四一天基本上在装Inventor2010了,还没装好~~会有一个Licensing Error从而导致iTest无法在我这台机器上顺利运行~没法子,子明只好给我在服务器上开了个帐号,然后远程登录来跑这个Test了~~

头三天我在干嘛呢~因为Troy对我在C#中以发消息的方式和Provider沟通不是特别满意,所以他希望我能修改一下代码~可是这个挺麻烦的~Provider既要和C++沟通又要和C#互操作而且还要编译进一个Dll里面…难度挺大,至少我找了一天也没有找到什么解决方法~最后新建了一个C++/CLI工程~Provider用传统的C++和dllexport来做,至于C#,就用C++/CLI重新写了一个Proxy类,通过这个类来调用我的Provider.最后,在Provider上我加了一个Singleton模式~这可是我第一次用模式啊!小激动一下~~最近的效果挺好的,不过Troy比较忙,一直没什么时间给我Review,估计这个可以要拖下来了~

在公司的另外一个收获就是短短的7个星期我已经搜集了11本电子书了,而且是我几乎都没看过在.NET上特别新的书~~这个收获还是不小哒~哈,等实习结束以后好好学习~~C++、C++/CLI、C#,我就走C字路线鸟~~

不知不觉来公司正式工作已经到了第6周了~这一周开始,Troy要Review我的代码了,研究了三周也写了三周,是该出点成果的时候了~在Review代码的时候,Troy和我说了大概的方法,和我原先想的差不多,用一个文本比较工具(比如说WinMerge)比较出哪些地方不一样,这些地方就是你写的,然后再理顺一遍~不得不说,学校写的代码和公司要求的就是不一样~在写这个Provider的时候,我还是用了很多学校里面的恶习,比如说能懒则懒,找到了实现这个功能的一个方法就绝对不去想是不是有其他的方法…不过比较可喜的是我现在的注释写的比以前勤快的多~而且也遵循了”一眼就能看出意思的代码绝对不写注释”的原则~这部分代码其实我已经看了三周了,笔记也做了好几张纸,但是因为量比较大,还是挺容易忘记看了些什么写了些什么,这时候以前写的注释就可以让我很清楚了解为什么当时要这么写~~嗯,要保持下去!~转回正题,经过一周的Review,Troy先先后后给我指出了几个问题~

(1) 因为原来的Framework基本上已经CC(注:Code Complete)了,所以我们加的代码尽量不要插在代码中间,这样别人找起来会觉得很不方便~比如说在类定义的时候,用/占据一行并且标明这个的用途,然后重新写好声明~方便阅读

(2) 我们加的代码尽量抽象成为一个类,尽量不要成为我们要修改的类的数据成员或者成员变量~这样可以减少代码的关联度~当代码量比较复杂的时候他的可读性和维护性都会比较好~

(3)尽量一个类一个文件

虽然这些要求基本上都是对格式的要求,但是其实对于我这个还不到100行代码的小改动来说,规范了格式一样是对工程的重视~其实从这些小细节里面可以学到很多~

Category: 日记  Leave a Comment