转载

多么痛的领悟,基础数据的全部

名词解释:Lookup 指数据字典,常用于表示状态,应用中通常为枚举类,页面上可作为下拉框的数据源。

本文以一个小故事分享基础数据维护的一些事。

痛苦的原始生活

晚上九点,程序在生产环境部署完成,小A终于歇了口气,开始按顺序把各种基础数据录入系统。

  • 录入新菜单

  • 录入新接口

  • 录入Lookup

  • ……

重复着 Control C/V ,小A回想起开发  F功能 时的场景,真是惨不忍睹。

“擦,功能简单至极,却有5个Lookup,每个Lookup居然有十几个项”,瞄完功能文档后,小A痛不欲生。

好吧!又能怎样呢?

吭哧吭哧创建了5个枚举类,完成CRUD,痛苦的把Lookup维护到待发布文档中。

接着,收集本次变更的接口。”POST请求,URI 是 /examples ……” ,小A念叨着。

偷个懒吧

“开发时要维护,打断思绪,影响心情;发布时要复制粘贴,浪费时间。要是哪天漏维护,生产环境指不定还能生个阿哥。总这么搞也不是事呀!”。睡在床上,小A思考着。

“干脆按规定格式维护到Excel里吧,写个导入程序,发布时抓Excel数据然后自动导进DB。虽然开发时仍然要维护,但起码发布时轻松很多”。

第二天,设计完 Excel 中的数据结构,几个小时后,小A快速完成了开发。录入些基础数据,测试一把,基础数据自动进入DB,爽歪歪!

向小伙伴介绍完如何维护数据之后,小A期待着下次发布的到来!

“哈哈哈哈,得亏我机智!”。两周后,看着满屏待维护的基础数据,小A乐的合不拢嘴。

几十秒,基础数据  “刷刷刷” 自动导入了DB,Perfect!

刹不住的”懒车”

眨眼过去一个月,虽然发布轻松一些,但平时反人类的维护工作还是历历在目。

上班路上,小A想着:”还能不能让我安心的干活了,非得搞定你不可”。

作为 Java 程序小哥,小A自然知道 Spring 的 XML 维护时代、注解标记时代、Spring Boot 自动搞定各种体力劳动的奇妙,小A又回想起开发时的一些细节。

XML 手工定义 Bean,繁琐不说,还容易把class维护错。基础数据也一样,繁琐,容易错,还容易漏。

<bean id="userService" class="com.example.UserService"/>

JavaConfig 方式果然爽,coding的方式还是舒服很多!

@Configuration public class UserConfiguration { @Bean public UserService userService { return new UserService(); } }

扫描并自动注入真赞!通过  @Service 标记,它成了为类的属性, UserService 就可以被自动处理了,完美呀!

@Service public class UserService {}

我能不能也搞个扫描,然后加载到DB呢?关于Lookup,小A立马构思了一个方案,联想到了案例。

@Lookup public class UserStatus { ACTIVE("ACTIVE", "正常"), INACTIVE("INACTIVE", "注销"), FROZEN("FROZEN", "冻结"); }

  • Lookup 是枚举类,定义  @Lookup  注解,为类打上标记

  • 构建时利用 maven 扫描特定 package,收集  @Lookup  标记的数据,打成json文件放到jar包中

  • 部署时利用程序读取json文件数据并导入到DB

  • 应用运行后自动读取基础数据,解析并加载

由于实现很简单,小A慢慢的完成了设计和开发工作,各种基础数据也逐渐被处理掉,筒子们从此可以专心的干活。

后记

技术设计、开发、测试、部署过程中,会有许多臃肿、痛苦却无法避免的维护工作。这些工作需要开发规范来约定,codereview 人员需要经常提醒新人,却也会忘记维护,偶尔也会维护出错,在构建新环境时还要处理一大堆额外维护工作。

许多元数据就在程序中,有的也是跟着开发步骤走,比如:

  • 利用Liquibase脚本来处理DB对象,脚本在部署包中

  • 利用 Swagger 来标记接口,定制开发,自动收集并导入DB

  • 利用自定义注解来处理 Lookup 等类似的数据,自动收集并导入DB

“利用安装介质,一键部署,一个Docker镜像搞定一切,随时随地随意构建新环境!” ,这是最开心的方式,现在许多软件产品都是运行一个镜像即可。

“ 出新境界吧!

原文  https://mp.weixin.qq.com/s/szHaja3_H1mY3omrwfleGg
正文到此结束
Loading...