web层直接调用 dubbo的服务,合适吗?
2017-09-04 17:33
225 查看
目前很多互联网app项目,都是采用这样的一个基本项目结构:即由后端提供Restful的api接口,然后供前端例如IOS、Android或者H5端去调用,如图:
在这种结构下,后台的代码分层常规一般会有两种做法:
方式1:后台代码分为web层、service层、dao层,其中service层直接暴露成dubbo服务供Resuful去调用
方式2:后台代码分为web层、service层、dubbo服务层,dao层,其中服务层即是dubbo的服务,服务层供Service层调用
上述两种方式中方式2在分层上相对要合理些,好处是在service中调用dubbo,可以单元测试,并且比较容易
但更合理的方式是在Service层和dubbo服务层之间再抽象出一层,可以把这层暂且称为服务适配层,这一层可以起到这样的作用:
1. 屏蔽掉Service层对dubbo服务层的耦合和依赖
2. 某个dubbo服务有时会提供给不同的Service去调用,这个就有点象是数据库中的某张表会提供给不同的业务场景去使用,所以这个服务适配层的作用就有点类似于Dao层的作用了,它首先可以把Service层传递的数据转换成dubbo服务需要的参数形式,并且可对dubbo服务执行完成后的结果数据进行检查校验以确认接口是否调用成功,然后再返回给Service层。这样一来Service层的代码会更干净些。
更好的方式应该是在dubbo的服务层之上应提供一个API网关,由API网关负责对dubbo服务的访问(可以考虑用泛化的方式去调用),这样所有的业务系统如果需要调用dubbo服务,就以Restful的方式调用API网关就可以了
在这种结构下,后台的代码分层常规一般会有两种做法:
方式1:后台代码分为web层、service层、dao层,其中service层直接暴露成dubbo服务供Resuful去调用
方式2:后台代码分为web层、service层、dubbo服务层,dao层,其中服务层即是dubbo的服务,服务层供Service层调用
上述两种方式中方式2在分层上相对要合理些,好处是在service中调用dubbo,可以单元测试,并且比较容易
但更合理的方式是在Service层和dubbo服务层之间再抽象出一层,可以把这层暂且称为服务适配层,这一层可以起到这样的作用:
1. 屏蔽掉Service层对dubbo服务层的耦合和依赖
2. 某个dubbo服务有时会提供给不同的Service去调用,这个就有点象是数据库中的某张表会提供给不同的业务场景去使用,所以这个服务适配层的作用就有点类似于Dao层的作用了,它首先可以把Service层传递的数据转换成dubbo服务需要的参数形式,并且可对dubbo服务执行完成后的结果数据进行检查校验以确认接口是否调用成功,然后再返回给Service层。这样一来Service层的代码会更干净些。
更好的方式应该是在dubbo的服务层之上应提供一个API网关,由API网关负责对dubbo服务的访问(可以考虑用泛化的方式去调用),这样所有的业务系统如果需要调用dubbo服务,就以Restful的方式调用API网关就可以了
相关文章推荐
- C# Web Service 不使用服务引用直接调用方法
- 『翻译』为什么.Net CF在调用HTTPS 的Web服务时失败?!
- 开发自己的Web服务处理程序(以支持Ajax框架异步调用Web服务方法)
- web引用程序调用 windows的服务
- C#如何动态调用Web服务
- 如何让WCF服务更好地支持Web Request和AJAX调用
- 使用 Ajax 调用 SOAP Web 服务,第 1 部分: 构建 Web 服务客户机
- 当当网开源Dubbox,扩展Dubbo服务框架支持REST风格远程调用
- 如何利用 SSL 调用 Web 服务
- 用JSP调用以Web应用形式部署在Tomcat 5.5中的SCA服务组件的例子
- java web 利用dubbo构建分布式服务项目(一)
- Dynamics Ax 2012中调用外部web服务
- web服务改造成dubbo服务所需配置
- 使用 gSOAP 通过 HTTP 和 HTTPS 调用由 WSAD 创建的 J2EE Web 服务
- 在web项目中和安讯报表web服务直接建立安全session的方法
- 在Android开发中调用Rest web服务(转)
- WF工作流技术内幕 —— 通过Web服务调用Workflow工作流(开发持久化工作流)
- Silverlight2 跨域调用Web服务的方法
- dubbo调用服务出现如下异常Serialized class com.taotao.manager.pojo.TaoResult must implement java.io.Serializabl
- wcf 中客户端调用之死 感悟 wcf与原来的webservice2.0 的客户端调用区别(wcf调用完不关闭的话那就把web服务搞死了)