美文网首页
鲜驰达项目之项目模块化

鲜驰达项目之项目模块化

作者: 撸二行代码 | 来源:发表于2016-01-22 23:35 被阅读0次

  鲜驰达项目的项目框架是基于HCare项目和Yamar项目的一个组合。并且将至优点完全吸收。当我们知道我们的客户在我们研发人员认为的模块,切分成系统的时候,我们的第一想法是无法理解。因为对于我们研发人员来说,不管什么项目,它都是完整的。为什么要将其分开。太没法理解了。其实在背后我们研发人员没有少骂过客户“二货”。但是最后我们也变成“二货”,因为我们要尊重需求。

不知从何时起,我们天天想着我们要做一个项目基盘。然后所有我们开发的项目都基于这个基盘。我们不在想浪费那么多的时间进行各种代码的拷贝。就像为荣哥对我们说的,马波童鞋做了多少框架,PGTool,HCare,Yamar等,都是马波童鞋带领我们做的一套套框架,然后每一个项目从这个项目中拷贝一点,从那个项目中拷贝一点。我们已经无法忍受这点了。让这些拷贝“去死”吧。

当我们开始搭建鲜驰达项目的时候,和小胖童鞋商量我们开始做基盘吧。让我们走出这一步。然后其他人享受我们这一成果吧。偷偷摸摸的让我嘚瑟一下吧。

让我们看看鲜驰达第一版本的演变史吧。

第一版本Project

这个是鲜驰达项目第一版本的框架,所有的Project都是独立Maven Project项目,然后项目之间使用Maven引用。对于这种组合,做过HCare,Yamar的童鞋们,太熟悉了,因为那些项目都是这么做。除了UI使用不同的技术以外,基本上就是吸收各种代码。

EntityProject是数据Table对应的Java。

CoreProject是Util类和业务共通代码

WebProject就是一个再正常不过的一个Web工程。里面包含每一个模块的Controller,Logic,JavaBean和Sql Mapper等和业务相关的代码。

BatchProject就是一个Batch Project。

对于以上这个版本的框架结构你问我有什么缺点我真的说不出来。因为共通代码我也有一个Project进行管理。共通代码我也有可以提供给Batch Project使用。如果你非要说出一个缺点,那么就是因为Core里面包含很多Jar包在Batch里面不需要引用。因为Core Project里面有很多Base类,比如BaseController,BaseTag等类,需要引用servlet Jar,而Batch里面不需要。这时候会有“操蛋”的问,为什么不把这些放到Web Project里面,不是我们不想放,而是在做第一个版本的时候,我们已经开始准备做基盘了。让我们纠结吧。

当我们发现我们的Common Business越来越多的时候,我们Common Business Class也紧随其后的多起来,“NO”,我们不想我的基盘里面关于业务代码那么多,放过Core吧。让重构来拯救你吧。基于第一版本的框架我们进行了第一次重构。

第二版本Project

对于于这个重构,我们能做的就是将CommonBusiness重构到一个新的Project中去。让我们的Core Project减肥。对于这次重构,有点让我哭笑不得,因为我只是用IDEA Create Prject,然后将代码“拖到”Common Business Project中,然后IDEA将所有引用的地方Import自动切换成新的Package。没了。“NO!NO!NO!”,我理解的重构不是这样的。这就是第一次哭笑不得的重构。没有任何大的变更。来吧。等着第二次重构吧。

是什么原因让我们又进行了一次大重构,已经记不得了。但是按照马波童鞋的想法,我们要在后面慢慢的将现在的代码迁移到新的Project中去。新的Project,哈哈哈,是的,新的Project,推翻之前的架构。这需要多大的勇气啊!但是我们做了。旧的,我们还在用,因为,我们整体代码还没有迁移完成。但是我们可以一个个模块的迁移,因为,这次我们的项目架构,做到了可插入方式。用一个模块插入一个模块。炫耀时间开始了。

