一种值得借鉴的设计思路
来源:互联网 发布:类似知图科技的公司 编辑:程序博客网 时间:2024/04/30 16:52
近期工作是分析某个业界产品的架构与设计,重点关注其支持配置和二次开发的特性,过程中感觉有些设计值得借鉴,在此总结一下
背景:
系统大致上是C/S架构
server可以响应多种client的请求。client包括与产家提供的标准client,也包括用户自行二次开发的client
浏览器不直接访问Server,而是专门由单独的Web Server提供页面,因此可以认为Web Server是一个特殊的client
设计的关键点:
一、Server在逻辑上划分为接口层和业务逻辑层。client不会直接访问业务逻辑层,所有的请求都是由接口层处理的
二、接口层抽象了请求的差异,提供了若干统一的接口。这个其实是接口粒度的设计问题
三、产商向客户提供了二次开发SDK,客户如果需要自行二次开发client,就需要用到这个二次开发SDK
通过这种设计,对客户端隐藏了server的实现细节,从而至少带来了3个好处:首先是方便,其次是安全,然后是客户端稳定性
方便:想象一下,如果没有API,那么client要与server交互,就必须自行处理建立连接、封装协议、组装数据、解析响应、校验身份……那么二次开发的难度就会很大
安全:通过抽象的接口,向客户端隐藏了server的具体实现
客户端稳定性:只要接口层保持稳定,那么server端的修改,就不会对client造成影响,还可以实现向下兼容的特性
其实仔细想一下,会发现这种设计和模块设计的原则是一致的,即需要交互的两个模块(client和server),不直接依赖,而是通过接口(接口层)交互,彼此不了解对方的实现,达到松耦合
至于提供了SDK,我认为不是核心,只是锦上添花
背景:
系统大致上是C/S架构
server可以响应多种client的请求。client包括与产家提供的标准client,也包括用户自行二次开发的client
浏览器不直接访问Server,而是专门由单独的Web Server提供页面,因此可以认为Web Server是一个特殊的client
设计的关键点:
一、Server在逻辑上划分为接口层和业务逻辑层。client不会直接访问业务逻辑层,所有的请求都是由接口层处理的
二、接口层抽象了请求的差异,提供了若干统一的接口。这个其实是接口粒度的设计问题
三、产商向客户提供了二次开发SDK,客户如果需要自行二次开发client,就需要用到这个二次开发SDK
通过这种设计,对客户端隐藏了server的实现细节,从而至少带来了3个好处:首先是方便,其次是安全,然后是客户端稳定性
方便:想象一下,如果没有API,那么client要与server交互,就必须自行处理建立连接、封装协议、组装数据、解析响应、校验身份……那么二次开发的难度就会很大
安全:通过抽象的接口,向客户端隐藏了server的具体实现
客户端稳定性:只要接口层保持稳定,那么server端的修改,就不会对client造成影响,还可以实现向下兼容的特性
其实仔细想一下,会发现这种设计和模块设计的原则是一致的,即需要交互的两个模块(client和server),不直接依赖,而是通过接口(接口层)交互,彼此不了解对方的实现,达到松耦合
至于提供了SDK,我认为不是核心,只是锦上添花
- 一种值得借鉴的设计思路
- Dubbo设计上值得借鉴的地方
- 值得借鉴的文章
- 值得借鉴的makefile
- 2018——思路值得借鉴
- 使用iOS系统中的编辑联系人界面,其中的思路值得借鉴(继承的思想)
- 股市值得借鉴的事例
- [转]值得借鉴的工作经验
- 值得借鉴的oracle 项目
- 挺好的,值得学习借鉴
- 挺好的格言,值得借鉴
- Protobuf消息设计原则(值得借鉴)
- 在一个Activity中使用多个View (可以借鉴的一种思路)
- 一种Web UI 的代码设计思路
- 操作配置文件的一种设计思路
- 一种API代码结构的设计思路
- 又一种设计思路
- EasyDarwin开源流媒体服务器中一种实现对作用域内new对象自动释放的方法(值得借鉴)
- System.getProperty()
- GPU编程 GPU GEMS 3
- classloader简介
- 自定义ClassLoader,让spring加载外部的配置文件和类
- 我对协议的理解
- 一种值得借鉴的设计思路
- RPC简介,及与web service的对比
- linux内核源码阅读之facebook硬盘加速flashcache之二
- talk is cheap, show me the code
- JQuery中$.ajax()方法参数详解
- 系统的扩展性(怎么设计插件)
- delete archivelog all无法清除归档日志解决方法
- 20130924-表压与绝压
- 什么是架构