软工团队 - 系统设计

软工团队 - 系统设计


修改完善需求规格说明书

针对栋哥在上周答辩中主要提到问题的相应改动

  1. 管理员层面没有在需求中得到很好的体现。
  2. 没有手机号验证。

那时候回答的比较含糊orz,所以在这里说明一下对此作出的解释和修改。

  1. 对于第一点,我们讨论的结果是至少在这学期先摒弃掉管理员这个需求。因为在我们这个项目里面对于管理员的需求其实相当少的,管理员做的唯一事情就是审核被举报的不良分享,起到的作用是维护分享内容的优质性,但是这首先是建立在用户群体达到一定数量之后才需要考虑的问题,而在用户群体较小的初期有垃圾过滤基本上已经足够了。至少在这学期中只打算先形成一个用户类型唯一MVP。对此做出的改动是在需求文档中把管理员相关的在验收标准中彻底去掉了。

  2. 对于第二点,一开始我们是不想强迫实名的,但是没考虑到现在上线产品的要求必须要实名....但是至少在这学期还是先不考虑,因为光是发手机验证啊等等又一堆事,这是上线前才需要做的事情。做出的改动是在类图和数据库设计里把手机号这一条属性加上去了,但也仅是加上个名号,留个坑后面填。

验收标准的改动

24号座谈会之后听取了邹老师的建议把实现关键字匹配算法放在首要位置。做出的改动是在Alpha阶段必须让Android端核心dev(1人)在完成框架后就先专心去把算法先实现出来,确保在Beta能投入使用,而把各界面模块等的实现交给其他dev(3人)完成。而Beta阶段只完成进一步算法改善(安卓端关键字匹配算法的优化、服务器端垃圾过滤算法),而延后应用锁等零零碎碎的其他辅助需求。

对需求规格说明书的上述改动已签入github。

886183-20171028000601133-1111098707.png


团队编码规范

因为团队成员基本没有充分的编码经历,所以选择了大量借鉴其他经典规范。

Android代码规范

选择了github上一份star和fork数较多的一份规范。原因是在比对了谷歌在安卓方面给出的《面向贡献者的代码样式指南》后,发现这份代码规范基本都有涉及,并且增添了更详细的规范要求,而其中增加的一些规范要求与《阿里巴巴Java开发手册》中的一些要求不谋而合。并在这些基础上,询问了已经实习的安卓岗学长,根据他的建议更改了一些内容。

