CodeFirst Or ContractFirst

    经常用webservice做开发,已经对SEI、SIB、WSDL、SOAP、UUDI耳熟能详了,基础概念性的知识就不再介绍,利用这篇博客聊一聊CodeFirst还是ContractFirst。


    所谓的CodeFirst和ContractFirst意思就是代码优先和契约优先,这两者的区别是直接通过服务来实现自动化产生WSDL还是通过编写WSDL文档之后生成服务代码;用开发概念上来说这个事就是我们是先写SEI和SIB还是先写WSDL。


    很多人都在喋喋不休这件事,我对这个比较感兴趣,我个人感觉这不是简简单单的技术问题,而是涉及到技术、管理、思想的问题。


    CodeFirst是代码优先,是先写好了SEI和SIB,之后通过JAXWS\AXIS\CXF等发布服务形成WSDL,这样的话客户端就可以通过WSDL的服务描述选择相应的服务进行调用了。


    这样的编程方式是非常简单,令人欣然接受的,因为很多程序人员对写WSDL不感冒,但是对非XML的代码是非常好接受的;但是也带来了很多不足之处:


    首先,从编程的理论上说这样做打破了SOAP的语言无关性;


    其次,从实践的角度上说SEI、SIB写好,WSDL发布成功后,如果现在服务需要修改,那么WSDL就需要做相应的改变,这在软件开发过程中是非常要命的一件事情。WSDL发生变化就好比接口发生变化是一样的,接口的重要性是毋庸赘言的,在软件开发的概要设计阶段是需要把软件项目的接口确定下来,这个过程是非常重要而且是严谨的,接口规范定义好了,接下来才有良好的详细设计,也才会有所有开发人员的团结合作,所以如果在开发过程中结果在时长变化,那么我们团队开发会非常混乱,许多像接口调用、维护性的问题就会相继的出现。所以代码优先的不足之处就是WSDL会发生改变,它的改变会让很多方面跟着改变,也会发生一些难以解决的问题;


    还有,代码优先不是SOA的编程,而仅仅是针对一部分应用程序的,对大型的分布式应用可能就会略显单薄。换句话说代码优先就像是局部的服务,不是以服务为导向的,而是解决特定问题的一部分代码实现。


    当知道了代码优先的不足之后也就知道契约优先的好处了,我个人还是比较推崇契约优先的开发模式,但是契约优先也是有局限性的。


    因为当采用契约优先来做程序的时候,需要面对编程习惯的改变,这个是比较困难的,一如当初从面向过程到面向对象思维的转变;另外还需要面临着工期和预期目标的考验,因为通过一个服务契约来指导服务的开发工作是一件非常耗时耗力的过程,一如项目开发之前的分析建模。


    所以,也许项目选型的时候,需要场景;然而对于编程人员和设计人员,需要的是通盘皆吃。

你可能感兴趣的:(J2EE)