这个方案并不是我在系统设计方面的最早一次尝试。但它在提高开发效率方面,是效果最为显著的一个方案。

简介

“六神”框架提供了一套简单而通用的、从Web层到数据库操作(增加单个数据、删除单个数据、修改单个数据、查询单个数据、查分页列表、查不分页列表,六个操作,因此名为“六神”)的基础组件。并且,它为复杂的数据库操作留下了扩展点。

在当时的技术背景下,这套框架使用Struts2.0+Spring+myBatis来实现。但是它的设计思路是可以适用于其它技术的。

在应用了这套框架之后,我们那个系统在一个月时间上线14个功能模块,效率提升了近三倍。

背景

当时我们接下的项目是一个近似于OA系统的稽核系统。这个系统的主要功能有两类:一是各种数据、信息的增删改查;一是各种审批流程。审批流程的设计按下不表,“六神”就是为增删改查功能而开发的。

思路

在完成了几个增删改查的页面功能之后,我发现它们非常相似。

功能上,它们都是打开页面时查询一个分页列表;然后新建一条数据;按id查询出一条数据,并展示在弹出窗口上;弹出窗口上可以修改某些字段的值;某些页面上还需要提供删除数据的功能;部分配置数据、基础数据需要提供查询不分页列表的功能。

流程上,则几乎都是页面提交一个http请求,Struts 2.0的action从中解析出参数;service层调用对应的mapper;myBatis生成并执行SQL,将操作结果返回给service;service直接将参数交还action;action将返回值转为json字符串写入http响应中。

而它们之间的差异性,基本是入参和出参的封装类型、以及数据库操作的SQL上。

流程图

上述六个操作,都可以用下面这张流程图来描述。而不同的操作、不同的业务需求之间,基本上只有object以及SQL有所不同。

类图

“六神”的主要类图中,以接口定义居多。其中的BasicDbAction和BasicDbMapper,是当时Struts2.0和MyBatis框架中的两个实现类。

Service层上分出来了六个接口。这是为了保持接口的隔离性。但是默认类实现了全部接口,只是所有方法都直接抛出异常。实际上就只是提供了一个Adapter而已。

Dao层同样有六个接口,但不提供默认实现。需要使用时针对myBatis或者Hibernate,分别写自己的实现类。

原先的类结构上,Controller层只有一个Struts 2.0的action;Dao层只有一个myBatis的Mapper。两个接口都是后来提取出来,计划扩展到SpringMVC和Hibernate的。

Strust2.0一般会为每个HttpRequest创建一个action实例,并将HttpRequest中的参数根据action的setters/getters方法封装到action中。这就需要action在实例化的时候,同时生成一个参数容器、即类图中param: I的一个实例。然而,根据泛型参数无法直接做实例化。因此,需要为action配置一个参数claz并在Spring IoC中将它注入为I的具体类型。这样才能保证action初始化的同时实例化参数param,并成功读取到HttpRequest中的请求。

MyBatis一般会使用Mapper的类名+执行方法名作为需要执行的SQL-id,并据此id从xml文件中找到、生成实际的SQL。但是,如果直接注入、使用框架提供的MyBatis默认实现类,那么每一个查询请求都会按照“xxx.BasicDbMapper.select”这个id去查找SQL,因而也无法找到正确的SQL。为了避免这个问题,Basid

DbMapper中使用了入参param的类名+执行方法名作为SQL-id。这样,对“xx.ParamA”的查询请求就会使用“xx.ParamA.select”这个id了。

另外,除了Controller之外,计划扩展到Jms Listener。不过异步消息只有增删改三个操作,就算“半神”吧。

代码

https://github.com/winters1224/blogs/tree/master/code/src/main/java/net/loyintean/blog/sixgod

小结

这个小框架功能非常简单,设计上也非常简单。因为它太简单,少有开发团队愿意在这上面耗费资源。但是,这个框架能够把简单、重复的工作抽取出来,让团队把资源投放在更加复杂的工作中去。

另一方面,随着REST、微服务等概念的深入,我认为,每个系统中的每项资源都应该提供CURD的基本API。这个小框架,能够方便快捷的提供对应的Web API,也能为微服务的快速落地提供方便。

本文转自 斯然在天边 51CTO博客,原文链接:http://blog.51cto.com/winters1224/1909839,如需转载请自行联系原作者

