入职4个月后,对于web开发的心得

绪论

 

经历两个月高压开发后,对整个web开发有了更为全面的了解。首先大概描述一下项目:某小区物业管理系统,包含android与ios的app和后台管理页面。主要业务有社区朋友圈,保安巡检,报修,抄水电表,居民缴纳物业费,门禁管理等功能。后台使用的框架为jeesite。

经过前期讨论过以后,第一步确认工作流程,我主要接手的部分有:社区朋友圈,通知新闻党建信息管理,广告管理的后台接口设计。首先由产品经理设计原理图,在经过需求讨论确定数据结构,然后在数据库建表,并且设计后台增删改查接口。这是最基本的功能,为了后续和app端及后台管理系统对接。这里是最重要的,因为开始考虑不周,导致后期修改数据库,更改业务逻辑带来了很大的工作量。

     Jeesite里面依然使用mybatis与mysql数据库对接,所以这两个月数据库操作方面和以前没有什么区别。唯一不同的是,Jeesite自动生成的sql语句和mybatis自带的生成工具有所不同。Dao层和Entity层各自继承了Jeesite的基类,里面包含了分页等属性,但对Jeesite确实不熟悉,很多仍然是自己重新写的sql。而且很多复杂的sql的执行效率很低,需要多学习sql优化相关的知识。

接口

 

 

接下来的主要工作是根据接口文档撰写接口,主要给app端使用。App分成工作人员和用户两个版本,涉及到工作流,角色管理,权限控制等。但出于水平有限,我只能接手一些较为通用的接口:广告,社区新闻管理和社区朋友圈功能。

      相比之前的项目,接手几个页面写增删改查功能不同的是,需要和多端通信。头一次阅读接口文档,对自己写代码的标准有了明确的要求。下面截选部分不涉及项目内容的标准:

1约定

序号

约定说明

1

编码方式统一为UTF-8

2

无特别注明,数据格式统一为JSON

3

数据描述字段遵从编写规范

4

数据描述值统一使用双引号字符串表示

5

字段名称全部使用小写,单词间使用英文下划线连接

6

字段值类型全部为字符串类型,必须使用括起来

7

约定所有请求都带有签名,具体算法由前后端约定

2通用响应参数

【通用响应】:

{

"status":"0",

"datas":{

// ... ...

},

"message":""

}

 

序号

字段名称

字段说明

1

status

返回码,可查阅3.1章节

2

datas

返回内容信息体

3

message

返回描述信息

 

从约定第一条可以看出,编码方式为UTF-8,这样能避免由于编码不同造成的编码问题。不仅是后台,数据库和所读取的文件也要编码方式统一。UTF-8又分有无Bom两种,在做敏感词审核的时候就遇到了这样的问题。

      JSON是一种轻量级的数据交换格式,形式如:{"key":"value"},类似java中map格式。将value以字符串的形式传输,接收时再转换成需要的数据类型。现在有很多JSON包供java调用,目前用的是FASTJSON,是阿里的开源项目。

第三条数据描述字段遵从编写规范一点,我做的并不好,怎么说呢。。。英语水平参差不齐是主要矛盾,比如点赞我命名为good,其他人命名为like,都是小学水平,挺尴尬的。有的时候还是要多学习专有名词。

第四条对于双引号字符串,我觉得是要符合json的规范,也方便了数据的类型转换,避免有些语言直接将数字转换成int等格式。

第五条下划线命名法,和sql命名方式类似,与java的驼峰命名方式不同,经常要做的工作就是将对应的关键字对接。

第七条的签名涉及到权限问题,和app端的登录有关,尚不了解。

所有接口的通用响应参数都是固定的,data存放数据对象,也是一个json对象,status传递状态,比如是否成功,message传递信息。这就是一个传输的数据模型,应该可以称为结构体?将所有参数传递的过程中,强制添加状态属性,有助于代码的规范,也方便了发生异常状态时进行判断。

      关于接口规范基本就是这些内容,在实际工作中,还要判断接口传进来的参数是否为空,若不加判断,极易造成空指针异常。这是最需要注意的地方。前期经常不写判断导致程序不够健壮。

开始先写假接口,写死参数包装成json提前给app端调用,后期逐渐换成具有功能的真接口,这就体现了团队开发同步进行的重要性。

分页

 

 

翻页是很大的难题,不同客户端有不同的分页方式。App端涉及到页面缓存基本是后端分页,web端也分为前端分页和后端分页。毕竟数据库几千条数据,一次传输不现实,之前的项目用的全都是前端分页,前端已经用js写好了框架,后台并不考虑这些。

      App端的朋友圈涉及下拉刷新和上拉刷新两种,下拉要获取最新的,而上拉要获取历史信息,而且要求更新几条刷几条,不能单纯的按顺序获取前十条,会造成缓存顺序混乱。最后约定用时间来查询,根据帖子的发布时间排序,向前或向后截取最多十条获取。

      Web端则没有缓存的需求,需要设计分页和页码。最开始做的一头雾水,后来同事指导我使用Jessite自带的分页功能,最后实现了。Jessite中根据数据库表生成的实体类entity层都会集成一个base对象,这个对象里就有分页大小和页码,执行对应的方法的时候直接将页码传递进来就好了,框架会自动调整sql语句。但有时会遇到页码太大无法正确显示的情况,应该是前端js代码没有设置好。

在做分页工作的过程中,尝试着写了不少js代码,也了解了html中元素等属性的用途,但仍一头雾水。基本靠蒙,我竟然写完了。有时还会涉及一些简单的jsp页面,基本都是从同事写好的其他页面中拷贝过来的。

总结

 

 

两个月的工作,实际的难点并不多,大部分都是一些繁杂的工作。头一次经手团队合作的项目,体会到了团队开发和自己一个人写代码的差异。代码的可读性,健壮性非常重要。另外也了解web平台开发和嵌入式软件开发的区别,前者要了解业务的总体流程,保证各个模块的隔离,并且对代码的复用性有更高的要求。

 

 

你可能感兴趣的:(生活杂谈)