前段时间参加一个会议,有人提到"构件化"和SOA的区别,一时之间竟也没人说得清楚。朱三元老师概括了他自己想法说:构件是"从底下看的",构件与构件之间的关系应该是紧耦合的;服务(Services)是从系统的角度看的(我的理解:从外观上看的),服务之间的关系是松耦合。也有人说构件化和SOA是一样的。
我以为两者虽然有些相通的地方,但它们是不一样的。
它们相通的地方如,复用,两者均强调复用,降低软件系统实施成本;遵循软件设计最经典的思想"高内聚低耦合";实现技术和设计方法没有约束,如面向对象和结构化编程都不影响其作为Service或构件的"身份"。
他们不同的地方有哪些呢?
第一,从服务对象看,构件化源自软件产业本身的需要,服务于软件生产商,而SOA源自软件应用者的需求,如有一定信息化程度的企业团体,即是服务于企业的。
第二,从服务角度看,SOA针对的是业务架构,而构件化针对的是功能或技术架构。亦即,一个服务实现的一定是一个具体的业务目的,而一个构件实现的是一个功能(一个功能通常都没有明确的业务目的,如"报表功能"、"数据持久化")。当然,构件分"通用构件"和"领域构件",领域构件实现的就是某个应用领域里的通用的业务需求。但即使如此,这个被实现的业务需求也是尽量通用的,而不针对某个具体业务目的。
第三,存在形式和存在方式不一样。服务需要部署并且可以运行,并且符合某种Web Service标准,构件可能只是一个代码包。服务可以独立运行,构件不可以。构件如果不被使用则这些代码无法被运行。
第四,服务的应用与平台无关,构件的应用往往会受到特定技术参数的约束。服务不管是用什么语言开发的、发布在什么平台上,对使用者来说都是一样的;而构件对使用环境往往比较敏感。如:某某打印构件只能用在.net平台。
第五,他们的生命周期不同,服务可能随着企业业务的调整而卸载,而构件可以存在于多个软件系统中,只要这些软件系统仍然在使用,构件的生命周期就还没有结束。
最后,到目前为止,SOA的定义和实施均有相关的规范标准,而构件的定义、规范标准则相对模糊。按照最宽泛的对构件的理解,只要精神是复用的,就可以称之为"构件",甚至包括非代码的文档。