框架理念
最少的代码,完成最通用的功能,是最美的设计
有没有比SpringBoot更简单,更轻量,几乎不用写代码就能完成后端CRUD功能的框架呢
答案是:有...,传送门在下面
那有没有比XModel更灵活一点,当我需要定制化一些业务的时候,可以几乎不用写代码就实现的框架呢
答案是:有...,传送门在下面
这是继xmodel之后,对于微服务无后端架构的一点思考,因为单纯的CRUD虽然能解决项目上80%的起步开发需求,但是现实总是残酷的,总有那么20%的功能需求比较复杂,简单CRUD搞不定,例如多层结构的数据处理,例如需要一些简单逻辑判断,那么这时候怎么办呢,如何写最少的代码去实现我们需要的功能呢?我思考了很久,最后还是觉得,在处理关系型数据上,没有什么比SQL要来得强大,轻巧。所以,我编写了xbatis这个小服务应用,尝试解决这20%复杂需求中一部分的问题。
xbatis基本的思想理念就是,RESTful请求直接打通到SQL语句,抛开传统的Action,Service等业务中间层,没有中间商赚差价!对于简单的业务逻辑处理,直接用简单的SQL语句解决即可。(但是在这需要说明的是,对于非常复杂的业务逻辑处理,xbatis就不合适了,建议这个时候还是使用传统的业务中间层。)好了,废话少说,直接来看使用方法
使用方法
1,config/default.js中设置数据库连接,执行npm install
2,提前创建好数据表,或者使用xmodel自动生成数据库
3,node app.js(启动)
框架目录结构(后台)
xmodel
src/app.js——系统入口
yaml/*.yml——SQL文件,这是使用该框架开发唯一需要写的文件
RESTful规则
[POST]http://host:port/xbatis/MODEL_NAME/METHOD_NAME
[POST]http://host:port/xbatis/MODEL_NAME/METHOD_NAME
[POST]http://host:port/xbatis/MODEL_NAME/METHOD_NAME
[POST]http://host:port/xbatis/MODEL_NAME/METHOD_NAME
例子
以一个用户模块为例,需要对用户进行定制查询:
[POST]http://host:port/xbatis/user/find_by_username
post body:{"username":"cheney"}
user.yml文件:
findByUsername:
- select * from user where username = :username
实现思路
1、使用Node的Express微服务框架作为基础
2、使用Express的中间件Router处理所有请求
3、因为RESTful风格接口规范,所以Controller控制器可以根据路径解析,动态调用需要处理的SQL
4、使用nodebatis(一个极其优雅的Node类Mybatis框架,使用yml文件编写SQL)完成请求到SQL的业务处理
5、另外框架附加了config环境配置,可以根据开发或生产切换环境配置;tracer日志系统,可以很优雅简洁呈现不同级别log
未来还会考虑更灵活拓展,更强大业务功能,当然,这些都必须在不写代码的前提设计理念:)下完成......
设计背景
可以看到,XModel和XBatis的设计和实现都并不复杂,但实际上,达到了很“炫酷”的效果,真的可以几乎不写任何后端代码就是实现了一般项目中大量冗余重复编写的CRUD,甚至是简单的业务逻辑。我个人在项目中运用xmodel和xbatis组合使用,使得我的开发效率得以数倍的提升,使得我可以更加专注去处理复杂逻辑。
“无后端”架构并不意味着完全不用编写后端代码,而是那些冗余,重复,简单,繁琐,毫无意义的代码为什么不干脆舍弃掉呢,一个单纯调用dao的service又有什么意义呢?为了以后拓展?那为什么不干脆重新写一个service呢?软件工程的一个思想,永远不要去修改原先的代码,而是采用新写代码的方式来做变更。
微服务,微功能,微接口,当业务功能变迁,直接重新使用新接口进行更替就可以了,旧接口废弃,但这样做的前提是——新写接口的时间成本低于修改接口的时间成本。传统的开发模式中,这几乎是不可能实现的,但是在“无后端”架构中,却是很自然的。
当然,xmodel和xbatis只能解决CRUD和简单业务逻辑和简单业务场景,还有更多的复杂业务无法处理,对于复杂业务的解决方案,我个人一直也在思考中,也同时在开源界寻找着,如果看客们有好的想法,非常欢迎评论或联系我,不胜感激!
如果有任何的批评建议,BUG反馈,问题反馈,或是想法建议,帮助支持,个人都十分欢迎,我个人的联系方式如下:)
作者:CheneyXu
关于:XServer官网