原文:http://www.aqee.net/2010/09/20/every-app-has-a-scary-basement/
一个设计人员对于一个成熟的产品要花很长时间才能意识到这个应用程序的用户界面的各个部分并不是一致的稳定可靠。在应用程序不断改进的数年中,会有一些极其重要但又异常脆弱的组件被开发出来,很多其它功能依赖它们。我把程序里这样的一个特征描述为恐怖地下室:黑暗,陈旧,神秘,性能不稳定但对整个程序操作至关重要的代码之躯就躺在里面。恐怖地下室难以清理,不好维护——有些东西只有团队中最资深的、最中坚的工程师才能处理的了,其他人唯恐避之不及。
当我作为Microsoft Money项目的主要设计师时,必然的就发现了它的恐怖地下室:用于查看和修改账户交易的复杂的支票登记控制模块。登记控制模块最初是在1990年由传奇的微软工程师Doug Klunder开发出来。为了在当时的PC机上获得最大的效能,我相信他或多或少的使登记系统直接的在磁盘上对交易数据进行了读写操作。在这种情况下,这个特殊的UI控制系统整个的、独自的承担起了对整个交易数据进行校验的任务;在这里你看不出有表示层,业务逻辑层和磁盘存储层之分。
这给我们的工作带来了各种各样奇怪的限制。例如,对于任何一个用来创建账户交易的会话,你都要在后台的某个地方实例化一个隐藏的登记控制器。当用户在对话框里输入数据时,会话程序必须小心的把数据拷贝给登记控制器,告诉它保存数据,然后推测保存操作何时能完成。
每一次新的版本,登记控制器就会挂上一些新的功能(投资,在线银行,本地化),每一次都会增加程序的复杂度。四年后当我加入这个团队时,这个登记控制器已经变得不可思议的错综复杂了,整个团队里只有一、两个人能够和愿意碰它。
Money register control, circa Money 95: Be afraid… be very afraid.
恐怖地下室有个突出的特征,任何其上的工作都会花费不可预料的时间周期;任何的bug修改或功能改进都会导致不可计算的成本代价。就拿Microsoft Money的登记控制器的例子来说,一个简单的改变交易数据列顺序的动作就可能需要一天,甚至数周的时间。你无法对这个事情进行预估。
当我第一次向人透露这个事实时,隔壁Microsoft Word项目组的的朋友向我分享了他们的应用程序里恐怖地下室的故事:一个叫FormatLine的程序的故事。在文档里给出一个点和一个列宽,FormatLine可以设计出这个点的下一行上的文字的布局。据我听到的,这个程序已经发展出来好几个功能点,每个功能上都有数千行的代码。被指定去深度了解FormatLine的开发人员抱着既尊敬又惶惶不安的心情,就像探险者深入危机重重的矿井进行勘探一样。
地下室的比喻并不只是用来描述人们对于一个程序蹑手蹑脚的胆怯特征——它同时也反映出这种情况的出现对于一个应用程序来说是与生俱来的。就像一个建筑物的地基,在没有付出重大的技术代价的情况下,你是不可能把这些代码替换成更加稳固的东西的。大多数情况下,恐怖地下室会被留下来自行其事,直到应用程序对于寄居的平台慢慢脱离关系,应用程序迁移到一个更新的、稳健的基础上。
为了防止你的UI的某个关键的稳固的部分逐渐演变成一个恐怖地下室,你需要在你开发的过程中重构你的代码,这会使得修改活动缓慢而不剧烈。在进行UI修改时,你需要评估一下这对程序基础部分的稳定的牵连有多深。
上周,一个在Cozi公司的开发人员来我这里给我出了一个难题。我最初的设计是对Cozi公司的这个家庭日历的UI做一项有趣的修改,这样能够帮助优化这些陈旧的界面,对用户数据以及广告效果都有好处。不幸的是,在经过了几周的工作后,开发人员发现要想让新的UI在这个可以无限滚动的日历页面上正确的现实是极度复杂的。这个无限滚动的特征本身十分精致,想要对其做任何修改都十分的复杂,因为它需要在各种浏览器里都能正确的工作。虽然我们可以花时间慢慢的使这项新特征稳定下来,达到可以接受的质量水平,但我们的日历UI很有可能变得更加脆弱——下一次我们增加新特征时将会面临新的压力,事情也许会在无法预知(和无法承受的开销)的情况下无法收拾。我们的日历UI将会变成一个恐怖地下室。
我们可不愿让这种事情发生。像Cozi这样专注于家用产品的公司,能够让他们的日历UI能得到持续的改进是至关重要的。为了给以后的产品改进提供一个安全的道路,我们最终认定目前不是做这种修改的好时机。也许等到有一天跨浏览器兼容不再是个头疼的问题(也许是某天我们放弃对IE7、IE8的兼容支持),我们再做行动。而目前,我们还是有个干净、光线较好的地下室的。
分享到:
相关推荐
《地下水新导则二维水动力弥散问题计算程序》是一个专为解决地下水领域的二维水动力弥散问题而设计的专业计算工具。在地下水科学与工程中,理解和模拟地下水的流动和溶质扩散是至关重要的,这涉及到水资源管理、环境...
《4重载下的多层地下室楼板型钢支撑加固技术研究与应用》是针对现代建筑领域中地下室结构安全和稳定性的一项重要技术探讨。在城市化进程加快、建筑物密度增大的背景下,地下室的设计和施工面临着越来越大的挑战,...
此外,地下水石油污染修复计算中的非水相流体(NAPL)运动数值模拟是一个复杂且重要的领域,本书对此也有特别介绍,希望对NAPL迁移数值模拟感兴趣的读者有所帮助。 总而言之,《地下水数值模拟:GMS应用基础与实例...
防空地下室结构检测指引是指在防空地下室建设过程中,确保工程质量和安全的一系列检测和验收标准。该指引涵盖了检测单位的条件、检测依据、检测项目及抽检频率、检测要求、检测报告要求等内容。 一、检测单位的条件...
标签为“其它”,因此可以判断这是一本专注于ABAQUS软件在隧道和地下工程领域应用的专业技术书籍。虽然提供的【部分内容】并非书籍中的正文,而是关于如何获取该电子书的购买信息,但我们可以忽略这部分内容,并从...
综上所述,地下室承台及底板的施工方案涉及到多个环节,包括土方工程、防水处理、结构加固等,每一步都需要严格遵循设计规范和技术交底要求,以保证工程质量和施工安全。在整个过程中,技术人员的角色尤为重要,他们...
【地下室漏水报警系统程序设计】是一个利用单片机技术实现的智能监测系统,旨在及时发现并报警地下室的漏水情况,防止因水分侵入引发的安全隐患。这个系统通过集成硬件和软件,可以有效地检测到地下室环境中的湿度...
具体到瑞园天成府1#楼人防地下室,其战时用途为二等人员掩蔽部,防护等级为核6级常6级,总面积2650平方米,设有多个出入口和通风系统,具备一定的防护和生存能力。 转换程序分为早期转换、临时转换和紧急转换三个...
“绿色先锋下载.url”可能是一个链接,用于访问更多的软件下载或更新信息;而“使用必读.url”则可能是软件的使用指南或者帮助文档的链接,用户在使用前应查阅以获取正确的操作方法和注意事项。
"Utility.zip_地震时深转换_时深_时深转换_时深转换程序_深时转换"这个压缩包显然包含了一个用于进行地震时深转换的程序,名为"Utility",可能是由专业软件开发者或地震科学家编写的。 地震时深转换的基本原理基于...
总结来说,ArcGIS在地下水等值线分析中提供了多种空间插值工具,每种方法都有其特点和适用场景。通过合理选择和运用这些工具,结合地下水位数据和地质特征,研究人员能够有效地揭示地下水位的空间分布规律,为地下水...
结构设计时,上部结构与防空地下室被视为一个整体,共同承受和协调变形。回填土对外部结构有侧向约束作用,地下室楼层侧移刚度较大。设计分析模型分为两种情况:一是分离模型,适用于条件允许的情况,将上部结构和...
在建筑施工领域,地下室混凝土结构裂缝的产生是一个常见且复杂的问题,它不仅影响建筑的美观和使用寿命,还可能导致严重的安全隐患。浙江培华建设有限公司龙游县子鸣社区安居工程(一期)Ⅱ标QC小组针对这一问题,...
《新疆维吾尔自治区城市防空地下室易地建设收费办法》是一项根据《中华人民共和国人民防空法》和《新疆维吾尔自治区实施人民防空法>办法》制定的地方性法规,旨在确保城市基本防空能力和人防建设与城市建设同步发展...
这一过程在众多领域都得到了广泛应用。对于地下管线数据而言,数据挖掘可以帮助决策者更好地了解管线信息,为城市规划和安全建设提供决策支持。 地下管线数据包括了众多属性信息,如管线的平面位置、高程、埋深、...
本文针对城市地下管线数据处理问题,提出了一个基于Windows标准应用程序模式的信息化数据处理系统的设计与实现方案。以下详细说明该系统设计与实现的知识点。 1. 传统地下管线数据处理模式的局限性 在传统的地下...
每个阶段都有明确的时间线和任务,如物品搬出、封堵构件加工、电线电缆的密闭处理、出入口封堵、防护单元隔墙构筑、战时设备安装等。 五、防护功能转换及顺序列出了具体的转换部位,如对外出入口的防护密闭门堆砂包...
地下室丙纶卷材防水施工组织设计是一份详细的施工方案,旨在规范和指导防水工程的实施过程。丙纶卷材作为一种常用的防水材料,适用于地下室等地下空间的防水处理,能有效防止水分渗透,确保建筑物的结构稳定。 一、...
文档中的内容主要涉及青岛市防空地下室的人防标牌规范,包括标志牌、指示牌、标识牌以及辅助标牌的设计、制作和悬挂要求。以下是对这些知识点的详细解释: 1. 防空地下室标志牌: - 悬挂数量:每个室内外出入口需...
地下室狭小空隙通风系统是针对地下室或爬行空间湿度问题的一种有效解决方案,它通过合理的空气流通来降低水分含量,防止霉菌滋生,并有助于优化室内温度调节,从而节省取暖和冷却成本。本系统的核心是利用Arduino ...