c/s和b/s是对软件结构的分类,或者说软件架构。
其中,c是client的缩写,s是server的缩写,b是browser的缩写。
Client指的是客户端
Server指的是服务器
Browser指的是浏览器
c/s就是客户端与服务器、b/s就是浏览器与服务器。

软件架构

简单来说,软件架构大致指的是:一个软件的组成部分,以及各个组成部分之间的关系、职责。

拿c/s来举例:

一个c/s架构的软件,它的组成部分主要是client和server,它们各自负责着一些工作,组合在一起,共同实现这个软件的功能。

server

server在c/s和b/s中都充当着重要一环,职责也大致相同。

server负责存储数据、安全系数比较高的计算、以及负责各client之间的同步和协调等工作。

比如,你微信钱包里还有100元,这个100元的数字一定是存储在server的,而不是存在你手机里,否则,你一旦换手机登录微信,100元就没了。

另外,server安全系数较高,用户没有操作的权限,仍然是那100元,如果存在client,也就是你的手机里,你是不是有可能将他改成10000?但在server上,你没有操作的权限。

当然,上面只是一个例子。

c/s

c/s架构前面有说过,组成部分是client和server

client负责给用户:

  • 显示界面
  • 响应交互
  • 与server通讯

client由开发者针对系统特性开发。

由于client本身就负责与server进行通讯,那么,通讯方式也是能够定制和扩展的。

b/s

b/s架构的组成成员是browser和server。

browser不像client一样那么全职,browser主要只负责充当一个可以和server通讯的容器。

那么容器里放什么东西呢?html、css、javascript,也就是网页。

用户界面和响应交互,是由网页来负责的,网页需要开发者开发。

所以,b/s模式的软件开发通常会被称作web开发。

和c/s比起来,browser已经为web开发者提供了封装好的通讯功能,不需要像client一样自己去实现。

选择

又回到这个问题。

了解软件架构的特性,对于选型而言很重要,你需要根据项目背景等因素,去考虑如何选择软件架构。

不同的软件架构,所需要的技术栈、技术人才、技术成本都不一样。

说说优缺点吧。

c/s:

成本相对高、跨平台相对难、通常需要安装

但体验相对好、性能相对高、定制性相对高

很关键的一点,client在没有其他抽象层的情况下,直接依赖操作系统,它的功能显然也更多,它能调用系统级的api。

b/s:

成本相对低、跨平台性相对好、且不用安装

但体验相对弱、性能相对弱、定制性相对弱,功能当然也相对弱,它只能调用browser所开放的接口,不是系统级的。

毕竟web网页依附于browser才能运行。

另外,还要考虑到浏览器种类繁多带来的兼容问题。当然,现在这一现象越来越改善了

思考

其实这个我们可以想象联想一下jvm

Jvm作为一个中间的抽象层,让java中间码只依赖于它,而不是直接依赖于操作系统,这赋予了java跨平台性

Browser正是中间那个抽象层,让用户界面直接依赖于browser,而不是操作系统,这赋予了b/s架构的软件跨平台性

这里又延伸到抽象层的思考,我们会发现,一个项目变得复杂了之后,维护会成为一个比较头痛的问题。为了让项目变得可维护,我们会通过各种手段,各种思想,将他解耦,到最后,我们会发现,这个项目的架构变得比刚开始的架构复杂很多,你再仔细观察一下,中间增加了许多层。这些层负责的职责,越来越单一,越来越清晰。