职责划分

所有的业务逻辑实现均封装于service层中,不推荐实现于控制器api中。service层的包名只有一个,通过面向对象的方式进行封装。api层在使用的时候只会看到几个公开的业务逻辑封装对象。

业务逻辑封装 - 图1

数据校验

与客户端定义的输入接口是由api层的代码来做的校验,service层的代码仅对内部定义的参数进行必要的校验;有时往往也不需要做参数校验,认为内部调用的参数都是可信任的。例如:

注册逻辑:

业务逻辑封装 - 图2

内部引用

service内部的对象之间存在相互引用,直接使用对应的变量即可,例如:

业务逻辑封装 - 图3

实现代码

https://github.com/gogf/gf-demos/blob/master/app/service/user.go