从来没有一项技术象构件这样和市场息息相关了,构件的特点竟然和市场是如此的interplay。慢慢说。
从构件“前世”——面向对象说起(其实构件和对象是两个如此不同的技术,而构件的提出如果不说比对象早(而Simula67比68年Dijkstra的结果化编成早,programming的发展真是螺旋又messy),也差不多:McIlroy,M.D.,1968. Mass-Produced Software Components提出软件IC。然后构件等了三十年:Cox, B.J.1990. Planning the Software Industrial Revolution. IEEE Software 7(6))。
面向对象,技术和市场是两张皮。决不是小看OO:单知道了类型、封装、类型继承和多态,你试试去写OO程序,笑死人了,看完(并且练习完)Refactoring, Refactoring to Patterns, Design Patterns才明白什么是OO,这两个圈意味着SRP,OCP,LSP,DIP和ISP等等principle,可不是那么容易做到。
但是不幸OO不是所向披靡的银弹,不足是先天的:implicit arch, implicit reuse contract, missing plugs(大牛Oscar Nierstrasz说的),第一个针对所有OO code,二针对OO的重用单元:OO Framework,三针对OO的分析和设计方法:一,oo code不反映run-time arch(原因恰恰就是力量的源泉:polymorhpism),难理解就难evolve;二,oo framework“罪恶”的白盒subclassing reuse和不明确的reuse contract;三,OOAD鼓励对领域对象进行细致深刻的建模,结果是大量领域、应用相关的interface——which are
not plug compatible。基本上OO的全部被攻击了。其实还有第四个:OO软件的质量靠啥?终于明白靠的是不断的refactoring和reengineering,和作文越改越好,面条炒三遍给肉都不换一个道理,而这些刚刚随着agile旋风被业界接受。
构件生而为卖(给内部或外部),为reuse,为提高抽象层次:构件提供的服务应该是难以自己实现,或者自己实现不经济的,构件不能是个Stack,构件至少是个计算器,spell check,是个嵌入式数据库更好。这样一来,一个石破天惊的implication:用构件不是此地new一个就完了,而是做好了等着被拿到好多地方(构件开发者想得到的和想不到的)去组合。要是没人要你,generalize的劲儿就都白费了。构件能否存活和dev app based on component息息相关。一个保守的方法就是“Extract Component”,类比于Refactoring中的Extract Method和Extract Class:发现一个function被用到第三次了,Extract it做成一个构件,自己用,也可以卖给同行业的。
构件依赖于市场。对象技术中没想着组合,没有独立部署,late composition,对象就是一锤子买卖,对象就是用来造monolithic巨兽应用的。
对象忽视了市场,所以“object market”从来就没出现过。
这是技术对市场的作用。
都说构件好,好在哪儿?好在组合。能组合才有市场,所以Oscar说改叫Composition-Based Software Development好了。但是要想能组合,先要解决一堆问题:
- 能组合的比不能组合的开发代价大。大在哪儿?确保Safety上。测试?组合爆炸:late composition是优点,但也就业味着没有final integration test,传统软件过程的集成测试为组合错误留有余地。这本质上是如何reuse的问题:intentional reuse还是accidental reuse。能做的也只能是选择合适的语言和工具保证modular checking:仅基于所依赖的构件和接口确保自己的safety。何谓safety,就是not do evil:构件自己挂了的时候别把整个系统拉下水。都是组合惹的祸。
- 维护组合起来的系统代价更大。构件独立evolve是优点,但是带来版本兼容问题;寻找和匹配构件呢?(垃圾分类都不容易)构件不是严丝合缝符合,需要优雅的退化时,多接口后面的state关联如何处理?(MSRA面/灭我的时候问的)Adaptor容易么?都不容易
这是市场对技术的反作用。
组合。构件技术研究的问题、难点、和市场的关系,全是围绕着组合。就算解决了Safety和构件系统能工作,还有两点难处,当然,也是组合引起的:
- 功能。各个构件组合起来的的功能 >= 所需要的功能么,不互相影响么?这个问题OMG都没搞定:它的object service mixing recommendation说能达到正交和互操作(orthogonality and interoperbility),立刻就有哥们叫板:Wallace, Wallnau. A situation evaluation of the OMG's OMA,OOPSLA'96
- 性能。这才是真正的formidable problem。各个构件有自己的资源需求和消耗约定,组合在一起,整个系统的资源够用不?你怎么知道?CPU,一二级存储,网络,etc
难哪。构件要是自己造,自己用(就是产品线了),好多问题都不存在了,构件也就不能“独立开发,第三方组合、部署了”。
构件市场也就不存在了。
分享到:
相关推荐
《软件复用与软件构件技术》 在信息技术领域,软件复用(Software Reuse)和软件构件技术(Software Component Technology)是两个至关重要的概念,它们极大地提升了软件开发的效率和质量,降低了成本,并推动了...
### 软件构件与中间件技术核心知识点详解 #### 一、软件构件与中间件基本概念 **软件构件**是指具有明确接口定义且能够独立完成特定功能的软件单元,它可以被视为软件工程中的“预制构件”,能够被重复使用于不同...
为了支持构件软件的测试,市场上有许多工具可供选择。这些工具可以帮助自动化测试流程、生成测试报告等。常用的工具包括但不限于: - **JUnit**:一种广泛使用的Java单元测试框架。 - **TestNG**:提供了比JUnit更...
#### 构件技术 **软件构件的概念** 软件构件是指可以被独立定义、实现、部署,并且能够通过标准接口与其他构件进行交互的基本软件单元。这些构件通常具有高度的内聚性和封装性,能够提供明确的外部接口以供其他...
### 软件复用和构件技术:提升开发效率与质量的关键 #### 一、软件复用概述 软件复用,作为现代软件工程的核心概念之一,旨在通过重复利用已有的软件资源来加速新软件系统的开发过程,从而显著提高开发效率,降低...
近年来,随着国家政策的支持与技术的进步,装配式建筑行业取得了显著的发展,其中预制混凝土构件(PC构件)作为装配式建筑的重要组成部分,其市场规模和技术应用也在不断扩张。 PC构件在住宅、公共建筑和基础设施...
构件技术发展综述构件技术发展综述
随着构件技术的不断进步和普及,它已经成为现代软件工程领域不可分割的一部分,并在很多成功的软件项目中得到了应用,例如企业级应用、嵌入式系统、云计算服务等。 大连海事大学的硕士学位论文《基于构件的软件复用...
《软件构件与中间件技术深度解析》 在信息化飞速发展的今天,软件构件与中间件技术作为支撑现代软件系统高效运行的重要基石,扮演着至关重要的角色。本篇将结合武汉理工大学“软件构件与中间件技术”课程的学习资料...