项目介绍:
首先,产品属于为之工作室。
然后非常欢迎西电对web相关网络技术感兴趣的小伙伴们加入。
本项目开始于2018年3月上旬,第一版上线时间约在 2018年5月下旬,历时开发时间为三个自然月。
最初由王学长等人开发部署在web环境上的1.0版本,后期由于可用以及可维护性等原因移植到小程序上,由全新的项目组约7人重新进行开发!
本人负责后端部分,后端共2人负责
环境:php7+thinkphp5+mysql+linux
工作流程:
首先由于上两人进行协作开发,一个可以进行代码互通的工具必不可少,这里我们选择在github上实现协作。
首先由产品经理介绍产品的需求与目标客户以及产品的定位。
大约两周时间完全产品基本原型与需求文档,才开始真正的开发工作。
因为是前后端分离,API对接一下即可,这里和前端沟通使用的为json格式的restful规范,
然后验证方式使用的jwt验证。
然后两个人先进行任务的分配。
然后考虑所用各种第三方软件:
阿里云服务器系统版本为centos7.2,云储存使用七牛云(个人用户免费20G用于数据备份,敏感字词直接使用普通已有的包调用即可。
邮件发送目前使用私人的网易邮件,短信的发送使用腾讯的短信服务api(个人用户每个月免费100条。
沟通完使用哪些第三方软件以后,开始沟通代码的规范,无论是命名还是使用习惯,可以看看彼此曾经的代码,
了解一下是否有太大的出入,然后沟通协商再进行后面的工作。
设计数据表,这里设计数据表非常关键。
首先需要设计一个初始数据表的框架,然后开始根据信息架构图去考虑会使用哪一些功能,根据这些功能考虑表与表之间的联系(或者说一个功能所会影响到的数据表有哪一些,这里设计的时候,表尽量设计多一些但不要冗余,预留出来的接口也多一些,可以多考虑以后可能会出现的功能,防止后面需要添加一个新功能时需要回炉重新写,这是非常低效率的行为。
当设计表设计完成时,就可以正式开工撸代码了!!!
因为工程量不小,所以是长时间coding,安排时间也是一个比较重要的事情。
开始干活时候效率还行,每周一个会议,轮流开线下会议与线上会议,因为如果没有人push,那么人是会懒惰下来的!!!
coding过程中时常会有一些小细节出现疑问:技术实现困难、经济实现困难、产品理解不到位、产品经理改需求、各种流产等问题!!!
遇到的小问题:
1、路由规则:
一开始路由的时候,一直在想用一个方法使得对于user信息的查询更新之类的url直接创建好,但是后面发现实在麻烦,而且有些模块并不是都有更删改查。后来就每个控制器对应的方法都自己写一个路由,这样写起来也只是复制粘贴一行然后改路由,这样使用起来非常灵活,只是看起来可能有点丑(emmmmmm。2、验证http请求以及参数过滤:
一开始使用tp5文档给出的验证方式,但是后来感觉代码量有些大,很多代码都是重复的,后来学习了一种新的方式来验证。
创建一个二维数组,索引为rules=['控制器']['方法']的方式去调用,那么对于每一个http请求,将其带入二维数组中其查询,如果不存在这个请求方法直接返回报错就好。这里使用这种方式还有一个好处,就是数组中的内容直接存tp5验证器的验证方法,那么对每一个数组再调用一次验证器就验证结束了。
类似如此:
public $rules = array( 'Common' =>array( 'index'=>array( 'user_name' =>['require','chsDash','max'=>20], 'user_pwd'=>['require'] ), ),
调用验证的方式
$rule = $this -> rules[$this -> request -> controller()][$this -> request ->action()];
3、重复性代码的删减:
对于在短信与邮件中给用户发送信息,发送的内容其实都是一样的,只是方式不同,那么代码大部分上相同的,只是最后调用发送方式时不同,这里那么就直接可以把所有的方式写成一个方法,多传入一个参数,通过判断不同的参数去调用发送方式可以大大减低代码长度。
4、考虑用户的恶意行为:
用户可能只是来搞事情玩耍的,对于使用的例如腾讯的第三方短信接口,短信的大量发送上收费的,如果不限制用户一定时间内的短信量,其有可能通过脚本的方法不断发送短信,这样将会造成经济损失,这里需要对每个用户的行为进行收集,记录其行为的发生时间,每次用户请求的新行为与其同一个行为上次发生的时间进行判断,来考虑是否拒绝这个行为。
5、composer的使用:
在php开发中,composer上必不可少的工具,许多第三方软件的官方都是推荐使用composer下载其写好的工具。
曾经写过一篇composer的简单使用的blog,链接在这:
如果用过py的小伙伴应该知道使用各种包的重要性,这是站在巨人的肩膀上继续前行,前人在很多功能上已经造出了经得起时间考验的好*,那么很多时候没必要自己再重复制造,为了更高效率的coding,使用composer的感觉就是自己以前真的太低效率了。
6、对返回数据格式需要严格规范:
对于json格式,无论正确与否,正确代码200,错误代码如403,404,503都必须返回,因为这样才能更让前端至少可以通过简单的返回的响应状态去判定请求的结果。
7、调用第三方API:
对于使用第三方软件的时候,学习如何调用其API最好的方法是查看其最新的官方文档,然后对一个个接口进行尝试才是最好学习其API的方法。
8、关于php的基础:
基础还是很重要的,有了基础才能知道自己有可能bug在哪里,这样才能高效debug。例如在控制器互相调用时,需要使用static静态去建立等学习基础语法时会学到的知识在写代码中会忘得一干二净呢(emmmm
9、考虑问题更全面一些!!!
心得与感受:
1.没有行动之前可能什么事情都是简单的吧?
2.在这个项目中,对于网络相关知识得到了一个很好的了解,对平时我们使用的浏览器有了个更深次的认识,对chrome的F12开发者工具也越加赞赏。
3.对git的了解更上一步了,对于每次操作该使用的命令更加清晰。
4.每个人都是比较忙碌的,高效开会非常重要,开始的时候开会还会带一下电脑,后面开会大部分时候人是不齐的(每个人在时间安排上是不同的),后面就基本就是唠唠嗑啥的了,很多问题群里讨论即可,开会一定要提前协调好大家的时间。