xbank项目版本库:https://gitee.com/szhengye/xbank.git
项目实践:账户域服务的开发
1. Account领域服务的封装
Account领域服务是和Customer领域服务并列的,Account领域服务的封装,依次有以下步骤:
- 第1步:领域服务接口的约定:在xbank-account-sink-client中编写AccountSinkInterface接口;
- 第2步:领域服务的实现:创建xbank-account-sink子模块,基于第1步约定的接口,实现AccountSinkService SpringBean,并封装成能独立运行的微服务应用;
- 第3步:配置sink.yml文件,把AccountSinkService SpringBean作为Sink连接到Biz-SIP平台;
另外,Account领域服务在封装时,涉及到多个接口调用,对每个接口采用命令执行器(Command Executor),所有的接口实现继承AbstractBeanCmdExe类来实现:
2. Account服务在适配层和应用层的开发和对外暴露
把sink服务,暴露给适配层接口调用,有2种方案:
方案一:
通过sink-service类型,打通适配层和应用层:直接把account领域服务所对应的sink,直接暴露给Biz-SIP开放平台接口。
- 第4步:配置service.yml文件,把account-sink直接作为sink-service暴露给Biz-SIP开放平台接口。
接口测试如下:
$ curl -H "Content-Type:application/json" -H "Biz-Service-Id:sink/account" -X POST --data '{"methodName":"getAccountListByCustomerId","params":["001"]}' http://localhost:8888/api|jq
{
"code": 0,
"message": "success",
"extMessage": null,
"traceId": "2280472dd72c4ee4a2b7214604e9cf27",
"parentTraceId": null,
"timestamp": 1630751382623,
"data": {
"result": [
{
"accountId": "0001",
"balance": 100,
"customerId": "001"
},
{
"accountId": "0002",
"balance": 200,
"customerId": "001"
}
]
}
}
方案二:
通过bean-service,打通适配层和应用层:
- 第4步:应用服务接口的约定:在xbank-personal-app-client中编写PersonalAppInterface接口和CustomerAndAccountList DTO类;
- 第5步:应用服务的实现:在xbank-app模块中,基于第4步约定的接口实现PersonalAppService服务;
- 第6步:配置service.yml文件,把第5步开发PersonalAppService服务,通过bean-service的account-sink暴露给适配层;
- 第7步:在适配层创建xbank-openapi-source子模块,开发PersonalController类,暴露个性化的REST接口,并通过SourceClientFactory.getBizServiceClient(PersonalAppInterface.class,“app/personal”)获取应用层服务的调用接口,在适配层中调用应用层约定接口。
接口测试如下:
$ curl http://localhost:9001/personal/getAccountListByCustomerId\?customerId=001|jq
[
{
"accountId": "0001",
"balance": 100,
"customerId": "001"
},
{
"accountId": "0002",
"balance": 200,
"customerId": "001"
}
]
Biz-SIP官方网站:http://bizsip.bizmda.com
Gitee:https://gitee.com/szhengye/biz-sip