RSS 2.0 Feed
2004-08 Entries
摘要:最近在清理本组的代码,主要任务是合并重复代码,改善系统结构,因为系统历史很长,参与过的开发人员很多,里面的冗余代码非常多,清理起来真的是非常辛苦的事情:< 相信每个工作有一定年头的程序员都有一个自己的代码库,需要的时候要么copy,要么include,不管是自己写的还是抄的别人的,反正是顺手拈来,这也算是大家技术积累的一个方面。对于一个公司,特别是作产品的公司,我觉得代码的重用,组件的编写也是一件很有意义的事情。 现在抛开LOC那些术语,抛开什么软件工程XP,也不谈设计模式重构,谈谈我自己的想法: 1.重用是不是越多越好?什么时候要考虑重用? 我觉得不是的,可重用组件的编写要比一般的代码付出更多的精力,要适应更多的情况,要经过更多的测试,要有更加齐全的文档,所以说重用要适度,否则你的项目可能大大超出预算。一般的原则是:第一次使用直接写,当你写到第3次的时候,你就要考虑是否重用了,当然,很多组件,比如访问数据库的代理层,那是可以预见到需要重用的。 2.“改他人的代码不如自己重新编写”是重用的大忌么? http://www2.ccw.com.cn/02/0244/b/0244b01_3.asp?看了一篇文章,里面是这种观点,但是觉得板子不能全部打在程序员头上,假如一个组件是测试严格,文档齐全的,在项目的压力下,有谁会愿意去自己再写一个啊!应该说 文档不全,每次出了问题总要trace into进去的重用代码,才是重用的大忌。 3. 一个项目组是否应该由专人编写重用代码? 个人觉得,与其讨论是否有专人编写重用代码,不如讨论是否应该由专人测试和管理重用代码及其文档,正如上面一条所说,重用组件的文档化和正确性是至关重要的,重用组件的每一次变化,都要经过严格的测试然后checkin,假如接口有变化,必须由专人负责通知或者修改相关代码。这里建立一个良好的配置管理是非常重要的,否则你就跌入到一个比dll hell更加深的地方去了:> 4. 重用或者组件是否是解决软件问题的灵丹妙药? 前段时间常常看到文章,大概就是以下的论点:由行业专家开发重用的组件,然后给各个公司使用;一个公司里面高级程序员开发组件,低级程序员搭建积木。极力的鼓吹组件编程,勾画出一幅美好前景。我曾经也迷信这个,但是现在觉得:无论是com/corba还是DotNet/Java中的解决方案,组件解决的是二进制代码重用兼容性的的问题,而不是软件开发的问题本身。 不要以为使用了组件,重用了代码就可以摆脱小作坊的生产方式,进入软件开发的大同时代。软件的复杂性在于其模拟的现实世界的本身,组件和重用永远只能解决一部分的问题。重点还是必须放在规范管理,重视需求方面。 大家看看目前重用的比较好的部分: 1.操作系统的内核对象,GUI对象 2.数学运算,加密算法 当然其他的还有一些,这些要么属于小粒度的重用(比如一个按钮的对象),要么具有严格的规范和定义(比如数学运算和加密算法,一些协议的库),进入行业领域以后,需求千变万化,重用的粒度越大,适用的范围越狭窄。写出一个适用于行业的framework,要么适用范围太小,自己公司能用就不错了,要么成本太高+使用复杂,别人买你的还不如自己定制开发。...[阅读全文]

posted @ | Feedback (12) | Filed Under [ 信手涂鸦 ]

