简露一手-Java-[核心、业务]代码[拆分、合并],简单实现项目安全,快速分析,少耦合,减少项目事故,降低新人研发安全和风险,提高编码加载速度,提升整体项目质量

复杂的故事简单说,复杂的问题简单做,您好,这里是简露一手,欢迎浏览。

简述


每次:项目发布版本,所有人忐忑不安,出过太多次事故,项目模块大,模块多,模块间紧密关联,哪都会出问题。

一旦:不熟悉项目或新人加入项目或直接是新招的实习生,对于一个还没有稳定的员工和一个不具备掌控整个代码风险把控的员工,是否应该把整个项目SVN发给他?给他,项目安全和风险太大;不给,招来干嘛?怎开发?。

就算:自己运行项目,修改代码时99%的代码与自己无关,下载慢,加载慢,查找慢,编译慢,慢慢慢慢慢。

最后:版本成了心头大患,代码没人敢改,伟大了一堆熬夜测试的人。

又发版本

分析


耦合性太强,牵一发而动全身。

  • 项目模块间关联紧密,修改一个模块影响整个项目。
  • 缺少核心模块和业务模块的区分。
  • 缺少对核心代码的剥离和保护措施

处理的方式很多,这里就推荐一种简单方式。将代码分成核心包和业务包,建立类库。

处理


从上面分析来看 关键点在于拆,其实隐藏的还有一个合。需产出一种效果:代码开发时只需要拆分出来的一小部分代码,而在应用调试和启动运行的则是一个所有代码编译后的合集。简单点就是一拆一合,分两个步骤:拆、合。

处理思维

拆是指把整个项目按照一定的思维逻辑进行核心和业务拆分。这个一定的思维逻辑是说符合项目本身架构核心和业务核心,我们这里先用包来称呼,后面好表述。最上层分为:核心包、业务包。核心包以外的部分作为业务包,核心包为一个或极少的几包;而业务包是无限扩展的很多个包,如:新增一个日志查询模块,则建立日志业务包。这个业务包和核心包中间的关系,重点:业务包依赖于核心包,而核心包不依赖于任何业务包。到这里都是一个概念的表述,实际以Eclipse为例操作分三个步骤来做:建子项目、迁移代码、解耦调整。

拆项目

为方便讲解,这里先创建了一个简单的项目:georgekaren,主要业务是客户端ClientSoap调用Server查询Adsl、Cdma、User三个业务的业务信息,项目模块:

项目模块

建子项目

项目framework、db、util和server包的server对象放到核心包,业务包根据功能和业务逻辑拆分后包括:client包、cron包、log包、server包[分成Adsl业务扩展包、Cdma业务扩展包、User业务扩展包]、webservice包。针对每一个包建立一个子项目[如果业务包有Web依赖,则创建Web项目],如下。

拆分业务包

这里不要嫌创建的项目多而觉得繁杂,创建项目时间比较短,合包后很方便。

迁移代码

项目建立好之后就开始将原始项目中的代码复制到新建的项目中去,迁移过去的代码或多或少会由于依赖关系会有编译报错,留给后面步骤去处理。

迁移代码

解耦调整

代码迁移完成后,需要做的就是修正编译错误。主要有两个手段,其一是给项目添加依赖引用,业务包除了对core的依赖尽量减少对其它包的依赖,可以适量修改代码来完成;其二是调整core对所有业务包的依赖,使核心包不依赖业务包,并且不影响Client调用Server的业务。

  • 项目添加引用,属性设置Java Build Path。
  • 调整core 的引用,采用loadClass方式来替代直接new 业务Server
    实际生产用的时候大部分使用的工厂,这里就不去创建一个工厂了,直接贴loadClass,表述的原理一样。

    Old


New

这样改造后core核心包的编译不依赖Server业务包,通常有数据库的情况下,将serverName和MethonName存到数据库表中,由程序根据type自动从数据库中查询,这样的处理有个词叫插件;当一个客户请求需要先查询Adsl业务再加上Cdma或先查询User再查询Adsl场景时只需要更改数据库配置的插件和插件的顺序,就可以组成不同的业务场景,这在流程配置上,尤其有效。

合是指把整个项目拆分后在单独开发或运行的时候怎么得到其它业务包的编译文件,这个是一个合的过程。这里介绍的处理方式是:类库,打包。


建类库
建类库是指建设一个存放公共jar或其它公共文件的地方,可以是个文件夹,可以是个项目,这里我们建立一个项目,并建立一个文件夹publib,将用于存放所有的包。

类库

打包
打包时将所有核心、业务包编译成class并打成jar包。这里使用Eclipse自带的ant自动打包。操作:

  • 业务包项目上右键--属性--Export(导出)--Ant


    导出

    生成ant的build.xml文件,修改build.xml的两处地方,1.第一行的default="build" 修改为 default="package";2.path 下面增加target来配置导出jar的路径。

配置Ant文件

按照此方式将所有的业务包项目都配置ant,配置完成后再Build.xml上右键Run执行,jar就自动导出到类库的publib下了。


导出jar

到这里类库就已经有了所有jar,所有的包全部合到了类库中。

效果

回头看下最初的问题:

  • 发版本问题,只需要关注有业务改动的jar,没有那么多动荡,回退也相当的方便,替换修改的jar就完成了回退。
  • 新人安全问题,如让新人修改adsl业务的一个需求,只给予Adsl项目权限和pub项目的权限就OK了,核心代码和其它模块都是安全的。
  • 代码多,加载慢问题,修改cdma则只下载cdma代码,业务包的代码量极少,慢问题迎刃而解。

总结

拆分是手段,类库打包是方法;原则是少代码,多包,非核心少依赖。做成功了可以任意配置需要使用的业务包,按照不同数量和不同的顺序串起来可以产生无限种业务功能。

<small>作为商业项目,完成后还需要一步,对核心代码或关键业务包进行保密处理,而简单又有效的方式就是混淆,如有意,请留言,根据情况找时间再补上混淆保密的文章</small>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,520评论 25 707
  • 有青衿寄蟹解馋偶感 秋暮稻香尤蟹肥,吾将老酒误琼妃。 半斤醉了痴情汉,一梦醒来大帝威。 慨叹人生争富贵,骚吟世事竞...
    东坡门生阅读 201评论 2 4
  • 诗的电影介绍所 今天要讲的故事发生在美国新泽西州的帕特森(Parteson)。那里有遍地浓郁茂盛的植物,一排排老旧...
    诗歌岛阅读 1,163评论 0 2
  • 经历了这么多起起落落,看过了这么多悲欢离合,以为自己已经变得足够坚强了。可没有料到,原来在内心的最深处仍然有那么...
    妍非妲己阅读 242评论 0 0