4:05 PM 5/7/2010
- 体会“代码噪音”这个词语。
- 遇到问题,首先考虑能不能做个工具来自动解决,这是最高级的方案
- 与其分而治之,不如化繁为简: 削除重复,寻求统一。普通的重复必然要削除。更隐蔽的重复,比如模式。程序里面可
能有许多的模式,但是却有相似的功能。统计程序的所有模式,并尽量减少模式的数量
- 分模块有时候就像搭电话线,一根线连接彼此,搭好了后就不管你想说啥想传啥都可以。。
- 如果要触发事件,创建一个事件处理对象,比回调一个事件处理函数要好,
这得益于面向对象。事件处理对象比事件处理函数强大的多。
- 如果有个对象有太多的数据需要用户通过界面来配置,那么考虑数据驱动吧:让这个对象
反射自己的数据,界面通过反射出来的数据动态构造界面。。。
- 所谓的灵活设计,就是用大量虚函数在正常逻辑处理里面放置插槽,供扩展使用。。。
- Mosaic分离了功能块和调用逻辑,调用逻辑单独维护,这也增加了维护难度。。。。
8:56 AM 4/27/2010
粒度过细,只能看到砖,看不到房子。粒度过大,只能看到轮廓,也看不到房子。初学者往往为粒度问题犯难。在架
构设计的时候,要从大粒度分析,大到完成一项业务;系统建模的时候,要从小粒度分析,小到与计算机交互。参见
《OO系统分析员之路--用例分析系列(2)--用例的类型与粒度》
2:53 PM 4/7/2010
做一个功能,可以考虑:bat脚本和GUI
- 脚本实现简单,逻辑简单,但是交互麻烦,如果有些参数频繁改动,就要频繁改脚本
- GUI实现稍复杂,但是交互方便,很容易地改参数,甚至可以用列表来选择,状态提示等
8:59 AM 4/15/2010
设计基类的时候,需要考虑的一个问题是,如果流接口给子类重载,那么子类是否必须条用重写前的接口呢。
如果没有简单的规则,那么子类实现的时候可能会想着到底需不需要调用父类的老版本呢。
这会让子类很困惑,就会去看父类的代码,如果父类没有在头文件里面说明,还得去看实现。。。
virtual的通常习惯是重写。。。重写的意思就是替换老版本。。。
参见《A Critique of C++ and Programming and Language Trends of the 1990s》
5:39 PM 4/14/2010
怎样方便的进行运行时调试(或一些功能测试)是值得考虑的问题。
运用TCP连接外部调试器的一个好处是,可以同时控制服务器和客户端,而且不中断游戏的运行
9:58 AM 4/6/2010
改进
如果要能随时关闭AI,那么AI应该单独出一个继承体系出来。更进一步的,如果要简化JUMP目前的结构,那么
AI就应该放在服务器上。
这个故事告诉我们,需求产生设计。
另,继承不是毒药。。。