看看我们的Project和Module吧。

最新Project

猜猜他们的依赖关系吧。如果是小胖,一定会说“猜你妹啊”,快说。

Project关系图

Project说明

EntityPrject:同第一版本一样,只是数据库Table对应的JavaBean

Core Project:这次是真正的很干净的Core。只是包含的我们自定义的注解。Base类。常量定义,DataSource,异常定义和一些Util类。这些类以后再任何项目中都可以使用。这个Core,我个人的想法是以后参考Spring Core的原则,重构这块,但是对应我们想的第一版本,这个已经足够了,并且代码是在慢慢重构中成长的。

Core WebProject:这个是一个对应Web开发的一个Core Project,所有的Web Project需要引用,这样可以把Core切分的很清楚,一种是常态的Core。一种是针对Web开发的Core。

CommonBusiness Project:对于第二版本没有发生任何变化,他的主要业务是共通业务,不牵扯任何其他东西,只有Logic,和Sql Mapper,JavaBean这些很正常的类

BatchProject:也是第一版本遗留下来的,没有任何变化,唯一变化的是引用的Project发生变化了,它只需要引用Common Business Project。再也不会再我们的BatchProject里面出现Servlet Jar或者Spring MVC Jar了。减轻了Batch Project中Jar包过多,并且很多都是没用的情况了。

BusinessModule Project:这是一个很重要的Project,他是Servlet 3.0中Web-Fragment Project.结构已经和我们以前看的不在那么相同了。

Web Fragment Project

META-INF中将包含我们每一个模块的JSP和JS代码,也就是说他完全是独立的。META-INF其实对应的就是我们Web Project中的Webapp。

web-fragment.xml其实就是我们的web.xml文件。

Web-fragment.xml文件格式如下:

Web Fragment XML

spring-mvc-*.xml文件对应的就是我们的springxml文件。

看看我们如何使用这些module。

WebProject:其实就是一个对外的Web Project。然后通过pom.xml文件加载Module Project。其实正常情况下我们这个Project没有任何Java文件,只有一些XML文件,最多也只是有一些共同的JSP文件。

看看Web.xml里面我们如何处理。只需要以下几行代码

Web XML

classpath*:/spring/spring-mvc-.xml文件代表加载Jar中的Spring XML文件。

说到这里,我们最大的一次重构已经完成了。这次的完成,其实是一个很大的一个挑战。

将每一个模块独立出来,然后让每一个模块组合起来成为一个系统。其实在很多年前,我刚刚接触到开发的时候,已经听说过系统模块化,然后用可插入的方式组装成一个产品,但是因为个人能力有限,想不清楚实现方式,当是当我接触到Servlet 3.0的时候,查看他们提供的功能的时候,发现web-fragment的时候,我想,这个可能可以实现可插入方式,但是一直没有去使用它,因为可能还没有达到那个能力,当再次查看API和决定使用的时候,我想这次我们将完成这个可插入组装项目。

波波你还记得你当初和我说的,华为将代码封装起来给开发人员使用,然后使用这套的封装代码的人,在习惯这种方式的时候,他已经是一个螺丝钉了,他将很好的完成他的工作。并且公司可以节省很多时间,基盘现在可能还不能完成华为那么强大的代码库,但是当我们所有的项目,进行代码贡献的时候,我想我们也可以封装很多。

功能的模块化,其实不光光可以使用在产品上面,因为产品可能分各种不同的版本,然后用模块化进行组装。也可以使用到项目上面,进行功能组装和展现。

其实使用web-fragment的时候,还有很多考虑,在鲜驰达项目中,我将Spring MVC中的很多共通的出来放到Web Project项目中。比如Excelption,Web Project的根目录处理,Application监听器也是在Web.xml中处理的。

相关文章

网友评论

      本文标题:鲜驰达项目之项目模块化

      本文链接:https://www.haomeiwen.com/subject/zykrkttx.html