游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4850|回复: 4

编程原则

[复制链接]

31

主题

630

帖子

635

积分

高级会员

Rank: 4

积分
635
发表于 2006-2-25 16:19:00 | 显示全部楼层 |阅读模式
1、重用。代码的重用有助于提高代码质量。被调用的越多,代码的错误越容易暴露,代码的质量就越容易保证。重用便于集中优化性能。重用的代码是高质量的,高质量的代码应该重用。良好的重用可以显著降低维护工作量。

2、正交组合。各个模块之间没有功能的交叉和重叠。当一种需求改变的时候,只需要修改一个模块。将需求以互不相关的方式正交分解,并用对应的程序模块与之对应。每个模块单独对应需求的一个正交方向。彼此正交的各个模块应该组合使用。组合优于继承。可以灵活组合的一组模块易于扩展。

3、解藕。耦合就像goto一样,会增加系统的的复杂性。尽量不调用模块以外的代码,稳定的类库除外。只调用自身,和传入的参数,和生成的对象的方法。香蕉式的调用层次优于糖葫芦式的调用层次。香蕉式意味着由主模块访问各个彼此隔离的功能模块。在糖葫芦方式中,修改一个可能引发一连串的修改。AOP是一种解藕的方法。消息是一种消耗资源较大的方式。根据需求选择方法。一个类实现自身模块(包)内的接口,并不能消除别人对它的依赖。一个类实现其他模块的接口可以消除其他模块对它的依赖,但是引入了对其他模块的依赖。

4、简化。简单的代码一般可读性较高,易于维护。如果性能满足要求,就不必进行永无休止的代码优化。整个系统的设计也应当尽可能简化,避免不必要的功能和代码膨胀。需求分为三类:永远都必须满足的需求、可能被更改的需求、可能被追加的需求。除此以外不应当不应为系统盲目增加不必要的灵活性。还有,每个模块只作自己必须做的事情,才能使它的行为符合调用者的期望。用最简单的方法解决问题。

5、可测试。只有被测试过的功能,才是真正被正确实现的。保持软件处于可测试的状态,并且可以快速的反复进行测试,这就要求程序自动测试。这样又有了一个问题:测试代码出现错误怎么办?一方面可以通过故意制造Bug的方法来测试测试代码。另一方面,测试代码应尽可能采用成熟技术。自定义测试代码应尽可能简化。

6、早崩溃。当出现故障隐患的时候,程序应在第一时间报告。这样便于定位和排除故障。早崩溃是极端的说法,其实记录下来就可以,不一定非得崩溃。关键是越早定位,越准确。

7、禁止循环依赖。就像有时必须使用goto一样,在实际编程中想完全消除各个模块的耦合是比较困难的,特别是在MVC模式下,和一些对性能要求较高的场合。但是,应当尽量避免循环依赖。特别应当杜绝的是两个模块之间象穿鞋带一样的彼此反复调用。如果无法消除两个模块之间的彼此依赖的话,恐怕就应该考虑将它们合并为一个模块。在MVC模式中较易产生循环依赖。比较理想的处理方式是:M与V之间互相不调用,通过让一个较小的C来调用M和V来完成功能。

8、缓冲。通过使用缓冲,可以提高性能。无论软件、硬件都一样。许多人以为在DX和OpenGL之间作一个选择就能提高性能,但那并非很有效。层层缓冲是高性能的有力手段。缓冲有三个主要操作:访问、更新、失效。重要的是更新并不发生在失效的时候,而是发生在访问的时候。

在实际应用中必须进行权衡。

http://blog.tom.com/blog/blogview.php?BlogID=33294&BloggerID=528829在博客里写了篇文章。欢迎讨论。

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2006-2-26 02:54:00 | 显示全部楼层

Re:编程原则

大哥编辑下链接啊

103

主题

1432

帖子

1458

积分

金牌会员

Rank: 6Rank: 6

积分
1458
QQ
发表于 2006-2-27 14:33:00 | 显示全部楼层

Re:编程原则


语句和语句之间的耦合是最强的。函数能够扩展语句,而类能够扩展函数。

一个语句段实现某个功能,然后她是由几个独立的功能组成的,当外部调用这个语句段的时候,应该避免暴露其内部实现细节。解决耦合的关键,在与功能的清晰划分,而非是否被调用,调用了多少,引入了多少,因为这个是和实际问题有关的,虽然强调尽量较少引入,但他的原则在于是否恰当,而非多寡。当一个功能倍多处引用,那么当某一客户的需求发生变化,就应该考虑是否重写另一个功能,而非改动现有的功能,这就类似 dll 引用的问题,独立功能应该保持独立性,不应该因为客户的变更而随意变更。

功能的模块层次,深度需要认真考虑。灵活也是会带来复杂度的。

编程是流程和数据的组合,需要解决顺序,步骤的问题,同时也要对数据进行识别,分析和变换。数据是否合法,是否在制定的范围内是程序是否稳定的基础,当一个数据不在范围内,即使你的算法是正确的,他都不会出现正确的结果。同时编写算法的时候,也要考虑是否会溢出,因为数据并非是无限大的,尤其在计算机中,更是诸多限制。数据的操作可以是结构的变化,不同的结构会有不同的意义,操作还可以是数据的转化,转换有可能是可以逆转的,也可能是不可逆转的,要转化首先要识别数据,数据是数据类型中的某一个实例,算法就是将实例集合对应目标类型的实例集合的映射。当我们能够预知所有的映射都是合法的,那么该算法就是稳定的。程序的流程也是基于数据的基础上来运作的,但是为何流程的先后会对一个算法成生重大的影响?这说明流程也在影响数据的生成,先+后*和先*后+是不同的。在编程当中,往往多数情况下需要考虑的,是如何安排好顺序,而非考虑每一个独立算法的编写。让数据的变换能够按部就班的进行。尤其在多道流程的环境下,更是需要协调各流程对数据的操作。



31

主题

630

帖子

635

积分

高级会员

Rank: 4

积分
635
 楼主| 发表于 2006-2-27 15:23:00 | 显示全部楼层

Re: Re:编程原则

航天奇侠: Re:编程原则


语句和语句之间的耦合是最强的。函数能够扩展语句,而类能够扩展函数。

一个语句段实现某个功能,然后...

请多到我的博客上留言。非常感谢!  [em3]

8

主题

130

帖子

156

积分

注册会员

Rank: 2

积分
156
发表于 2006-3-18 02:48:00 | 显示全部楼层

Re:编程原则

没急细看,显然好文。

推荐技术人员都看看,越是偏向设计这块工作越要了解和深入把握,否则,害人害己。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-23 22:41

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表