Chips交互操作和集合论

产品的PRD画的原型图有这么一种操作,网上搜了半天不知道叫什么名字,后来在AngularJS Material的DEMO上找到了这种交互方式,分类在Chips下,中文的意思大概是木屑,纸片之类的,就姑且叫做Chips交互

Chips UI

Chips交互的主要操作方式通过肉眼就可以识别:
- 增加一个项目
- 删除一个项目

这两个操作由前端实现,只是在页面上展示,实际上并没有在数据的持久层保存下来
真正与数据库打交道的隐藏逻辑有:
- 隐藏操作: 列出所有项目(list),比如Apple、Banana、Orange
- 隐藏操作: 新增若干项目(insert),比如增加一个Cherry
- 隐藏操作: 删除若干项目(delete), 比如删除一个Banana
- 隐藏操作: 修改项目组(update), 提交or保存的时候,更新整个group,比如Apple、Orange、Cherry

页面的交互逻辑,看起来很简单,但是服务端实现起来,就一不小心衍生出了很多小九九的想法
这些和数据库打交道的隐藏操作,甚至在数据库的字段设计上都可以有所讲究

我们举个例子,假设我要完成如下操作——称之为操作X:
1. 打开页面,载入已有的fruit: Apple、Banana、Orange
2. 删除✗掉一个fruit: Banana
3. 新增一个fruit: Cherry
4. 提交保存,更新fruit数据

全部删除后重写

数据库中的初始值如下,其中每种水果是一个记录

auto_idfruit
1Apple
2Banana
3Orange

执行完操作X之后,数据库中的值变成:

auto_idfruit
4Apple
5Orange
6Cherry

对应的SQL是:

DELETE * FROM T_Fruit;
INSERT INTO T_Fruit VALUES("Apple"), ("Orange"), ("Cherry");

高大上的集合论

数学才是王道,所以工程实现上能沾上数学的边,用集合来搞,自然高大上

所以我们的操作X可以归结为集合Old_Set和集合New_Set的集合操作

Chips的集合操作

在服务端,我们需要保留Old_SetNew_Set共有的(交集),删掉Old_Set单有的,添加New_Set单有的

不过这里采用了集合的差来构造更新集合Updae_Set删除集合Delete_Set:

deteteSet = Sets.difference(olderSet, newerSet);
insertSet = Sets.difference(newerSet, olderSet);

之后改删除的删除该更新的更新,结果数据库为:

auto_idfruit
1Apple
3Orange
4Cherry

讨巧的字符串

后来和别人交流,发现还有这种取巧的方式
数据库的初始值这么存储:

auto_idfruit
1Apple,Banana,Orange

执行操作X,就直接替换fruit的值,这种做法只需要一个记录即可:

auto_idfruit
2Apple,Orange,Cherry

至于页面上的分割效果,就留给前端发挥好了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值