团 队 作 业 ———— 系 统 设 计

Part 0 · 简 要 目 录

Part 1 · 完 善 需 求 规 格 说 明 书
Part 2 · 团 队 编 码 规 范
Part 3 · 数 据 库 设 计
Part 4 · 后 端 架 构 设 计
Part 5 · 团 队 分 工
Part 6 · 工 作 量 比 例


Part 1 · 完 善 需 求 规 格 说 明 书

(1)初 稿 不 足

缺 少 部 分

  • 用例图

  • 部分原型设计

  • Beta版本功能

(2)文 件 链 接

M D 文 件 链 接《Software Requirements Specification.md》

PDF 文 件 链 接《Software Requirements Specification.pdf》

Part 2 · 团 队 编 码 规 范

(1)文 件 格 式

文 件 格 式: UTF-8 带签名。

文 件 路 径: 确保文件路径无中文,无论是本地还是 Github !

文 件 操 作: 不要使用 Windows Notepad 编辑任何文本文件!

(2)代 码 规 范

代码规范遵循 CodeIgniter 框架官方代码规范:《CodeIgniter PHP 开发规范》,此处不再赘述。

(3)接 口 相 关

接口返回格式

返回类型为一个 json数组

成员 中文 类型 备注
type 结果 数字 1成功,0失败
message 消息 字符串 失败时:存一条错误信息
data 数据 字符串数组 返回数据

接口名设计约定

  • 新增一条记录:register
    eg. 新增用户:.../User/register

  • 获取记录:get
    • url字段 带参为按主键查询】
      eg. 查询用户名为 hs97 的信息:.../User/get/hs97

    • url字段 不带参为查询批量资源】
      eg. 获取某个用户训练记录:.../User_training/get

  • 修改记录-部分项:update
    • 只允许提供 主键 修改
    • 且都需要判定持有 Utoken 的用户是否有修改的权限
      eg. 修改某条训练记录:.../User_training/update
  • 删除记录:delete
    • 只允许提供 主键 删除
    • 且都需要判定持有 Utoken 的用户是否有删除的权限
      eg. 删除某条训练记录:.../User_training/delete

Part 3 · 数 据 库 设 计

(1)数 据 库 设 计 图

(2)E-R 图


Part 4 · 后 端 架 构 设 计

(1)架 构 综 述

前后端分离开发,在开发期间前后端通过共同商定好数据接口的交互形式和数据格式(Json)进行交流。

(2)前 端 开 发

1)Vue.js(MVVM)
MVVMModel-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对 ViewViewModel 的双向数据绑定,这使得 ViewModel 的状态改变可以自动传递给 View,即所谓的数据双向绑定。

MVVMModelViewViewModel 三部分构成, Model 层代表数据模型,也可以在 Model 中定义数据修改和操作的业务逻辑; View 代表 UI 组件,它负责将数据模型转化成 UI 展现出来, ViewModel 是一个同步 ViewModel 的对象。

MVVM 架构下, ViewModel 之间并没有直接的联系,而是通过 ViewModel 进行交互, ModelViewModel 之间的交互是双向的, 因此 View 数据的变化会同步到 Model 中,而 Model 数据的变化也会立即反应到 View 上。

ViewModel 通过双向数据绑定把 View 层和 Model 层连接了起来,而 ViewModel 之间的同步工作完全是自动的,无需人为干涉,因此开发者只需关注业务逻辑,不需要关注数据状态的同步问题,复杂的数据状态维护完全由 MVVM 来统一管理。

Vue.js 是一个提供了 MVVM 风格的双向数据绑定的 Javascript 库,专注于 View 层。它的核心是 MVVM 中的 VM ,也就是 ViewModel

ViewModel 负责连接 ViewModel ,保证视图和数据的一致性,这种轻量级的架构让前端开发更加高效、便捷。

2)Webpack

WebPack 可以看做是模块打包机:它做的事情是,分析你的项目结构,找到 JavaScript 模块以及其它的一些浏览器不能直接运行的拓展语言,并将其转换和打包为合适的格式供浏览器使用。

Webpack 工作流程图:

3)Daocloud+Docker

我们希望能在代码提交后,有个远程服务能自动开始构建项目、拉取相应的镜像,执行对应的 Dockerfile 命令,最终给我们生成一个可以直接启动的 Contrainer 容器,之后我们就可以将该容器发布到任何主机了。使用 DaoCloud 持续构建 Docker 镜像,实现自动化部署。

(3)后 端 开 发

使用 CodeIgniter 3.0 框架,主要基于 MVC(模型-视图-控制器)模式进行开发。

MVC 是一种 用于将应用程序的逻辑层和表现层分离出来的软件方法。

Model(模型): 代表你的数据结构。通常来说,模型类将包含帮助你对数据库进行增删改查的方法。

View(视图): 是要展现给用户的信息。一个视图通常就是一个网页,但是在 CodeIgniter 中, 一个视图也可以是一部分页面(例如页头、页尾),它也可以是一个 RSS 页面, 或其他任何类型的页面。

Controller(控制器) 是模型、视图以及其他任何处理 HTTP 请求所必须的资源之间的中介,并生成网页。

