给公司员工上的培训1——微观规范

那天给公司的新员工进行了一次编程规范培训,我把这些规范分为:
1)微观上的规范。
2)宏观上的规范。
先说下微观上的规范。
第一,契约式编程。这是流程与流程,功能与功能之间的衔接点的规范。就像流水线两边的工人。如果下一流程的工人,不检查上一流程工人生产的零件就开始使用,那么就算是上级工人的零件有问题,他也要承担责任。如果他在使用前就检查出问题,那么上一流程的工人就要承担责任。所以,上一级工人在向下传递零件时,需要先检查一下。同理,如果程序员A的函数,在传的参数的时候,不做检查,传出了不正确的值,那么程序员A需要负责,但如果下一级程序员B不检查就使用,出现问题,是程序员B的责任。要求:函数在传入和传出参数时,都要做判断,把错误消灭在最小的范围内。

第二,断言。我们在发布程序代码之前,都要进行调试,调试的时候,可以进行断言。
例子(C#):System.Diagnostics.Debug.Assert ( KeyWord.Length >= 3 );
上面的例子中,如果出现KeyWord的长度小于3,就会弹出错误,并且问你进一步的操作。但是这段代码的Release中是不会执行的。这就有好处了,写再多这种代码都不会影响Release版本。
当然,我们还要加上一句:
if ( KeyWord.Length < 3 )
{
    
return null;
}
这是给Release版本用的。

以上两个是比较重要的,还有其它的规范。文档在卡上,想起来再写文章。

宏观上的规范,有三层,MVC,面向对象的几个基本原则。以后的文章会讲到。
最后还有测试,包括单元测试。
有空再写一篇面向对象分析技术。

posted on 2007-07-03 09:48 风焰庄主 阅读(2669) 评论(24)  编辑 收藏 网摘

评论

#1楼  2007-07-03 09:51 didasoft      

写得很不错啊,期待后续的文章。   回复  引用  查看    

#2楼  2007-07-03 10:00 OK_008      

为了速度,进度,很多细节的东西,我们往往都忽略,除非他经常发生,能引起我们的注意。

期待楼主的下文。   回复  引用  查看    

#3楼  2007-07-03 10:37 匿名 [未注册用户]

扯淡   回复  引用    

#4楼 [楼主] 2007-07-03 10:51 风焰庄主      

谢谢。   回复  引用  查看    

#5楼  2007-07-03 10:53 ╃小〥斌╄      

单体测试   回复  引用  查看    

#6楼  2007-07-03 11:32 Cure      

就这些内容觉得还谈不上规范,等着看接下来的内容。   回复  引用  查看    

#7楼  2007-07-03 12:42 晓木      

studying..   回复  引用  查看    

#8楼  2007-07-03 12:59 iCaca      

不错~   回复  引用  查看    

#9楼  2007-07-03 13:04 egg [未注册用户]

拉蛋   回复  引用    

#10楼  2007-07-03 14:09 nonocast      

太细了太表面
没有把问题说透,只是说了怎么做而不是为什么   回复  引用  查看    

#11楼  2007-07-03 14:16 ZergTant [未注册用户]

如果程序员A的函数,在传的参数的时候,不做检查,传出了不正确的值,那么程序员A需要负责,但如果下一级程序员B不检查就使用,出现问题,是程序员B的责任。

这样重复判断会不会影响执行效率呢?   回复  引用    

#12楼  2007-07-03 19:45 yi      

游戏规则当然是在本函数内做检查,检查的执行效率一般一情况下构成不了威胁   回复  引用  查看    

#13楼  2007-07-03 21:20 Anders Liu      

不错不错,期待后续!   回复  引用  查看    

#14楼  2007-07-03 21:24 by1455      

实在无法同意lz的这个规范,也许lz是在一个特定的环境下,制定这个规范。
但是就一般的情况,我有几点与lz探讨

1:从规范上,这个环境看不到团队工作(team work),只看到一堆疑心病很重的曹操们,没有什么团队信任和默契。管理者也没有什么权威。到处是质检,等于把测试码加在源码上,但问题是KEYWORD小于3可以,一些复杂的情况(case),简单的测试码根本不能穷尽。

2:我猜lz在日资企业吧,因为流水线编程在那里比较受欢迎,

3:程序员A的函数传出了不正确的值,当然要A负全责,只要规格书上写明,程序员B就没有责任。A应该检查,并在发现错误时,加以补救。否则到了B,可能已经太晚了。

4:如果真的要B自己检查,也应该调用公共的专用检查子程序,否则如有十个人需要这个参数,写十个检查源码,哪一天keyword变成了4,不就天下大乱了

5:有关第二(断言),有点奇怪,如果一个参数不对,而且又可以忽略,表示这个参数一定不重要,可省略。
  回复  引用  查看    

#15楼  2007-07-03 22:36 xlzhu      

支持楼上,契约式编程可不是双方都要做参数检查,A有遵守契约的责任   回复  引用  查看    

#16楼  2007-07-03 22:49 隴上煙雨劍      

多谢楼主分享,我感觉契约式编程还是相当不错的。
楼主下次把MVC讲讲吧,这方面我看了几个月了还是迷迷糊糊,因为网上的文章都是抄概念,看不到实际的代码。   回复  引用  查看    

#17楼  2007-07-04 09:55 Cure      

契约式编程该不是楼主所说的这些   回复  引用  查看    

#18楼 [楼主] 2007-07-04 12:46 风焰庄主      

谢谢大家了。看来有需要再说清楚一点。   回复  引用  查看    

#19楼 [楼主] 2007-07-04 12:49 风焰庄主      

有人说到,如果那个参数不对,又可以不要,那么这个参数一定不重要:
不是这样的。有些参数是很重要的,但传入的参数可能是乱来的,这个时候需要Debug出来,知道是上一个环节出了问题,或者是哪个地方出了问题。
至于Release中,就是把它给处理了,然后返回一个不正常的值,外部就可以知道错误了。
简单来说,断言是为了Debug时用的,Release时要处理掉的。   回复  引用  查看    

#20楼  2007-07-04 13:44 补丁      

所谓契约式,局限很大
两人之间的合作绝对不是流程式的
一个人写的一个方法,如果不需要持续的改进,那么这个人的水平真是高的无以复加
如此说来,下一个人竟然需要对上一个人的所有bug负责...且不说他的测试是否合理,他对方法需要了解到什么程度
仅工作量,都是非常庞大的   回复  引用  查看    

#21楼  2007-07-04 15:05 一醉解千愁      

传出的参数进行判断????

判断什么内容?如何知道参数的值何时为正确?何时为错误??

组件本身对其调用者是应该是密封、独立的。如果在调用者的代码中体现了组建参数的判断,则增加了两者的耦合性???   回复  引用  查看    

#22楼  2007-07-04 22:16 孤剑      

有点象防御式编程。   回复  引用  查看    

#23楼  2007-08-02 09:28 Clark Zheng      

函数在传入和传出参数时,都要做判断,把错误消灭在最小的范围内。

这样会不会影响程序的效率?   回复  引用  查看    

#24楼 [楼主] 2007-08-04 13:36 风焰庄主      

会少量影响,但这个判断只做一次,非常小的消耗。
这个东西主要是怕出现问题的时候,查起来你的时间消耗更多。   回复  引用  查看    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》



相关文章:

相关链接:
 
<2008年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

导航

统计

与我联系

搜索

 

常用链接

留言簿(3)

我参与的团队

我的标签

随笔档案

博客链接

最新评论

阅读排行榜

评论排行榜