← 返回目录

后台即服务

第 38 / 119 卷日期:

Controller/Presenter 负责逻辑的处理,Model 提供数据,View 负责显示。

MVVMMVVM 是 Model-View-ViewModel 的简写。相比于 MVC 悠久的历史来说, MVVM 是一个相当新的架构,它最早于 2005 年被由的 WPF 和 Silverlight 的架构师

John Gossman 提出,并且应用在微软的软件开发中。而 MVC 已经被提出了二十多年了,可见两者出现的年代差别有多大。

MVVM在使用当中,通常还会利用双向绑定技术,使得Model变化时,ViewModel 会自动更新,而ViewModel变化时,View也会自动变化。所以,MVVM模式有些时候

又被称作:model-view-binder 模式。

后台即服务

BaaS(Backend as a Service)是一种新型的云服务,旨在为移动和 Web 应用提供后端云服务,包括云端数据/文件存储、账户管理、消息推送、社交媒

体整合等。

产生这种服务的主要原因之一是因为移动应用的流行。在移动应用中,我们实际上只需要一个API接又来连接数据库,并作一些相应的业务逻辑处理。对于不同的应用产

商来说,他们打造 API 的方式可能稍有不同,然而他们都只是将后台作为一个服务。

在一些更特殊的例子里,即有网页版和移动应用端,他们也开始使用同一个 API。

前端作为一个单页面的应用,或者有后台渲染的应用。其架构如下图所示:

API 演进史

在早期的工作中,我们会发现我们会将大量的业务逻辑放置到View层——如迭代出某个结果。

而在今天,当我们有大量的逻辑一致时,我们怎么办,重复实现三次?

如下所示是笔者之前重构的系统的一个架构缩略图:

上面系统产生的主要原因是:技术本身的演进所造成的,并非是系统在一开始没有考虑到这个问题。

从早期到现在的互联网公司都有这样的问题,也会有同样的过程:

第一阶段:因为创始人对于某个领域的看好,他们就创建了这样的一个桌面网站。

这个时间点,大概可以在 2000年左右。

图 70-1
图 70-1

图 33: Backend As A Service

图 70-2
图 70-2

图 34: 重复逻辑的系统架构

图 70-3
图 70-3

图 35: API 演进史

要。这时由于当时的开发环境,以及技术条件所限,当时的网站只会是桌面模板的简化。

这时还没有普及 Ajax 请求、SPA 这些事物。

第三阶段:手机应用的制作开始流行起来了。由于需要制作手机应用,人们就需要在网站上创建 API。由于当时的业务或者项目需求,这个 API 是直接耦合在系统中的。

第四阶段:由于手机性能的不断提高,并且移动网络速度不断提升,人们便开始在手机上制作单页面应用。

由于他们使用的是相同业务逻辑、代码逻辑相同而技术栈不同的代码,当有一个新的需求出现时,他们需要重复多次实现,如下图所示:

图 71-1
图 71-1

图 36: 重复业务逻辑的系统架构

随后——也就是今天,各种新的解决方案出现了,如React、混合应用、原生+ Web 的混合式应用、他们的目的就是解决上述的问题。不过,这些解决方案只是为了解决在

前端中可能出现的问题,详细的内容可以见《前端演进史》。

而人们也借此机会在统一后台——因为我们可以借助于混合应用或混合式应用(即原生 + 内嵌 WebView,可以同时解决性能和跨平台问题)统一移动端,借助于响应式

设计的理念可以统一桌面、平板和手机端。

因此,我们需要的就只是这样的一个 API:

图 72-1
图 72-1

图 37: One API

全站分卷索引 · 119 卷
  1. 1Growth: 全栈增长工程师指南
  2. 2软件开发的核心难题:沟通
  3. 3大公司的专家与小公司的全栈
  4. 4全栈工程师的未来:无栈
  5. 5基础知识篇
  6. 6工具只是辅助
  7. 7语言也是一种工具
  8. 8提高效率的工具
  9. 9IDE
  10. 10终端或命令提示符
  11. 11包管理
  12. 12环境搭建
  13. 13Windows
  14. 14GNU/Linux
  15. 15学好一门语言的艺术
  16. 16输出是最好的输入
  17. 17如何应用一门新的技术
  18. 18Web 编程基础
  19. 19从 HTML 到页面显示
  20. 20HTML
  21. 21中文?
  22. 22其他 HTML 标记
  23. 23小结
  24. 24CSS
  25. 25简介
  26. 26样式与目标
  27. 27更有趣的 CSS
  28. 28JavaScript
  29. 29JavaScriptFul
  30. 30面向对象
  31. 31其他
  32. 32前端与后台
  33. 33后台语言选择
  34. 34PHP
  35. 35Model
  36. 36View
  37. 37Controller
  38. 38后台即服务
  39. 39后台即服务
  40. 40数据库
  41. 41搜索引擎
  42. 42前端框架选择
  43. 43前台与后台交互
  44. 44JSON
  45. 45WebSocket
  46. 46编码过程
  47. 47Web 应用的构建系统
  48. 48Web 应用的构建过程
  49. 49Web 应用的构建实战
  50. 50Git 与版本控制
  51. 51Tasking
  52. 52Tasking 开发任务
  53. 53写代码只是在码字
  54. 54内置索引与外置引擎
  55. 55内置索引与外置引擎
  56. 56如何测试
  57. 57测试替身
  58. 58Mock
  59. 59测试先行
  60. 60可读的代码
  61. 61命名
  62. 62函数长度
  63. 63代码重构
  64. 64提炼函数
  65. 65内联函数
  66. 66查询取代临时变量
  67. 67重构到设计模式
  68. 68上线
  69. 69隔离硬件:虚拟机
  70. 70隔离操作系统:容器虚拟化
  71. 71隔离底层:Servlet 容器
  72. 72隔离依赖版本:虚拟环境
  73. 73隔离语言:DSL
  74. 74GNU/Linux
  75. 75HTTP 服务器
  76. 76数据库端缓存
  77. 77前端缓存
  78. 78运行机制
  79. 79自动化部署
  80. 80依赖与包仓库
  81. 81构建软件包
  82. 82数据分析
  83. 83想法-构建
  84. 84产品-衡量
  85. 85数据分析
  86. 86分析数据
  87. 87用户数据分析:Google Analytics
  88. 88流量获取
  89. 89移动应用
  90. 90网站性能
  91. 91SEO
  92. 92什么样的网站需要 SEO?
  93. 93内容
  94. 94UX 入门
  95. 95什么是简单?
  96. 96进阶
  97. 97认知设计
  98. 98持续交付
  99. 99持续集成系统
  100. 100持续交付
  101. 101持续部署
  102. 102持续阅读
  103. 103遗留系统与修改代码
  104. 104遗留代码
  105. 105修改遗留代码
  106. 106速度优化
  107. 107模块重构
  108. 108Retro
  109. 109三个维度
  110. 110架构模式
  111. 111预设计式架构
  112. 112演进式架构:拥抱变化
  113. 113意图导向
  114. 114重构
  115. 115模式与演进
  116. 116相关阅读资料
  117. 117架构解耦
  118. 118CQRS
  119. 119CQRS 结合微服务