(文档链接:Android编码规范

PHP代码规范

选择了由 PHPHub 社区翻译的 PSR 标准,PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准。我们根据翻译的多篇文档,选取了 PSR-1 基础编码规范、PSR-2 编码风格规范、PSR-4 自动加载规范作为适用于本项目开发的 PHP 规范。

(文档链接:PHP编码规范

这几天我们会再开一次小会具体探讨是否需要进一步增改。(10.30已完成)

Github使用规范

https://www.zybuluo.com/thousfeet/note/933363


数据库设计

(数据库设计规范:https://www.biaodianfu.com/mysql-best-practices.html)

Android本地数据库

Android 端的数据库使用 WorkBench 设计。

886183-20171029133413508-854172383.png

服务器数据库

服务器端的数据库使用 WWW SQL Designer 和 Navicat 设计。

886183-20171027234926492-314424888.png

虽然两张图长得并不像是个数据库课上那样的ER图,但其中的各实体、属性、关系也已经体现出来,就不再去画那种又大张排版又很丑的传统ER图了。


架构设计

(大图地址)

886183-20171027231028273-390549307.png

Android端

整个安卓端采用MVP架构。

View对应于Activity,负责View的绘制以及与用户交互(根据原型设计,里面有五个Fragment),Model则是负责业务逻辑与实体模型(存储、检索、操作数据),Presenter负责完成View和Model的交互。Model层中的Data Repository用来对Presenter层屏蔽数据细节。ViewInterface是需要View实现的接口、PresenterInterface则是Presenter需要实现的接口(二者都是为了降低耦合度)。OkHttp3和Retrofit2是网络通信库,用来与服务器端进行通信,FastJson用来处理服务器传输过来的Json包,LitaPal是一个采用ORM(对象关系映射)的数据库框架,处理数据的存储。

服务器端

面向 Android 端,服务器端使用了 RESTful API 的风格。采用 PHP 时下流行的 Laravel 5.5 框架,同时采用了 MySQL 数据库和 Nginx 提供 Web 服务。

Laravel 框架使用 MVC 模型架构,但由于我们的 View 是存在于 Android 端中的,所以服务端只需要 Model、Controller 和 Router 层。

参考了学长的Laravel 设计架构,我们得出以下的设计细节。

Router 层承担了 API 接口的功能,在 Android 端和服务器端间传递错误代码、具体内容。

Model 层定义了我们需要操控的 User、Note、Article 等模型,以供 Controller 操作,实际上的模型存在于数据库中。

Controller 层包含了 AuthController、UserController、NoteController、ArticleController 这几个主要的控制器。

AuthController 进行验证用户登录等授权操作。

UserController 进行修改用户信息、管理用户等操作。

NoteController 管理记录,实现分享逻辑等等。

ArticleController 进行抓取文章、推荐文章的相关操作,包含大量核心代码。

在数据存储方面,由于我们有图片和语音等体积大的多媒体文件,因此我们选取七牛云进行对象存储。七牛云是流行的对象云存储服务,有较大的免费额度和丰富的 Android、PHP API。当 Android 端需要存储多媒体文件时,通过 API 向服务器申请上传权限,服务器通过验证后返回上传凭证。Android 使用上传凭证向七牛云上传文件,七牛云返回上传结果。服务器向七牛云发起回调,七牛云返回回调结果。这样就解决了服务器带宽和存储容量小,又有大量大体积多媒体文件需要上传的难题。

在数据库和数据操作方面,使用 Eloquent ORM,封装对数据的处理和与数据库的交互,封装其外键关系。为防止 SQL 注入的发生,杜绝使用原生的 SQL 查询,使用 ORM 和 Laravel 提供的链式查询机制,让框架编译 SQL 语言进行查询,既保证了开发效率又提高了安全性。

日志记录方面,将服务器的操作和发生的异常都记录在日志文件中,以备日后检索。

考虑到迭代和解耦,将自定义的全局变量、自定义的辅助方法等,都定义在应用的服务提供者文件中,这样会加载到全局。

(具体业务逻辑表已更新)


确定团队分工

需求四象限及各阶段计划

886183-20171028001158226-181819365.png

WBS图

(标红旗的是重点任务)

886183-20171027231100664-1441756092.png

部分issue截图

(最右侧的数字tag是工作量,需要在安装github插件ZenHub下查看)

886183-20171027234223789-90711692.jpg

部分teambition截图

886183-20171027235823508-1586467074.jpg

团队成员认领工作

人员任务
522把控项目进度、审核和签入代码等
541安卓MVP框架搭建、安卓端编码(首页模块、各种工具类)
517服务端编码
533安卓端编码(记录、文章模块)
113安卓端编码(个人信息模块)
328安卓端编码(流星、登录注册模块)
331服务端编码(文章模块)
506测试、文章推荐算法

燃尽图

TODOlist都在issue里。

燃尽图:

886183-20171027234241476-1766806984.jpg

(推荐一下github插件ZenHub,挺好用的)


本次任务分配比例

刘晨瑶李永盛苏伟鹏张昭锡
20%40%5%35%

转载于:https://www.cnblogs.com/thousfeet/p/7745591.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python decimal_python学习笔记一

1、~4不太明白、右移、左移整体移动添加零2、注意运算符&#xff0c;3、1<<5&716&704、set中的pop() 方法用于随机移除一个元素。字典中&#xff1a;list中5、Python dir() 函数dir()函数不带参数时&#xff0c;返回当前范围内的变量、方法和定义的类型列表&…

java基础基础总结----- Date

前言&#xff1a;其实在学习这个的时候&#xff0c;自我感觉学到什么直接查询API就可以了&#xff0c;没有必要再去研究某个方法怎么使用&#xff0c; 重点学习一下经常用到的方法。感觉自己的写的博客&#xff0c;就跟自己的笔记一样&#xff0c;用的是时候&#xff0c;就能快…

pandas object转float_Pandas中文官档~基础用法6

呆鸟云&#xff1a;“这一系列长篇终于连载完了&#xff0c;还请大家关注 Python 大咖谈&#xff0c;这里专注 Python 数据分析&#xff0c;后期呆鸟还会给大家分享更多 Pandas 好文。”数据类型大多数情况下&#xff0c;pandas 使用 Numpy 数组、Series 或 DataFrame 里某列的…

android studio 拉取分支,AndroidStudio中使用Git-高级篇(二)——新建分支(branch)和拉取请求(Pull request)...

前段时间写过一篇文章介绍如何在AndroidStudio使用上传项目到github&#xff0c;今天接着给大家带来了他的高级篇——新建分支(branch)和拉取请求(Pull request)。在真正的开发中我们很少写完代码commit后直接push代码上去&#xff0c;因为这样做没有经过第二个人的审核&#x…

collection转换为list_JAVA 集合 接口继承关系和实现,List,Set,Map(总结)

一. JAVA 集合1.接口继承关系和实现集合类存放于 Java.util 包中&#xff0c;主要有 3 种&#xff1a;set(集&#xff09;、list(列表包含 Queue&#xff09;和 map(映射)。1. Collection&#xff1a;Collection 是集合 List、Set、Queue 的最基本的接口。2. Iterator&#xff…

lazarus开发android应用程序指南,Lazarus开发Android应用程序指南(2)

本指南版权由delphicn所有&#xff0c;QQ&#xff1a;1339838080(tom)&#xff0c;转载请保留版权信息。文中难免有错&#xff0c;欢迎指正。2&#xff0e;编译运行lazarus中的Android示例程序。lazarus安装包中自带示例是在lazarus/examples/androidlcl/androidlcltest.lpi 。…

plsqldevelop安装教程

一、下载并解压压缩包&#xff0c;解压后有如下文件&#xff1a; 二、运行PLSQL Developer10.0.5.1710.exe文件&#xff0c;可以修改文件安装路径&#xff0c;然后一直下一步下一步就可以了; 三、运行软件汉化包PLSQL Developer10.0.5.1710_CHS.exe&#xff0c;不用管一直下一步…

java优先队列_Java高级特性增强-多线程

请戳GitHub原文: https://github.com/wangzhiwubigdata/God-Of-BigData大数据成神之路系列&#xff1a;请戳GitHub原文: https://github.com/wangzhiwubigdata/God-Of-BigDataJava高级特性增强-集合Java高级特性增强-多线程Java高级特性增强-SynchronizedJava高级特性增强-vola…

理解JS的6种继承方式

【转】重新理解JS的6种继承方式 写在前面 一直不喜欢JS的OOP&#xff0c;在学习阶段好像也用不到&#xff0c;总觉得JS的OOP不伦不类的&#xff0c;可能是因为先接触了Java&#xff0c;所以对JS的OO部分有些抵触。 偏见归偏见&#xff0c;既然面试官问到了JS的OOP&#xff0c;那…

android 滚动列表框,建立滚动列表框

另一个可代替一组单选按钮及复选框的是滚动列表框(见图6.9)。使用滚动列表框&#xff0c;你可以建立一个选项列表&#xff0c;用户可以从中选择一个或多个选项。你可以使用建立下拉式列表框的标识符来建立一个滚动列表框&#xff0c;只是使用不同的属性。下面是个例子&#xff…

collection集合 多少钱_面试必备-Java集合框架

Java集合框架面试题常见集合集合可以看作是一种容器&#xff0c;用来存储对象信息。 数组和集合的区别&#xff1a; &#xff08;1&#xff09;数组长度不可变化而且无法保存具有映射关系的数据&#xff1b;集合类用于保存数量不确定的数据&#xff0c;以及保存具有映射关系的数…

html鼠标滚动图片折叠,鼠标滑过图片3D折叠效果

本教程我们将使用CSS3 3D transforms和jQuery来制作一个神奇的3D折叠效果。在我们的demo中&#xff0c;图片在鼠标滑过的时候被折叠&#xff0c;空出来的部分将显示图片的一些信息。我们将创建一个放置图片html结构&#xff0c;当鼠标滑过它时&#xff0c;使用jQuery来将折叠或…

微信小程序开发之普通链接二维码

本文主要介绍扫普通链接二维码打开小程序&#xff0c; 详情请看官方文档https://mp.weixin.qq.com/debug/wxadoc/introduction/qrcode.html 配置普通链接二维码规则 生成二维码 访问https://cli.im/url&#xff0c;将https://test.com/linkcode?id1_2生成二维码图片 小程序接收…

html checked属性值,HTML复选框的checked属性的值是多少?

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;我们都知道如何在HTML中构成复选框输入&#xff1a;我不知道 - 选中复选框的技术上正确的值是多少&#xff1f;我已经看到了这些工作&#xff1a;答案是无关紧要的…

3位水仙花数计算pythonoj_Python解答蓝桥杯省赛真题之从入门到真题

若发现此文章消失&#xff0c;则是在等待审核中&#xff0c;稍等一会儿即可显示&#xff0c;谢谢。 另外&#xff0c;我会尽量晚上上传更新题目。 此文章太长了&#xff0c;导致MD编辑器很卡&#xff0c;另写了一篇接续 传送门 Python解答蓝桥杯省赛真题之从入门到真题 &#x…

uniapp怎么解析html字符串,uniapp富文本解析插件的详细使用教程

如果你作为文章资源类或者博客类的小程序你就会发现&#xff0c;很多时候你的文章数据都是html格式或md格式&#xff0c;这样如果不经过处理&#xff0c;会非常难看&#xff0c;所以富文本解析就显得格外重要了&#xff0c;今天给大家写一个uniapp怎么使用富文本解析插件的教程…

c++和python有联系吗_Python和C++交互

关键字&#xff1a;Python 2.7&#xff0c;VS 2010&#xff0c;swig OS&#xff1a;Win8.1 with update。 1.下载swig&#xff1a;http://www.swig.org/download.html 2.将swig的路径添加到环境变量Path&#xff0c;例如set pathC:\swigwin-3.0.2。 3.用VS创建一个win32 consol…

html播放切片,[Html/Css]网页切片

简介这篇文章主要介绍了[Html/Css]网页切片以及相关的经验技巧&#xff0c;文章约2269字&#xff0c;浏览量461&#xff0c;点赞数4&#xff0c;值得参考&#xff01;网页切片 前端必须掌握的技能&#xff0c;切片&#xff0c;虽然说难也不难&#xff0c;简单也确实是挺简单的&…

设计模式学习总结(一)——设计原则与UML统一建模语言

目录 一、概要1.1、设计模式定义1.2、设计模式分类1.3、设计模式书籍二、UML统一建模语言2.1、UML分类2.2、类图2.2.1、关联2.2.2、聚合/组合2.2.3、依赖2.2.4、泛化&#xff08;继承&#xff09;三、设计原则2.1、单一职责原则&#xff08;SRP&#xff09;2.2、开闭原则&#…

计算机与生命科学专业排名,2019软科世界一流学科排名发布,54个专业TOP10牛校榜单全给你...

原标题&#xff1a;2019软科世界一流学科排名发布&#xff0c;54个专业TOP10牛校榜单全给你软科26日正式发布2019“软科世界一流学科排名”(Shanghai Rankings Global Ranking of Academic Subjects)。2019年排名覆盖54个学科&#xff0c;涉及理学、工学、生命科学、医学和社会…