“六神”——技术提高开发效率的一个方案相关推荐

  1. 史上最牛逼的 Eclipse 快捷键,提高开发效率!

    写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字.我热爱技术.热爱开源.热爱编程.技术是开源的.知识是共享的. 这博客是对自己学习的一点点总结及记录,如果您对 Java.算法 感兴 ...

  2. 【效率】Launchy一个提高开发效率的小工具

    这是一款可以提高开发效率的简单软件,小巧便利,虽然她并不会帮助你提高你的开发能力,但是可以提高你的开发效率,如果你不信就去用用她. 通过这个不太好使,但是不得不去用他的网站百度,如果你有更好用的搜索引 ...

  3. 低代码开发如何提高开发效率和降低成本

    低代码星球 点击上方蓝字 · 关注我们 CLICK THE BLUE WORD TO FOLLOW US 识别二维码加入我们 加入低码星球微信群 与低码爱好者交流 低代码开发已经成为软件开发中一股不可 ...

  4. 如何通过组件化提高开发效率?

    在软件开发过程中,大到业务模块的划分,小到技术组件的开发,都属于组件化的思考范畴内.很多时候我们到网上搜索「组件化」关键词,都只会看到关于前端组件化的资料,而对于后台开发组件化的资料却很少,那这是不是 ...

  5. vscode php插件_JS之 提高开发效率的Visual Studio Code插件

    阅读本文约需要9分钟 大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了JS之 小技巧的知识,今天跟大家分享下JS之 提高开发效 ...

  6. 第三节:快速编译TypeScript,提高开发效率

    上一节我们成功把TypeScript 编译安装好了,接下来我们就看看编译器怎么用起来. 在写代码之前,我们先来选个开发工具,支持TypeScript 的IDE有很多,其中就包括了webstorm,VS ...

  7. 老程序员教你如何提高开发效率、成为大神1——人文思维进化与信众

    第一篇.人文思维进化与信众 接着上一篇第零篇的讨论后,我们已经知道了成为一名专业的程序员,需要具有完备的理论.独立的思考和成熟的技术,本质上是依靠身体力行带动思想,被动的使我们开始拥有成熟的技术,在已 ...

  8. 可以500%提高开发效率的前端UI框架!QUI!

    QUI 框架介绍 QUI网页界面集成框架是一套完整的企业级前端解决方案,由组件库.皮肤框架.示例工程和文档4部分组成.使用本产品开发者可以极大地减少工作量,提高开发效率,快速构建功能强大.美观.兼容的 ...

  9. 使用Linux命令行技术提高工作效率

    这篇文章是当时参加网络系统空间竞赛时老师给的总结性的文章让我们好好看,当时不以为然,觉得没啥好看的,都是些基础的命令. 但是过了两年时间,期间也用了好长时间的Linux系统,在回头看这篇文章时还是能够 ...

最新文章

  1. 当前路径_[JSP] 07 JSP 路径问题
  2. rich-text 图片控制_武汉煤制工业级乙二醇图片
  3. python划分代码_多分类评价指标python代码
  4. 日元兑换——国内兑换需要护照和签证,国外的机场有兑换ATM
  5. 认房又认贷 政策的真正意图——限购令如果没有同时增加土地供应,只是在变相加剧未来房价的上涨...
  6. Linux常用的基本命令vi、ps、kill(四)
  7. WSAEWOULDBLOCK: Resource temporarily unavailable
  8. 洛谷——P1002 过河卒||codevs——T1010 过河卒
  9. linux-Centos7安装python3并与python2共存
  10. java系统项目分为哪五大层次?控制层_业务_一个项目中说系统分为表现层、控制层、逻辑层、DAO层和最终数据库五层架构-转...
  11. 公司新来了个00后测试卷王,老油条表示是真干不过,已被……
  12. table隔行变色与table单元格根据条件更改字体颜色
  13. java基本数据类型存放在哪?
  14. Android Mvp架构的小demo
  15. 如何按照规格型号表挑选合适的快速接头
  16. [C语言错误]expected declaration or statement at end of input)
  17. 计算机基本键盘应用,计算机键盘基础知识
  18. gammatone 滤波器详解及其MATLAB代码实现
  19. SAP GUI 登录语言设置
  20. vue 点击事件传递多个参数_Vue子组件监听事件中传递参数的方法

热门文章

  1. 20145201李子璇 《网络对抗》恶意代码分析
  2. beta阶段140字评论
  3. IT项目之旅(二)篮球计分器(分析、设计、实现)
  4. 陈桥五笔用户编号获取_用户群组分析
  5. Win64 驱动内核编程-10.突破WIN7的PatchGuard
  6. hdu1054 简单最小顶点覆盖
  7. 【Groovy】集合遍历 ( 操作符重载 | 集合中的 “ + “ 操作符重载 | 集合中的 “ - “ 操作符重载 | 代码示例 )
  8. 【Java 并发编程】线程池机制 ( 线程池示例 | newCachedThreadPool | newFixedThreadPool | newSingleThreadExecutor )
  9. 【设计模式】软件设计七大原则 ( 开闭原则 )
  10. 【组合数学】生成函数 ( 使用生成函数求解多重集 r 组合数 )