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