虽然网上大量有人在宣传从Spring+Struts平台迁移到Grails平台的平缓事实上也是如此但资深的Spring+Struts平台开发人员迁移到Grails平台仍然需要有一些转变其中大部分都是开发思想或者开发思路的转变
第一 开发方式的转变
Spring+Struts平台的开发是平缓的不管是CRUD还是复杂的业务Spring+Struts平台都要一视同仁一步步来对于CRUD它的简单只是在业务层其他的数据层表现层Action页面和它们之间的配置一个都不能少该做的都要做到而复杂的业务和简单的CRUD的不同仅仅表现在业务层多做的事情也大部分在业务层
而Grails平台的开发则是曲线式的先快后缓对于CRUD式的业务在Grails平台只要一两个动作就完成了全部的功能当然我们必须对页面做一定的修改以达到客户的要求当CRUD业务完成以后我们再在它们的基础上添加复杂的业务
往往从Spring+Struts平台转移过来的开发人员会喜欢契约式的开发而讨厌Spring+Struts的配置式的开发对于Grails平台对CRUD开发的简化反而比较忽视因为对于一个大型项目来说CRUD所占的比例不大而且很多开发人员也不认为Grails平台的脚手架产生的代码对他们有多少帮助因为页面需要定制
其实从我的经验来说对于一个大型项目CRUD所占的比重大约为五分之一到四分之一的样子而在小项目中CRUD所占的比重会更大一些因此虽然一个大项目开发完成以后我们不记得我们曾做过CRUD的开发但不可否认的是CRUD的开发在Spring+Struts平台的确占了我们一部分的开发时间Grails平台对这部分时间的节省对我们来说也是值得庆贺的
所以在Grails开发平台当然拿到一个模块的时候我们第一步要做的不是按照业务的要求按部就班的进行开发而是首先要把其中的CRUD部分抽取出来交给Grails平台来帮我们实现然后我们在它的基础上去做更为复杂的业务这就要求我们在设计SD文档和demo的时候要尽量将业务中的CRUD抽取出来集中而不是分散这样有利于Grails平台来帮我们实现CRUD的功能
第二 有关契约
契约式编程相比较于配置式编程在效率上的确高了很多但需要注意的是我感觉对于大型项目来说在编码的同时维护一下controlleraction服务层和页面的关系仍然是有很大的必要的但这种维护是文档式的维护不会干扰到程序和测试服务器的运行一旦有了这个文档在项目的维护过程中的作用是显而易见的当然了这种维护要我们更为细心不要出错因为如果在Spring+Struts平台配置文件出错的话测试服务器运行时会出问题的这也是Spring+Struts平台配置讨厌的一个原因一个人维护出错down过他的代码的人的测试服务器都跑不起来但文档维护显然没有这样的纠错机制它的正确性需要的是维护人员的细心
就我的经验而言使用契约的地方越多就越需要文档维护文档虽然会降低你的开发速度但在项目的维护过程中对你的维护效率的提高又是不言而喻的特别是开发人员和维护人员不是同一个人的时候
第三 有关页面开发
传统的Spring+Struts平台的开发我们直接把demo的页面拿来转化成jsp文件再在相应的位置填充所需要的变量然后跟后台交互
而Grails平台的开发我们是先开发CRUD业务即由平台帮我们生成gsp文件然后再根据demo的页面要求修改它的Layout和填充必要的样式
然后再由CRUD业务的页面铺展开来继续完成其他的较为复杂的业务复杂业务的gsp文件可以由demo的页面直接转化过来