由于使用前后端分离开发,不使用 MVC 模式中的 View 进行前端开发。由 Controller 将数据返回供前端调用。

(4)控 制 器 框 架

  • 控 制 器 框 架 图:仅列出已完成接口设计的部分。

(5)关 于 前 后 端 分 离

在传统的 web 应用开发中,一般将浏览器中为用户进行页面展示的部分称之为前端,而将运行在服务器,为前端提供业务逻辑和数据准备的所有代码统称为后端。

前后端分离大概可以从四个方面来理解:

  • 交 互 形 式:在前后端分离架构中,后端只需要负责按照约定的数据格式向前端提供可调用的 API 服务即可。前后端之间通过Json数据进行交互,前端获取到数据后,进行页面的组装和渲染,最终返回给浏览器。

  • 代 码 组 织 方 式:分离组织:前后端代码库分离,支持前后端的独立开发和测试。而后端代码中除了功能实现外,还有着详细的测试用例,方便前端调用时进行参考。

  • 开 发 模 式:实现前后端分离架构之后,前端工程师只需要编写 HTML、js、CSS 等前端资源,然后调用后端提供的 API 服务即可。除了开发期的分离,在运行期前后端资源也会进行分离部署。开发流程图如下:

    通过上面的流程图,不难发现,在开发模式上,前后端分离不仅仅只是团队队员的分工开发,更重要的意义在于实现了前后端的并行开发,简化了开发流程。

  • 数 据 接 口 规 范 流 程:在开发期间前后端共同商定好数据接口的交互形式和数据格式(Json)。然后实现前后端的并行开发,其中前端工程师再开发完成之后可以独自进行 mock 测试,而后端也可以使用接口测试平台(Insomnia)进行接口自测,然后前后端一起进行功能联调并校验格式,最终进行自动化测试。

(6)分 离 开 发 的 优 势

  • 提 升 开 发 效 率
    前后端分离以后,可以实现前后端代码的解耦,只要前后端沟通约定好应用所需接口以及接口参数,便可以开始并行开发,无需等待对方的开发工作结束。与此同时,即使需求发生变更,只要接口与数据格式不变,后端开发人员就不需要修改代码,只要前端进行变动即可。如此一来整个应用的开发效率必然会有质的提升。

  • 增 强 代 码 可 维 护 性
    前后端分离后,应用的代码不再是前后端混合,只有在运行期才会有调用依赖关系。
    应用代码将会变得整洁清晰,不论是代码阅读还是代码维护都会比以前轻松。


Part 5 · 团 队 分 工

(1)Alpha 版 本 功 能

  • 大 厅 模 块:包含资讯、串门两个模块

    • 帮助队员了解圈内的最新信息、动态

    • 获取近期的赛事

    • 好友交互

  • 个 人 模 块:包含信息、记录及动态三个模块

    • 用户信息管理

    • 记录个人及团队的训练记录,训练总结

    • 信息交互

  • 标 签 系 统:包含标签库、博客标签、题目标签三个模块

    • 博客及题目标签生成

(2)WBS

  • WBS 图

(3)Issues

  • 已 完 成 的 Issues

  • 未 完 成 的 Issues

  • 里 程 碑

(4)TODOList

周数 工作时间 负责人员 工作内容
7 10.23 ~ 10.29 205 平台环境搭建、UI设计、初步架构搭建
442 编码规范的完成、需求规格说明书终版
8 10.30 ~ 11.05 205、442 UI设计改进、架构设计、测试计划
后端成员 接口文档编写、数据库设计
9-10 11.06 ~ 11.16 442 组织每日站立式会议
- MVP框架的搭建
442 维基 [包含训练记录及训练总结] 设计与实现
443 博客模块设计及博文编辑功能的实现
430 实现博文增加及删除功能
248 实现博文列表获取
123 题量爬取
430 标签系统数据库设计及获取标签功能的实现
443 标签的实现、关联博客系统中的博文
442 代码审核、测试、签入
全员 Alpha版本发布
10 11.16 ~ 11.19 248 收集用户试用反馈
442 测试计划改进
全员 项目完善
11 11.19 ~ 11.26 442 组织站立式会议
123 服务器、客户端测试
443、430 项目推进
248 项目推进
12 11.26 ~ 12.03 全员 正式版本完善
205 相关测试
全员 用户手册设计及撰写
13 12.03 ~ 12.10 全员 正式版本发布
442 撰写宣传推广文案

(5)燃 尽 图

  • WonderLand 燃 尽 图

Part · 6 工 作 量 比 例

总和 郑浩晖 吴海林 郑书豪
100 30 35 35

参 考 文 章

《前后端分离实践(一)》
《Vue.js 和 MVVM 小细节》
《入门Webpack,看这篇就够了》

