wx小程序空教室查询

数据来源

:网络

数据库

:数据库采用的是sqlserver2008R2,比较经典的数据库。
**

数据的组织形式

**:我们一共100多个教室,每个教室有20周的使用时间,所有就有100多*20列,这样每列存储的就是每个教室在某周的具体情况。每列都有三个属性,第一个就是主键自增id,第二个就是周数,用于区分教室的时间占用情况,第三个就是json反序列化的一个二维string的数组,由于后端采用的是csharp,所以这个二维数组,用的是list来代替的。

一列数据

id name data week
14022 B127 [[第一节,上课,上课,上课,],[第三节,上课,],[第五节,],[第七节,],[第九节,]] 1

后端

:后端采用的是csharp的servicestack框架,这个框架的具体情况,请移步servicetack官网。后端也没有啥逻辑。就是前端给发送request请求,该请求有三个属性,第几周,周几,第几节课。然后后端就是去数据库查所有周数满足的记录,然后序列化其二维数组,在对应行对应列查询。然后将结果打包成response返回

前端

:(终于不用考虑页面好看不好看了,嘤嘤嘤)前端是用的微信的wxml,wxss,微信的js。和前端的主流框架差不多,就是可以写代码的css加上可以数据绑定的html,其余的没用上也没啥感觉。还有就是前端我贼垃圾,布局全靠学弟帮忙

遇到的问题

:后端方面,主要是深拷贝的问题,开始没想到这一点,浪费了不少时间。我拿到的数据是一堆表,每张表记录了某一个教室的20周的时间安排。我的要求很简单,将这张表拆分成20张表,所有课程用特殊标记表示。我想要拆分成20张表,所以我得先准备20个表的容器,这个方面,我直接new list

,然后一个for循环来个20次,循环体内直接list
.add(table),就完事了。但是我还是太天真,这样准备好容器之后,然后就是一个单元格一个单元格读取,用正则去匹配里面上课的日期,然后分别对应刚才的容器添加标记。完活,debug,监视变量,发现这20个表的数据一摸一样。贼难受~
20个表一模一样肯定是容器没准备好呗,因为一开始没想到这事然后浪费了不少时间。后来发现了问题,在csharp中所有变量被分为值类型和引用类型两种。值类型很好理解,就是长度不可变的数据,因为其长度不可变,所以放在栈里面。引用类型就是对象,引用是对象的地址,地址放在栈里面,实际的数据放在堆里面,由类的构造函数和析构函数负责其空间的分配。Table是一个对象,list的add操作实际上是将table的地址加了进去,20个一摸一样的地址无论改哪一个所有的都会跟着变。这就是问题出现的原因,应该如何解决呢。我想到的最简单的办法就是,new20个对象,但是这做很sb。万能的百度告诉我,你只要深拷贝一下就ok了,那啥是深拷贝呢?就是将一个对象序列化一边,将其值序列化成数据流,然后再反序列成对象就ok了,其本质就是,再次给相同的数据分配新的空间。Csharp有这玩意那同理java也会有,c++也会有,其他语言肯定都有关于这方面的问题的解决方案。学的是思想不是语言~~嗯嗯就这样

你可能感兴趣的:(杂项)