Hi, 如果有任何想法与我沟通, 请用: lifr_nj 在 msn.com

用好一个技术就要了解其缺点

上一篇 / 下一篇  2009-02-12 22:05:42 / 个人分类:dev


如果在你对问题的理解中,你想不出至少3样可能出错的东西,那么你并没有真正的理解这个问题。

                                                   ---摘自"你的灯亮着吗"


做的项目越多,越能体会到没有所谓好的技术坏的技术”,只有合适的技术不合适的技术”。


至少现在,在计算机界还没有通吃的技术.设计人员应该根据解决的问题的不同,选择不同的技术;在软件的不同的层次,选择不同的技术;根据对技术的掌握程度,选择不同的技术;

 

条条道路通罗马,用不同的技术或技术组合都可以实现某一个功能.最好的实现不是因为使用了最先进的技术”,也不是实现了“最复杂最全面的功能”,而是在功能和简单之间取得平衡的设计


所以我们要用好技术,那么一定要既看到其优点,又了解其缺点.下面是对我了解比较多,也比较认可的技术的一些分析。这些分析是不全面的,写此文最重要的目的是提醒自己,以后在选择某种技术的时候,一定要分析其优缺点。

 

 

优点

缺点

面向对象

抽象数据结构(Abstract Data Structure)提供了一种更贴合现实世界的思考方式。

每一个class有自己的名字空间,避免了面向过程程序的名字冲突。

并不是所有的问题都是适合面向对象的思考方法。比如一段文本处理过滤程序。

虽然继承也是面向对象技术里的标准功能,但继承带来的问题是信息被分离(分别在父类和子类中),程序更难理解和掌控。

接口

多态特性(动态绑定)提高了抽象的能力。提出了面向接口编程的概念。更好的隐藏了变化。

增加了接口类的定义。

面向接口的分析对分析人员的能力有更高的要求。设计不良的面向接口程序增加了系统的复杂性。

面向接口比面向对象适合更大型的程序,更重型。所以面向过程的系统和小型的面向对象的系统不应该使用。

增加抽象层

增加抽象层可以提高灵活性,兼容变化。所谓“任何问题都可以通过增加抽象层来解决。”

多了一层抽象层,系统的复杂性就增加了。“Unix编程环境“建议不要超过3层。

模块化

模块化的目标是只提供接口,而隐藏实现细节。

模块化通过分而治之而提高了软件处理复杂问题的能力

因为模块化隐藏了细节,外界没有机会了解其内部结构。所以对模块化的程序的健壮性,日志纪录有更高的要求。否则一旦模块内部出现问题,调用者就只能骂娘了。

命令行

相对于通过API调用其他模块的功能,通过命令行调用其他程序的功能实现了更高层次的隔离性。

命令行的控制参数的传递没有API的函数参数直接,而且调用效率会更低

管道

管道通过输入输出链接程序是一个伟大的发明。

1)使得程序的独立性更强,所以unix下面有很多实现单一任务的小程序。

2)信息传递的有效性。管道实际上是一种信息处理的模式。而事实证明,有相当多的问题都可以在这种模式下解决,特别是unix下的系统管理。

3)信息传递的简单性。一个输入一个输出,介质是没有格式的流。

管道能解决的问题具有明显的特征。所以,不能适用于管道的地方不能也用管道去解决。

管道之间传递控制参数比较困难。管道不是在同一个shell里运行,所以只能在管道之间共享只读参数。如果管道里面的程序修改了变量,下一个程序并不能看到。

 


相关阅读:

TAG: dev

 

评分:0

我来说两句

Open Toolbar