简丽Framework-开篇

简丽Framework-开篇

简丽Framework 是一个开源java Web开发框架。

演示环境
http://jianli.hzbailing.cn/
admin
123456

开源地址
https://github.com/jikanghz/jianli

​ 开源的框架、库、组件等比比皆是,每个开源产品都有它的定位和价值。

​ 简丽Framework的定位是中小型Web项目的主体开发框架,它包含了对设计理念、开发规范、基础模块的理解和实践。

数据本无形

​ Web系统主要处理的就是数据和业务逻辑。一般来说数据的存储结构相对稳定,映射到代码中的数据对象也相对稳定。

​ 但是数据的中间处理过程往往是复杂、多变的,为此就有了设计模式和开发手册上提到的DTO、VO对象。在实际开发过程中使用DTO,VO对象会有一系列令人纠结的问题:我要不要再增加一个DTO?对新增加的DTO我该取什么名字?前端又在报怨后端VO对象返回的数据字段过多了...

​ 用静态、强类型语言来表达千变万化的数据本来就是勉为其难的事情。好在我们现在有json这样的动态弱类型数据对象,让结构化数据的表达和传递变得轻盈,从此告别了笨重的DTO、VO们。

​ 用动态弱类型数据对象可能有什么问题?我们失去了编译器的帮助,代码重构将只能手动进行。得失与取舍需要自己来衡量。

方法亦多态

​ 多态性通常指在运行时决定调用子类的具体方法。但其实Web系统的业务领域用到继承的场景并不多(硬要为每个Service写一个接口的场景除外 😃 ),所以多态性也显得少有用武之地。

​ 我们把多态的概念扩展一下,变成运行时调用指定对象的指定方法如何?

​ 通过Spring容器可以得到指定对象,通过反射来调用指定方法。

​ 似乎变得有些扑朔迷离了,这样做有什么好处?

​ 好处就是在Controller层可以用一个接口实现对所有服务的调用。这样Controller层几乎可以用一个通用方法来接管全部接口了。在这个通用方法里可以实现统一的异常处理、日志记录、计时器等。

BaseService service = (BaseService) getServiceFactory().getBean(serviceName);
Class serviceClass = service.getClass();
Method method = serviceClass.getMethod(methodName, JsonRequest.class);

jsonResponse = (JsonResponse) method.invoke(service, new Object[]{jsonRequest});

Web接口规范

Web接口Url

http://domain/api/{service}/{method}

​ 以上是所有Web接口Url的统一格式,包含了服务名称、方法名称两个参数。与面向对象的对象名和方法名类似,是每个Web接口的语义描述。

接口请求数据

{
	"token": "",
	"client": "",
	"data": {}
}
字段 类型 必填 说明
token String 接口令牌
客户端登录成功后得到token,以后每次调用接口都要带上token
client String 客户端标识
data Json 请求业务数据

接口响应数据

{
	"code": 200,
	"message": "OK",
	"data": {}
}
字段 类型 必填 说明
code Integer 响应代码
200:成功
400:请求参数错误
401:身份验证失败
403:授权验证失败
500:未知服务器内部错误
501:已知服务器内部错误
message String 响应消息内容
data Json 响应业务数据

​ 可以看这个接口规范并没有遵循RESTful接口规范,个人认为RESTful接口规范太桎梏于http协议,不足于表达api接口的语义。

posted on 2020-12-23 17:39  嵇康  阅读(504)  评论(0编辑  收藏  举报

导航