我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:九肖六肖三肖全年资料 > 取标记组件 >

微信小程序 - 乒乓圈 -云开发

归档日期:07-16       文本归类:取标记组件      文章编辑:爱尚语录

  和朋友合伙写了一个小程序,写了一个以共享乒乓信息和交流的平台———乒乓圈。我们使用了微信的云开发来完成数据和后台的作用。免去了租赁服务器。

  我主要负责的是数据库的设计和云函数实现数据获取和触发器的功能和简单的两个页面。

  当用户未授权则会弹出,点击下方指纹图片,则会弹出授权框,授权后,如果未注册则会注册完毕后进入首页

  对象就只有大致三个,但是为了数据操作的简便性我将个人的信息分成两个对象表,将留言中的对话又单独放出一张表,所以最后的表有为一下几个:

  首先,小程序提供的数据库是基于mangoDB的面向对象数据库,区别于一般的关系数据库如:mysql等。二者之间的区别和我的理解会写在总结中。

  确认完对象基础属性后就要考虑对象之间的关系,例如人和对话,留言和对话信息。

  在关系数据库中,一对一的关系只要在一条记录中添加一个属性即可,例如:个人信息和个人详情,在个人详情中添加个人的唯一表示符字段;

  一对多的关系中需要在多数的记录中添加一个属性,或者单独建立一张表来存储关系,

  例如:个人和物品,第一种在物品对象中添加一个所有者对象,或者建立一个所属关系表;

  多对多的关系则只能通过单独一张关系表来完成,例如:学生和课程,需要单独一张选课表来表示关系。

  在面向对象数据库中一对多和多对多的关系可以通过对象中的一个数组字段来完成,例如:学生和课程,在学生对象中添加一个所选课程字段存储课程 ID ,在课程中添加选课学生字段存储学号,就完成了多对多的关系链接。

  当第一次登陆进区就是如上所示,登陆进去后通过 openId 进行云函数获取数据库中个人信息,如果没有则默认进行注册流程。

  默认昵称为微信昵称(可在个人页更改),头像为微信头像(暂不提供更改),余下都为默认值。

  首先调用wx.getStorage查询收缓存的登陆信息,如果获取成功,跳过引导页,将当前登陆状态的标识符(默认false)改为 true 。

  如果获取缓存中登陆状态。先获取授权信息getUserInfo判断获取到的用户信息存在且为登录。

  调用云函数getPersonhInfo——获取用户信息,如果获取成功,结果集不为空,就将信息存储到全局状态app.globalData中.接着调用云函数getpingpang_info获取个人详细信息一样放入全局状态中,然后写入缓存信息

  如果上一步未获取成功,判断为第一次登入,进入注册流程 先获取用户的昵称后头像,调用云函数pingpang_init后台进行注册,并将初始值放入全局状态中,跳转到首页。

  首先解构用户传来的参数来判断需要的数据,openIdarr--通过openId数组获取,openId--通过openId获取,city--通过用户所在城市获取,all--获取所有用户,以上四种都没有则获取当前用户的信息。

  这个云函数只是简单的通过两种方式(给与openId或默认自身)来获取获取用户详细信息

  签到的存储是在个人信息的一个字段sign中,以数组的形式存储,当点击签到时,先判断此次签到的月份与上次签到的月份(person的month字段)是否相同,不同则将sign数据置为空并且将month字段更新为当前月份,接着存储签到的日期的的day,

  1. 第一种是将同城所有人查询出来按照积分排序,并区前一定数量的用户来输出排行榜

  优点:无需其他的资源来存储,不占用空间,修改排行榜的时候无需多余的处理

  缺点:无法承载大量的用户,当用户增多到一定数量后,单次查询时间会变得很慢,查询并发数量会有问题,因为查询的都是同一张表

  2. 第二种是以城市排行榜为对象,创建一张表,表中存储的对象的属性大致如下所示

  优点:减少了查询后大量数据的处理,单人查询一次只需要处理相应数量的数据,不需要遍历一遍所有数据

  缺点:需要额外的存储空间,如果存储的是用户 openId 那查询速度依然较慢,如果存储的是用户对象,那么查询速度只需要查询单张表的时间,修改排行榜的时候又需要单独处理数组字段,较为麻烦。

  留言功能,是这个小程序的主要功能之一,目的是为了向兴趣相同的乒乓爱好者有一个初始的交流平台。

  创建留言需要在圈友(同城的)中找到相应的用户,然后点击头像,弹出详情,接着点击留言按钮,会跳转到留言对话页。

  留言有两种情况,一种是之前有过留言,存在留言对象,另一种则是第一次对话,之前不存在留言对象。

  第一种,只需要查询到存在就可向里面添加留言信息。第二种则需要先创建在进行添加。

  第一种没有任何问题,直接对对话对象的留言数组中进行添加,第二种则需要创建一个对话对象。

  具体流程:首先在留言页查询到所有对话对象,这是走第一种情况,可以跳转到直接添加留言,第二种则是在圈友页中对象的详情页点击留言按钮,这会先查询对话兑现,不存在则会跳转到空白对话页,否则跳转到之前的留言对象。

  推荐方案:在点击留言时查询之前是否存在对话兑现,存在即读取,不存在就跳转到空白页,如果发送了留言,则创建对象。这样可已解决以上的缺点。但是还是存在一个问题就是未使用socket无法达成实时通信。

  首先,结构传递的参数my_id(当前用户的id)和other_id(留言对象的id)。接着判断my_id是否存在,不存在就给当前用户的openId,最后判断ohter_id如果不存在,则查询前用户所有的对话。

  首先,结构参数,message(留言对象,包含之后的几个参数),my_id,other_id和msg(留言内容)。接着判断my_id是否存在,不存在就用当前用户的openId。然后是向留言表添加一条新数据messagedb.add最后获取对话对象并向对话中的留言数组中添加留言内容。

  个人模块没有什么复杂的逻辑,就是数据渲染页面,不过页面结构是我写的,可以聊一聊页面了。

  个人页面中没有什么比较花里胡哨的样式操作,只有简单基础的 css 和 html ,所以就在此简单结构一下。

  文本和输入框的切换,是通过wx:if来控制显示,让两个大小近似的块占用相同的地方,当点击文本时,数据源(data)中的 changecontext 变量变成 ture 页面重新渲染,将输入框显示 value 为数据源中的个人简介,文本则隐藏;当输入框失去焦点时,将输入框中的value值写入数据源中,然后changecontext变为false,页面重新渲染,就改完了个人简介。

  第一种和第三种都可以普遍使用。推荐第一种方式,因为大多数用户不会过于频繁的去修改这些东西,但是页面基本都是每次登陆都会访问多次的。频率和并发都是第一种好。

  个人详情就是普通的页面,没有复杂的云函数,只有一个获取,一个提交修改,两个函数都不复杂。

  详情页中球拍和球龄是使用了小程序自带组件picker其余则是使用了自定义组件info-section

  在和朋友一起开发小程序的过程中注意到了以下的问题,沟通是最重要的,在我们开发的过程中,因为没有良好的沟通,导致,前后端的功能开发对接不完美。部分功能分配不好,有些功能可以同过前端或后端单独解决,缺因为没有沟通完善,导致双方都做了或者双方都没做的情况发生,虽然有每个人都有自己的事,大多数时间都是单独开发的原因在。但是这些问题应当在代码开发流程就应当做的,这是我了解的一个问题。

  程序的结构大致分为前端页面、后端服务器和数据库三个组成部分。在小程序这种 MVVM 结构中前端占有了很重要的一部分。

  前后端和数据库的比例大致为 n:1:1 的关系,所以当用户量大的程序,多数操作应当放在前端中处理,这是现在 mvvm 称为主流的原因,后台主要统筹管理总体数据或者对重要的流水数据处理,并且需要提供大量的 api 供前端获取数据,

  关系型数据库是传统的数据库,现在使用的主要是mysql 和 microsoft sql server。面向对象数据库是新兴数据库,现在使用的是 mangoDB等。

  关系型数据库中,最独特的也是最重要的是规划范式在关系型数据库中范式等级越高,数据的整体性越低,那么冗余度会逐渐下降。

  一个学生用户可能会被分成多张表来存储相关信息。而关系型数据库中主要的也是两张表之间的关系(联系),这个关系通常也必须使用一张表来存储。

  在面向对象数据库中,与传统关系型数据库最大的区别数,它是以一个对象来存储的,对象的属性则是自己定义的,它的属性可以存储一个对象(函数,数组)。这就极大的增加了可操作性,我们可以把关系作为对象的一个属性来存储,例如:学生和课程的关系,二者之间是多对多的关系,本来在关系型数据中需要建立一张选课表来存储,现在只需要在课程对象中添加一个选课字段存储选课学生的 id 数组,而在学生对象中添加一个所选课程字段,二者之间的关系就链接起来了。面向对象数据库中,对象的属性通常可以聚集在一起,一个对象类就是一张表,这样会造成每张表中拥有大量的数据每次操作会造成的并发问题,所以每个对象类最好将属性分割,让数据访问更加平均,减少每个对象表的同时访问次数。

  在和他人一起,写小程序的时候出现种种问题,甚至有时候效率还没有一个人单独写的高,但是我发现和他人一起写会更有动力,每个人的想法在碰撞,能快速的提高自己的编程水平和与他人的沟通能力。

  每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。

本文链接:http://odigallery.com/qubiaojizujian/295.html