摘要:上集和相关内容请见:http://blog.joycode.com/peon/articles/16504.aspx 接下来发生了一些事情,张翠山夫妇双双自尽,他们的儿子张无忌又被打伤,张三丰和武当诸侠都忙于给张无忌疗伤,无暇顾及各自弟子的武学,而且为了诸侠和张老道的安全,给他们的问题不再直接交到他们手里,每人选了一个得意的弟子,代替自己解答问题,这些弟子的记忆力和反应都不错,可以解答大部分的问题,假如遇到不会的问题,就先向师父请教,然后回答给提问题的弟子,这样不仅大大减轻了诸侠的负担,而且防止了一些危险,比如在在便条上下毒,保护了诸侠的安全(徒弟的命就不值钱了?)。 在这种关系里,武当诸侠和他们的代理弟子构成了反向代理(Reverse Proxy)的关系,反向代理一般作用有三:减轻源服务器负载,保障源服务器安全,对源服务器进行负载均衡(Load Balance)。 一般反向代理置于源服务器的前端,配备大容量的内存和高速磁盘,缓存客户的请求,所以反向代理又称为服务器加速(Server accelerate)。源服务器一般不再和客户直接通讯,当客户请求没有缓存的内容或者动态内容时,反向代理向源服务器发送请求,然后把回应转发给客户,在这种情况下,反向代理服务器通常要为一个请求同时维护两个会话。和普通的代理不同,反向代理一般只代理一台或者有限的几台服务器,对于客户而言,反向代理服务器对于他们就相当于源服务器,对于源服务器而言,反向代理服务器通常就是唯一的客户,因为一般客户不和源服务器直接通信。典型情况下,源服务器对于客户或者客户对于源服务器,都是不可见的。 过了一段时间,张三丰觉得无法根治张无忌的体内的玄冥寒气,决定带他下山到少林寺去碰碰运气,为了让请教张三丰的弟子不至于得不到解答,宋远桥和俞莲舟暂时代替张三丰答题,凡是有请教张三丰的问题,宋青书就轮流送到宋远桥或者俞莲舟的住所。 张老道不在山上,可是他负责的服务不会中断,这种情况可以称为离线缓存(Offline Caching),宋青书的所作的相当于把一个域名交替解析到两个或者以上的地址上去,这个就是DNS轮询。 张三丰所学太过渊博,单凭宋或者俞任何一人都难以回答所有的问题,两个人的知识加起来才可以勉强做到,但是宋青书却有时候把宋远桥不会的问题送到宋远桥那里,俞莲舟也常常遇到这种尴尬(说明宋青书到底还是少了根筋)。这两位到底是高人,一合计,决定视情况采取以下三种办法之一:1.假如宋远桥收到自己不会的,就写回复说自己很忙,而且这个问题俞莲舟很有研究,叫弟子另外写纸条问俞莲舟,俞也是如此这般。2.宋远桥把纸条给俞莲舟解答,然后自己把解答给弟子。3.宋远桥把纸条给俞莲舟解答,俞把解答给弟子。 第一种方法称为内容转向(URL Redirection),就是当服务器发送给客户端一个特殊回应和新的URL,表示客户应该在其他的地方取得内容,然后客户向新的URL提出请求以获取内容,很多的协议都支持,开发过web的人对redirection和302 code应该都很熟悉。 第二种方法中,问问题的弟子,宋远桥,俞莲舟,还有张三丰构成了多重代理关系,宋相当于俞的反向代理,俞又是张三丰的反向代理。这个过程,对客户是完全不可见的。 第三种方法称为三角传输,宋,俞,弟子的请求应答构成了一个三角形,这种方式中,客户向A服务器发起请求,A服务器把请求转发到B服务器,然后根据客户的控制由B服务器向客户发送内容。 这三种方式各有优缺点,内容转向比较灵活,但是需要应用协议的支持(目前HTTP,MMS,RTSP支持),而且转向次数一般有限制。多重代理构造复杂,而且因为代理需要维持双倍的会话,服务器负担很重。三角传输适合于请求流量小而回应内容流量多(比如流媒体)的情况,但是需要特殊网络设备(radware wsd)的支持,某些情况下,三角传输的前端还易于成为瓶颈。...[阅读全文]

posted @ | Feedback (26) | Filed Under [ MediaTechnology 多维技术 ]