<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
几年前, 我作为一个顾问, 着手处理一个已经快要失败的项目了。顾客和开发商签订的合约是在一年之内开发完那个项目。 当我被叫过去的时候, 时间已经过去一年了。 显而易见, 这个项目失败了。
主要问题出在开发商的设计和技术方面(我们暂时先不管Weinberg准则。“No matter what they tell you, it's always a people problem”)。开发商认为可以借此机会开发一个可以通用的软件系统, 而且他们认为可以在顾客的预算之内开发完这个系统。
这些想法就导致了经典的“框架迷恋症”。开发商不再试着去解决顾客的问题,而是试着去解决所有他们认为是问题的问题。因此, 单独就那个原因而言,就可能比预期花费10倍甚至更多的时间和金钱
当然, 我们不可能总是避免人的问题。而且他们设计的体系架构本来就有很多重大的缺陷。其中一个缺陷是因为对需求的误解和假设, 并且将对象实体和Windows消息混杂在一起了。这些问题的出现是因为有一个技术主管, 他是这个系统的架构师。 他强迫人们认可他的设计, 并且吵了那些有异议的人员的鱿鱼。因此, 他对这个项目的误解就和他对这个项目理解的一样多, 也就是说, 他什么也不理解。
一般来说,“框架迷恋症”只是其中一种方式, 也可能是最高效的方式, 使企图重用的代码失效。
我认为当有些人决定我们应该重用某些代码的时候, 然而实际上火候还没有到。这种企图就可能导致重用代码的意图失去意义了。也就是说,我们的开发不是按照需求驱动了,而是由开发者的意图驱动了。我个人问题当我们第二次意识到需要重用某些代码的时候, 可能才是真正需要重用的时候。通常总是那些我无法预料到的情况, 至少是它没有发生在我认为应该发生的时候。
另外一个著名的代码重用失败的例子, 对整个工业界都是如此, 而且难以置信的昂贵就是EJB1和EJB2(EJB3好像就完全不同了)。EJB1/2是被设计用来处理一个想像中的开发过程, 但是看起来似乎从来没有在EJB1/2的生命周期内发生过。因此开发人员一直没有从使用这个框架中受益,反而一直出在和它的斗争之中。而且我也听到过很多企业将EJB踢出他们系统中的例子。普遍都说, 代价太大了。
我认为一些库也有可能陷入这种境地。当想着如何做才能使一个库被尽可能多的重用而不是如何去重用一个库的时候, 可能问题就来了。Python中的大多数库,在我看来, 在实际应用已经相当成功,而且很稳定。一个例外就是xmllib库,我认为太缺少Python的风格了。Python2.5中似乎已经解决这个问题了。
分享到:
相关推荐
REUSE_ALV_GRID_DISPLAY超详细讲解 REUSE_ALV_GRID_DISPLAY是一个功能强大的ABAP函数模块,主要用于在ABAP程序中显示ALV网格控件。该函数模块提供了大量的参数和事件,使得开发者可以根据需要自定义ALV网格控件的...
React-Reuse库提供了一种机制,允许开发者高效地复用现有的React组件来构建新的、定制化的组件,从而提高开发效率,保持代码整洁,并降低维护成本。下面将详细探讨React-Reuse的工作原理、优势以及如何在实际项目中...
go_reuseport, 将SO_REUSEPORT带到你 GO_REUSEPORT GO_REUSEPORT 是一个小 expirement,用于创建支持 SO_REUSEPORT 套接字选项的net.Listener 。目前,Darwin和 Linux ( 从 3.9 ) 系统
《Reuse Methodology Manual》是一本专注于集成电路设计中可重用性 RTL(Register Transfer Level)设计的指南书籍。RTL设计是一种在数字电路设计中的抽象层次,用于描述硬件的行为和结构,通常用来在设计硬件时进行...
在 SAP 开发环境中,"REUSE_ALV_FIELDCATALOG_MERGE" 是一个非常重要的函数,用于合并和创建用于 ALV (ABAP List Viewer) 输出的字段目录。然而,在使用这个函数时,可能存在一些陷阱和注意事项,导致程序出错或者...
在处理大量数据时,为了提高性能和节省内存,UITableView利用了`reuse`机制,这就是“UITableViewCell的reuse”所涉及的核心知识点。本文将深入探讨这个机制的原理、实现方式以及如何有效地利用它。 首先,理解`...
标题“CAM_Reuse_Library_Samples”表明这是一个关于计算机辅助制造(CAM)重用库样本的资源集合。在工业设计和制造领域,CAM系统用于将3D模型转换为机器代码,指导数控机床进行精确的切削加工。这个库可能包含了...
Reuse.Methodology.Manual.3rd.Edition part1
在这一背景下,软频率复用(Soft Frequency Reuse, SFR)作为一种关键的技术手段,被广泛研究和讨论。本文将详细介绍软频率复用方案及其在UTRAN LTE中的应用,并分析其带来的好处。 #### 频率复用因子分析 在多...
PCB reuse
Allegro 模块复用 REUSE Allegro 模块复用是一种高效的 PCB 设计技巧,对于电路中有多路相同或相似性很高的电路,在 PCB 设计中只要布好一路,设置为模块,就可以应用于其他多路,大幅减少重复不必要的工作。 模块...
When can we safely reuse systems, upgrade systems, or use COTS components? When Can We Safely Reuse Systems, Upgrade Systems, or Use COTS Components? A. Wayne Wymore and A. Terry Bahill Systems and...
In this work we present a novel tightly-coupled Visual-Inertial Simultaneous Localization and Mapping system that is able to close loops and reuse its map to achieve zero-drift localization in ...
在AIX操作系统中,用户可能会遇到“3004-314 Password was recently used and is not valid for reuse”这一错误提示。该错误通常发生在用户试图更改密码时,如果所输入的新密码在过去一段时间内曾经被使用过,则...
《复用方法手册 第三版》是一本深入探讨软件复用技术的重要著作,旨在提高软件开发效率、降低维护成本,并促进代码质量的提升。在软件工程领域,复用是核心概念之一,它涉及到模块化、组件化、设计模式、框架等多...
这是Mathy Vanhoef关于破解wifi加密协议WPA/WPA2使用的密钥重安装攻击方法的论文Key Reinstallation Atacks Forcing Nonce Reuse in WPA2的翻译
《Digital Approaches to Text Reuse in the Early Chinese Corpus》一文由Donald Sturgeon撰写,旨在探讨利用数字化技术来识别早期中国文献中不同文本之间的相似性。文章通过对古典文献《墨子》的具体分析,展示了...