公司项目原先用的是structs1.4,并且是一个维护了将近十年的老项目,现在要改成ssh框架的,JDK和相应的框架都升级到主流的版本,请问在项目的重构和设计中有什么要注意的,另外怎么发挥出新框架的优势?
有点像毛虫变蝴蝶,成蛹后要几乎化成一泡脓水再重塑啊。
改造应该分阶段吧,原项目只有struts么?备份原项目什么的就不说了。
第一阶段,上spring,和hibernate,原jdbc部分读源码,抽象持久化对象,数据迁移。确保原项目正常运行。
第二阶段,上struts2或network2,这一部分,后台应该比第一阶段轻松,因为很多action的代码可以直接copy外加小改造。前台改造,部分在前台的不合理位置源码可以向后台转移。最终也是确保项目能正常运行。
第三阶段,优化,改spring,hibernate等配置,上新需求,部分链接可以改造,旧的ajax等都改造成新的。楼主所说的使用新技术,什么的都在这里做,第一部分的spring只用来做框架,集成hibernate和struts用,现在这里可以注入自己定义的东西,原本没有分层的service层也可以在这个部分改造。
最终新老项目都可以运行(不同数据库)。
就你目前的情况来看,不能算是重构,而是重写了。因为就你描述而言,已经是伤筋动骨了。
重构的过程中建议一定要读透原来的代码,然后感觉它那些地方是非让你改不可的,然后用最新的框架和技术把它改到你满意位置。
通常新的框架都有自己的最佳实践,也就是它自己的组织规范,遵照它的规范去组织代码一般就没有问题。
这个项目升级的技术选型是基于什么考虑的呢?是人员知识结构还是新功能升级?对于升级到JDK和struts,我个人觉得可以理解。就系统升级这个问题而言,我建议先在原项目中1,如果已经有Model层,则在Model类中引入JPA的Annotation(注解);如果没有,则先抽取出Model层,然后分离逻辑代码和JDBC代码,在添加Annotation。然后使用JPA的API替换JDBC操作,注意查询语句的处理。
2,引入Spring Core,仅引入数据库连接池和扫描JPA的Annotation。
完成1,2后,进行完整的功能测试。
3,如果时间允许,可以引入Spring MVC。
4,如果原系统有缓存,那么根据缓存中间件与Spring的集成,调整配置和使用。
题外话:如果仅仅是因为新员工不会Servlet+JDBC,那么可以考虑新增功能独立到新的WEB应用,采用URL跳转集成整个系统;如果仅仅是为了维护,那么我个人认为不值得进行这样的投入,是该推出下一代系统的时候了,一个运行了10多年的系统,需要考虑一下升级换代了。