项目和需求快速开发思路
工作一坤年后,开始思考项目和需求快速开发应该怎么做。
吐槽
项目可以理解为从头拿IDEA构建一个工程,不过一般会使用用以前的一个架子打底来做。当然,某些初创公司会重搭。需求可以理解为已上线运行的项目基础之上的增量迭代开发。增量开发也就是功能优化、漏洞修复,改动的是代码、配置、数据库,恼火的是表实体层dao层那一堆,崩溃的是文档维护修改
这一段话总结下,就是一个架子,很重要,一个代码生成器,很重要,一个文档自动更新,非常重要!
先说架子。调研了下,架子,网上开源的很多,收费的只是文档和视频教程,这也没办法,都要吃饭。不过有一说一,直接拿来用很痛苦,太重了,拆分很是受罪,如果不缴费学习,自己去探索剥离,纯纯坐牢。我决定不缴这个钱,从所谓开源框架中找文档还算多的,以最小的、能随便拆分的方式,自己写或者标明作者,来组建架子的各个模块。当然,我暂时没有写详细注释和文档的打算,也没有录视频教程抢开源大佬生意的打算,只是磨炼一下自己的技术。
开源架子往往都有些共通点,需求不同,issue实现多了,轻量呢慢慢变重,拆分不便。不用呢,重复造轮子,用呢,abcd几个开源组件一组合,然后修bug,妥妥活受罪。之前组合spring gateway和sentinel,直接因为文档不清晰加版本问题,验出来几个坑(基于spring cloud gateway+sentinel构建微服务网关)
所以,还是能少用则少用。拿很知名的hutools来说,拆成了多个模块,这种想法就很棒,用谁引谁,不然包冲突能让人头皮发麻,虽然有maven helper了。
再说代码生成器,脱离设计和框架的代码生成器就不说了,没啥太大意义,mybatis-plus直接写个脚本,妥妥完事。如果想自定义模板,网上开源的也多,一大堆,推荐一手PDmaner,纯纯免费,公众号也不需要关注,改改模板,非常够用。或者设计到实现,搞个apifox,从数据模型到接口文档,再转变成代码,完全OK。不过,apifox还是有不少BUG,例如数据模型的长度在转sql的时候直接一个宣告死亡,只能255,也不知道哪个版本修。唉,但是,又不得不说但是了,真的符合工作岗位上要求使用的开发框架吗?
当然,现在的系统实现已经互相借鉴互相学习,大家都找到最优解了,但真的是这样吗?举个例子,早年写Javadoc,后来写swagger注解,现在又在追求无侵入了,看了下smart-doc,确实很厉害,但引了一堆依赖,又得去看看依赖里有哪些jar包…
当然,其实生产上挂了就挂了,无所谓了,漏洞就漏洞了,也没办法,老板就给那点工资,凭啥呢。确实是。
再说说文档及时更新,showdoc+runapi、smart-doc+torna集成、或者就拿apifox吧,真的apifox再把bug修修简直无敌。可惜就是得联网登录,私网部署又得找领导谈,我也谈不动啊。我就一秋儿,却要关心这么多事,我也很费解。这些东西头疼的只能说头疼,单机也就算了,微服务呢?杀死游戏。其实还有knife4j,他们是真的很厉害,我也很敬佩,swagger丑爆的ui直接干烂,springdoc迁移了还在用swagger那丑不拉几的ui,简直牛皮。这一方面不得不说我们国人很牛。knife4j能干微服务,答案已经出来了。
思路
吐完槽,讲讲思路。 首先是架子,这个生产上跑起来了,就先不慌了。先整个思维导图,后面慢慢补充迭代起走。思路很简单,按spring-boot的思想,做成模块的装配,要引就引,不引拉到。而且模块粒度拆的足够细,要用谁用谁。然后再像hutools做个hutools-all,给懒人专用。
其次是代码生成器,这个比较紧急,而且方案要好好想下。模板这东西,肯定要能够导入导出,而且得稍微改改,就能套到另一个架子中。表肯定是能够和数据库连的,mysql和oracle能支持就行了,毕竟oracle都收购mysql了,国产数据库语法大概也不会脱离这两个了。实在不行,找个GPT翻译数据库导出的sql吧,再自己找个mysql连上。这两者其实PDmaner已经实现了,所以我一直在夸。但PDmaner呢,模板不好管理,实在不行也就它了。
再说文档,这样一来,哪怕单用PDmaner,数据字典咱们已经有了。就差接口文档了,其实swagger那玩意勉强是够的,换个knife4j前身swagger-bootstrap-ui把烂UI一换,其实够用。可是我们很馋knife4j那个离线导出html,那玩意是真的好用,谁用谁知道。而且它还能导出word,绝不绝,真的是打了国人的七寸痛点。apifox的接口文档html其实很好看,但它没法导出来,想想也知道,这玩意能导出来,谁还买它的私网部署?所以,我要用上一个springdoc加上它官方推荐的一个几百个star的小项目(真怕这个作者直接关项目)GitHub - dnault/therapi-runtime-javadoc: Read Javadoc comments at run time.来做这件事。
方案