DASP

来源 :软件 | 被引量 : 0次 | 上传用户:darling1989
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘  要: MVC架构作为一种经典的软件架构,多年以来被业界广泛使用。但由于MVC代码复杂、效率低下等缺点,很多研究尝试对其进行改良。近年来,伴随着RESTful API的提出,以及前端框架的流行,前后端分离架构逐渐开始取代传统的MVC架构成为业界主流。本文基于前后端分离架构提出了一个由客户端、接口和数据库构成的最简模型,在该模型的基础上又提出了一个简洁、高效的产品设计模式(DASP)。并以一个电子留言板的实际案例详细阐述了该模式的具体设计流程,表明了该模式的有效性和高效性。
  关键词: DASP;前后端分离;设计模式;RESTful API
  中图分类号: TP3    文献标识码: A    DOI:10.3969/j.issn.1003-6970.2020.08.047
  本文著录格式:吴晓一. DASP——一种基于前后端分离架构的产品设计模式[J]. 软件,2020,41(08):175-179
  【Abstract】: As a classical software architecture, MVC architecture has been widely used in the industry for many years. However, due to the complexity and low efficiency of MVC, many studies have tried to improve it. In recent years, with the introduction of RESTful APIs and the popularity of front-end frameworks, the front-end and back-end separation architectures have gradually begun to replace the traditional MVC architecture and become the mainstream of the industry. This paper proposes a simple model consisting of client, interface and database based on the front-end and back-end separation architecture. Based on this model, a simple and efficient product design pattern (DASP) is proposed. An actual case of BBS is used to elaborate on the specific design process, indicating the effectiveness and efficiency of this pattern.
  【Key words】: DASP; Front-end separation; Design pattern; RESTful API
  0  引言
  MVC架构,又名Model-View-Controller(模型-视图-控制器)架构,以其耦合性低、复用性高等特点,多年以来,作为一种经典的软件架构被业界广泛使  用[1-5]。同时,MVC也有着代码复杂、对模型访问效率低下等缺点,因此很多研究尝试着在MVC架构的基础上加以改良[6-7]。
  但由于MVC架构的自身局限,前后端的业务很难被彻底分开,其结果就造成了本该明确分工的各种业务揉杂在一起,给开发带来了诸多低效与不便。
  对此,Fielding提出了REST(REpresentational State Transfer)的概念,意为表述性状态转移,为在实际开发过程中前后端分工不明、职责不清的问题给出了一个很好的解决方案[8]。在后端只需准备好各种类似设计的接口,每当客户端的请求方法和请求URI发过来,就调用符合该请求的接口,返回相应的状态码和以JSON格式承载的响应体。这类符合REST设计风格的程序接口就可以称为RESTful API。
  而前端方面,近年来,伴随着Angular、React和Vue三大前端框架的流行,前后端分离架构也日趋成熟,业务与视图在开发过程中彻底实现了分离:后端只实现API接口,前端只专注于设计用户界面。这不仅实现了开发者的职责分离,也实现了前后端技术上的分离,为高效开发奠定了坚实的基础[9-11]。
  1  前后端分离架构
  从软件工程的角度,开发工作可拆分为两种基本分工:前端(front-end)和后端(back-end)。
  所谓前端,简单来说,就是用户看到的用户交互界面和各种数据的展示。而后端,则是具体业务逻辑的实现和数据的持久存储。
  以用户注册为例,用户能够直接接触到的只有一些可以输入用户名和密码等个人信息的输入框以及一个提交注册请求的按钮,这些看得见摸得着的就是前端;而在用户提交请求后,需要判断用户提交的数据是否符合要求,如果符合要求則将提交数据写入数据库,这些用户无法直接接触到的处理过程便是后端。
  如果单从客户端-服务器这种主从式架构(client- server model)考虑,客户端可以被宽泛地理解为与前端开发对应,而服务端也相应地的与后端开发对应。
  因此,理想的前后端开发理应与主从式架构保持高度的一致和统一。即,前端只负责客户端的用户界面,后端只负责在服务端提供服务。客户端向服务端提交调用某种服务的请求,服务端就做出响应并将结果返回给客户端。   然而,在传统的实际开发过程中,比如经典的MVC(模型-视图-控制器)模式,前后端的业务很难被彻底分开,导致前后端业务揉杂在一起,大大影响开发效率。
  2000年,Roy Fielding在其博士论文中提出了REST(REpresentational State Transfer,表述性状态转移)的概念[8],即网络资源在某种表现形式下实现状态变化。网络资源,指的是存储在服务器中的信息资源,一般使用地址加复数名词的形式来表示,比如http://api.test.com/users就表示了该地址(http://api.test. com/)下的所有用户资源。
  至于某种表现形式,无论是客户端到服务端,还是服务端到客户端,都使用JSON格式来呈现。
  而该资源的状态变化则由作为动词的http请求方法(GET、POST、PATCH、DELETE)决定。具体例子如表1所示。
  于是,在后端只需准备好各种类似设计的接口,每当客户端的请求方法和请求URI发过来,就调用符合该请求的接口,返回相应的状态码和以JSON格式承载的响应体就可以了。这类符合REST设计风格的程序接口就可以称为RESTful API。
  基于RESTful API,前、后端在开发过程中就可以实现彻底分离:后端只实现API接口,前端只专注于设计用户界面。如此一来,不仅实现了开发者的职责分离,也实现了前后端技术上的分离。
  2  CAD最简模型
  后端的開发工作除了API接口外,还需涉及数据的永久性存储。在数据库设计过程中,往往需要先将与产品相关的,一切现实或观念上的物体通过抽象建模,化作数据库中的实体(entity),亦即RESTful API中以名词复数表示的网络资源,例如,将用户相关信息抽象化作users。而针对数据库实体的基本操作,又无外乎CRUD(Create、Read、Update、Delete),即增、查、改、删四个动词,这又恰恰与四种http请求方法POST、GET、PATCH、DELETE一一对应。这就使得数据库与API接口完美有机地结合在一起。比如,客户端使用POST方法调用/api/users接口,就在数据库中新增一个用户,使用GET方法调用/api/users接口,则返回用户信息。
  本文将这种仅使用POST、GET、PATCH、DELETE四种http请求方法的前后端分离架构模型称为CAD(即Client-API-Database)最简模型,该模型结构如图1所示。
  于是,后端方面的工作可进一步描述为:实现对数据库增改查删的RESTful API接口。服务器在接受用户请求时,倘若找到匹配该请求的接口,则允许客户端调用。对应不同的请求方法,针对数据库资源也采取不同的操作方式。操作过后,将响应结果以JSON格式返回给客户端。这就彻底实现了客户端http请求、API接口与数据库操作三者的高度统一。如表2所示。
  3  DASP设计模式
  因此,高效的设计过程理应与此基本模型保持高度一致。即,①对现实问题建模,完成数据库(Database)的设计;②基于①,完成接口(API)的设计;③基于②,完成产品结构(Structure)设计;④基于③,完成产品原型(Prototype)设计,将产品结构视觉化为UI。本文将这种设计模式称为DASP设计模式。
  3.1  数据库设计(Database)
  所谓数据库设计就是基于产品分析,从中提炼出数据实体、相关属性以及相互关系。这可以通过ER图(Entity Relationship Diagram),即实体-联系图来实现。
  ER图由三个要素构成,分别是实体、属性和联系。
  实体就是在人的认知上能够相互区分的事物,这个事物可以是现实中的具体事物,也可以是抽象上的概念。在ER图中使用矩形框表示。
  属性是实体的特性,也是实体所具备的,可以用数据进行刻画的方面。在ER图中使用椭圆形表示,主属性名下还需要加上下划线。
  联系表示实体之间的关系,也就是以何种方式关联在一起。在ER图中以菱形表示,菱形两边需要通过连线将相关实体连接起来。除此之外,连线上还要标注出实体关联的模式:一对一(1∶1)、一对多(1∶N)还是多对多(M∶N)。
  3.2  接口设计(API)
  在完成ER图后,就可以进行接口设计了,目的是结合用例图中的用例以及ER图中的实体与属性设计出清晰合理的RESTful API接口。API接口将用户的一次次请求尽数化作对数据库的增改查删,是连接需求与信息之间的桥梁。
  基于RESTful API标准,将产品的每个用例(即用户实际可做出的行为)都封装成一个API,规定请求方法和请求URI:请求方法为POST、GET、PATCH、DELETE其中之一,分别对应对数据的增查改删。
  在这个阶段尚无须考虑实际业务逻辑的具体实现,只需要设计好输入与输出就可以了。对API来说,输入就是用户从客户端向服务器发出的请求,输出就是服务器向客户端返回的响应。其中,无论请求体还是响应体都以JSON格式承载。
  3.3  结构设计(Structure)
  结构设计就是以产品的视觉结构为导向,将产品的构造逐级逐层细分,并确定UI要素与API接口的对应关系,以实现视觉要素与产品功能的协调统一。
  设计结构图,首先要从产品的基本模块(或频道)出发,确定好产品的模块构成,作为结构的第一层。
  每个模块又可能由多个页面构成。所以在第二层,就要具体设计出每个模块所包含的页面。
  到了第三层,需要将页面再细分为构成元素,这也是日后进行UI组件化开发的基础。   第四层就是调用层,这是连接UI与API的层,也是真正实现产品功能,即用户需求的层。在这一层中所调用的API一定要严格遵循3.2的接口设计,并确保无遗漏。
  3.4  原型设计(Prototype)
  所谓原型,就是以图形化的方式表现的产品框架。它可以以一种极为直观的方式展现出成品的样态。既能够在实际投入开发前得到客户的意见反馈、降低返工风险,又是连接产品设计和实际开发的过渡阶段,起到重要的承上启下的作用。
  在3.3中完成的产品结构图是原型设计的重要参照依据。原型设计的过程也可以看作是将产品结构图彻底视觉化的过程。
  4  设计实例分析
  4.1  产品概要
  本文以一个BBS(电子留言板)为例,基于上述DASP设计模式的原则,详细阐述其设计流程。
  BBS的基本功能是解决用户在线上围绕某个话题的基本沟通需求。本例中将产品的使用者分为两种,一种是未登陆的游客,一种是已经登陆后的实际用户。二者都有权浏览BBS的帖子,包含帖子列表以及具体的帖子信息。
  除了浏览帖子这个共同行为外,游客可以注册或登陆,以转化为用户身份。用户则可以通过退出登陆而转化为游客。在用户处于登陆状态时,还可以对用户自身信息做出修改或是针对某个特定帖子进行操作。
  根据上述描述将该产品的用例图描绘出来的话,如图2所示。
  用例图根据用户想做什么而描述了利用产品能做什么,作为结果,也就初步规定了产品在功能上会有什么。既明确了数据库设计中的实体及关系,也为API接口提供了直接的设计依据。
  4.2  BBS案例的数据库设计
  在BBS例子里,用户、帖子和回复就可以看作是实体,在数据库中将对应一个个表。而用户的ID,帖子的内容,回复的发表时间就都是属性,在数据库中将对应表的列,也就是“字段”。一个帖子允许有多个用户回复,这就说明帖子与回复的关系是1:N模式。
  综合以上规则将BBS项目数据化并用ER图表现出来,效果如图3所示。同时,为了方便實际开发过程中的数据建模,也可以用英文标出将来会实际使用的实体名和属性名,其中,实体名首字母要大写,属性名保持小写。
  4.3  BBS案例的接口设计
  在产品用例图(图2)中,每一个椭圆上的文字都是动词或动宾短语构成,各自对应一个用户行为实例,动词方面,都可以看作是对数据库的增查改删操作,名词则可以看作“表述性状态转移”中的网络资源。将二者结合后,可直接转化为符合RESTful API接口规范的设计。
  这个列表可以为日后的接口开发工作提供实际参照标准。
  4.4  BBS案例的结构设计
  在3.3中所述的四个层次,可作为结构图的横轴。而产品本身的模块,可作为结构图的纵轴。
  BBS系统,在结构图的第一层,即模块层来看,大致可划分为三:首页、帖子和个人中心,在导航栏中自由切换。
  每个模块在第二层中又可细化为多个页面,比如帖子模块,就需要一个浏览帖子列表的页面,单击其中的某个帖子后,再进到该帖子内容的页面。这两个页面都和帖子相关,所以归在同一个模块里。
  在第三层中,每个页面又由多个页面元素构成,比如帖子列表页面中,既要包含一个用来浏览的列表,也要包含一个发布帖子的表单。这个列表和表单可以作为组件任务分派给不同的人去实现,最后由项目的负责人组装到一个页面中。
  第四层则基于4.3所设计的API接口列表,决定各页面元素所实际调用的接口。最终完成的产品结构图如图4所示。
  4.5  BBS案例的原型设计
  原型设计方面可以通过手绘,也可以使用现成的原型设计工具。其中,使用范围最广的,也最受产品经理所青睐的工具是Axure(官网:https://www.axure. com/),这是一款收费软件。要找免费替代品的话,有国产的墨刀(官网:https://modao.cc/)和摹客(官网:https://www.mockplus.cn/):墨刀一般使用网页版,属于在线原型设计工具;而摹客(Mockplus)则是离线的桌面端软件。两者都是基础功能免费,高级功能收费。
  在4.4中所完成的产品结构图(图4),本就是以视觉结构为导向,将产品构造逐级细分得到的。因此,产品结构图天然蕴含着原型化的基因。在原型设计过程中,也要严格遵循结构图中所确定的组件结构乃至命名规范,为日后无缝过渡到UI开发打好基础。
  以摹客为例,在完成原型设计后,单击左上树状图中的【脑图编辑模式】按钮,可显示脑图如图5。其构造与结构图完全一致。
  5  结语
  本文以前后端分离架构为前提,以高效率设计为导向,提出了仅由客户端、API接口和数据库三部分构成、且仅使用POST、GET、PATCH、DELETE四种http请求方法的CAD最简模型。
  在这个最简模型中,用户的所有行为都简化作四种http请求,分别对应针对数据的增查改删,这在保证开发工作权责明确的同时,又实现了设计工作的高度统一。
  基于CAD最简模型,本文进而提出了DASP设计模式:即①基于产品用例图首先完成数据库方面的ER图设计,明确数据存储的实体、属性及联系;②基于产品用例图和ER图,完成API接口设计,架起前端与后端,或者说,客户行为与数据操作之间的桥梁;③基于产品构成,逐步按照四个层次:模块层、页面层、元素层和调用层,不断细化、具体化,以完成产品的结构图,实现视觉要素与产品功能的统一;④基于产品结构图,将其视觉化的要素彻底组织、布局并成形,以完成原型设计。
  本文还以一个BBS(电子留言板)为例,详细阐述了该DASP模式的具体设计流程。这个设计流程不仅因与CAD最小模型高度一致而实现了设计高效,也从客户端、接口、数据库这三个方面具体且详细地规定了产品的规格,为之后的实际开发工作打下坚实的基础。
  参考文献
  [1] 任中方, 张华, 闫明松, 等. MVC模式研究的综述[J]. 计算机应用研究, 2004(10): 1-4+8.
  [2] 韩凌波. 基于mvc架构的普法考试系统设计与实现[J]. 软件, 2015, 36(3): 132-134.
  [3] 许戈, 郑广成. 基于NET MVC 的高职科技项目经费报销系统设计与实现[J]. 软件, 2015, 36(10): 36-39.
  [4] 姚云飞, 杜洪波, 梁建辉. 基于 SpringMVC 框架毕业设计管理系统设计[J]. 软件, 2018, 39(01): 91-93.
  [5] 汤明伟, 郑柳娟. 基于 MVC 的响应式餐饮业工服供应链分销平台的设计与实现[J]. 软件, 2018, 39(3): 160-165.
  [6] 黎永良, 崔杜武. MVC设计模式的改进与应用[J]. 计算机工程, 2005(09): 96-97+212.
  [7] 刘红霞, 陆文迪. 改进的MVC设计模式的研究与应用[J]. 计算机工程与科学, 2015, 37(09): 1688-1691.
  [8] Fielding RT. Architectural styles and the design of network-based software architectures. 2000. University of California, Irvine. 2000: 162.
  [9] 林嘉婷. 试谈前后端分离及基于前端MVC框架的开发[J]. 电脑编程技巧与维护, 2016(23): 5-8.
  [10] 李宇, 刘彬. 前后端分离框架在软件设计中的应用[J]. 无线互联科技, 2018, 15(17): 41-42.
  [11] 张鹏飞, 王乾, 胡晓冬, 等. 基于Node. js和JS的前后端分离实现[J]. 软件, 2019, 40(04): 11-17.
其他文献
摘 要: 为了实现多管相交时切割线的参数化设计,采用几何法和三维坐标变换的思想,对每一根管表面展开的给出了与其他管相交的展开及相贯线算法的参数公式和开发步骤,开发出了多通管件立体图及圆柱表面展开图的绘图命令;该命令由基于参数化绘图方法的Lisp程序和基本尺寸参数输入实现,同时列出了需要输入的基本尺寸参数。  关键词: 参数化;坐标变换;相贯曲线;算法;多通管件  中图分类号: TP391.41
期刊
摘 要: 隨着科技的日趋发展,智能化产品随处可见,极大地方便了人们的生产生活。在一些综合超市,大型购物商场等一些公共场合,由于人流大,购物的人多,仅靠人工来存储物品速度慢,效率低,是远远不能满足要求的,所以就需要自动存储柜来存取物品,以达到更方便、更快捷的目的。但传统的电子存储柜由于价格等因素,只出现在一些大型超市等场合,在其它公共场合并没有得到广泛的应用。  关键词: 自动存储柜;单片机;随机密
期刊
摘 要: 金属件广泛应用于各行各业,螺纹是金属件之间最常见的连接形式,外螺纹测量是金属件接头加工完成后质量检测的重要内容。目前,大部分外螺纹参数测量方法对于检测设备及检测環境的要求较高,无法在常规环境下进行螺纹测量。本文描述了一种基于单目视觉的三维重建方法,利用标定件对智能手机进行标定后,在常规环境下随时随地就可测量任何物品,提高了测量的便捷性。本文选择螺丝作为测量对象,用智能手机对螺纹外径、螺距
期刊
摘 要: 工业园区用户能源需求种类多样,用能量大,是未来多能互补、能源互联网建设的重要落脚点之一。其中,新建工业园区因产权清晰、责权明确而成为投资方的关注热点。但是,如何合理配置园区供能设施,从而保证在入驻企业用能不确定性的情况下的投资收益,是困扰投资方的一项难题。本文考虑园区三类典型入驻企业用能特征,建立以投资收益最大化为目标的园区“源-储”鲁棒优化配置模型,保证投资收益。首先,基于数据搜集整理
期刊
摘 要: 由于新冠肺炎疫情的影响,高校师生无法开展课堂教学,因此很多学校利用多种互联网+平台积极开展线上教学,互联网+互动教学也成为各大高校信息化教学的主要方式。本科课程“面向对象程序设计B”是针对大三本科生开设,主要侧重于编程基本技能训练和面向对象概念讲授的重点课程。然而在在线教学过程中,教师们会遇到诸如无法面对面高效与学生互动、代码展示不便或复杂概念无法有效解释等问题。因此本论文将重点对互联网
期刊
摘 要: 本文基于Funcode平台,以“小小饥饿鲨”游戏为例,研究儿童益智类游戏的设计与开发方法。代码采用了C++面向对象程序设计方法,结合平台提供的事件处理函数实现游戏的功能,游戏中玩家通过不断吃掉指定类型的鱼来获得相应的生命值,并且在获得相应数量的生命值后不断升级。  关键词: Funcode平台;游戏开发;软件设计;儿童益智  中图分类号: TP3 文獻标识码: A DOI:10.39
期刊
摘 要: 为了使大地坐标系满足卫星和航天器以及大地控制点的需要,本文通过QT软件编制出一种能将CGCS2000坐标系与地心参心坐标系相互转换的程序。首先将CGCS2000大地坐标系转化为空间直角坐标系,再通过七参数转换将空间直角坐标系转化为目标坐标系的空间直角坐标系,最后将目标的空间直角坐标系转化为目标的大地坐标系。运用程序进行批量计算与检验,精度满足要求并提高了坐标系的转换效率。  关键词: 地
期刊
摘 要: 在抗击新冠疫情的背景下,如何选用神经网络模型高效、快速地检测人的面部是否佩戴口罩成为技术热点。在实际人脸口罩检测场景中,要求模型能够尽可能快地输出判别结果。本文针对目前几种主要的轻量级检测模型:PyramidBox-Lite模型、基于SSD算法的Keras模型和基于CenterFace的口罩检测模型,在不同的数据集下做综合测试,并利用单帧图像处理速度、检测分类正确率两种指标对各种方法的性
期刊
摘 要: 构建基于企业微信的医学院校实习生管理教育平台,有助于医学院校加强和改进实习生的教育管理模式,提高实习生的思想教育实效,促进医学院校的学生教育管理信息化。通过应用企业微信的第三方开发模块功能,实现基于企业微信的实习生管理与教育平台的构建。  关键词: 企业微信;实习生;管理与教育平台  中图分类号: G434;TP39 文献标识码: A DOI:10.3969/j.issn.1003-
期刊
摘 要: 中國饮食文化经过数千年的发展,形成了以汉族饮食为主流的民族特色,蕴含着多样的文化内涵。为了充分了解饮食文化的各个方面,利用GIS的空间信息管理功能、SSM框架集、MySQL数据库等关键技术,将其引入饮食文化数字化建设中,设计建立中国饮食文化信息数据库,实现对中国饮食文化基本情况的空间分布和时空演变的展示。该系统同时能提供对中国饮食文化信息的存储管理、检查查询和统计分析等功能。从地理空间视
期刊