【项目 · WonderLand】 系 统 设 计的更多相关文章

  1. 【项目 · Wonderland】立项报告

    [软件工程实践 · 团队项目] 第二次作业 团 队 作 业 原 文:http://www.cnblogs.com/andwho/p/7598662.html Part 0 · 简 要 目 录 Part ...

  2. 【项目 · Wonderland】需求规格说明书 · 终版

    [项目 · Wonderland]需求规格说明书 · 终版 Part 0 · 简 要 目 录 Part 1 · 流 程 / 分 工 Part 2 · 需 求 规 格 说 明 书 Part 1 · 流 ...

  3. WinCE项目应用之RM905a+活度计远程检定方法研究

    前文<RM905a+医用放射性核素活度计>中已经提到,基于WinCE5.0系统的RM905a+可以很方便的实现远程界面显示和控制.所以远程检定的主要工作在于服务器端的业务部分.基于< ...

  4. 【项目 · Wonderland】预则立 && 他山之石

    [软 工 实 践 · 团 队 作 业] 预则立&&他山之石 标签:WonderLand Part 0 · 简要目录 Part 1 · 团队计划 Part 2 · 团队访谈 Part 3 ...

  5. 系​统​吞​吐​量​(​T​P​S​)​、​用​户​并​发​量​、​性​能​测​试、IO负载学习

    目录 . 如何评价一个系统的性能 . 系统吞度量 . 网络上下行数据量 . 客户端-服务端TCP同时长连接数量 . 系统性能的指标计算 . 系统IO负载 1. 如何评价一个系统的性能 在文章的开始,我 ...

  6. 【项目 · Wonderland】会议一 · 可达鸭

    [软件工程实践 · 团队项目] 第一次作业 Part 0 · 简 要 目 录 Part 1 · 队 伍 阵 容 Part 2 · 会 议 记 录 相 关 Part 3 · 会 议 讨 论 记 录 Pa ...

  7. 如​何​使​用​P​H​P​开​发​高​效​的​W​E​B​系​统

    PHP是一个非常优秀的工具,它能够简单,也能够复杂.不一样的项目,应该用不一样的PHP.  小项目 - 简单而直接的PHP 一般对于一个功能页面在20下面的站点.我们能够用一个非常easy的框架结构来 ...

  8. E​F​I​主​板​和​G​P​T​分​区​表​安​装​系​统以及转换GPT分区表的方法

    现在硬盘越来越大,而原来的MBR分区方式,超过2T的硬盘就会识别不全,只有使用GPT的方式才可以,但是GPT如果用原来的BIOS是无法引导装系统了,不过如果你的主板支持EFI,那么可以用GPT+EFI ...

  9. 执行PowerShell脚本的时候出现"在此系 统上禁止运行脚本"错误

    使用get-executionpolicy查看当前的脚本执行策略, 默认是Restricted, 也就是不允许任何脚本运行. 此时应该使用set-executionpolicy remotesigne ...

随机推荐

  1. ClickHouse之初步认识

    最近在Percona的blog上看到一篇文章:Column Store Database Benchmarks: MariaDB ColumnStore vs. Clickhouse vs. Apac ...

  2. Java并发编程笔记之基础总结(一)

    一.线程概念 说到线程就必须要提一下进程,因为线程是进程中的一个实体,线程本身是不会独立存在的.进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,线程则是进程的一个执行路径,一 ...

  3. 深入理解L1、L2正则化

    过节福利,我们来深入理解下L1与L2正则化. 1 正则化的概念 正则化(Regularization) 是机器学习中对原始损失函数引入额外信息,以便防止过拟合和提高模型泛化性能的一类方法的统称.也就是 ...

  4. snmp自定义OID与文件下载----服务器端配置

    客户端使用命令工具:snmpwalk 服务端开启服务 snmp service.下载安装 net-snmp. 最近做了一些工作,记性较差感觉还是记下来比较好,毕竟网上能查到的有用的资料太少了. 自定义 ...

  5. 安装searchd

    把安装包解压到 D:coreseek 创建表 create table product( id int key auto_increment, title ), content text ); ins ...

  6. Hyperledger Fabric密码模块系列之BCCSP(一)

    Fabric作为IBM主导的区块链平台,可谓是联盟链中的一枝独秀,现如今已经有100多个大型国际银行.金融以及科技公司的加盟.与其说Fabric是区块链的一种平台,倒不如说是一个区块链框架更加精确,因 ...

  7. SPI Flash(W25Q16DV) 驱动

    大体上可分为以下几个部分: 1.注册设备驱动 spi_register_driver 2.分配 mtd_info 结构体 3.配置 mtd_info 结构体 4.注册 mtd_info 结构体 构建 ...

  8. C++ 重载运算符简单举例

    我们可以重定义或重载大部分 C++ 内置的运算符.这样,就能使用自定义类型的运算符. 重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的.与其他函数一 ...

  9. asp.net mvc5轻松实现插件式开发

    在研究Nopcommece项目代码的时候,发现Nop.Admin是作为独立项目开发的,但是部署的时候却是合在一起的,感觉挺好 这里把他这个部分单独抽离出来, 主要关键点: 确保你的项目是MVC5 而不 ...

  10. 关于 IdentityServer 部署到生产环境相关问题踩坑记录

    Idsr 定义了几种模式适用于不同的场景: // // 摘要: // OpenID Connect flows. public enum Flows { // // 摘要: // authorizat ...