Chips交互操作和集合论
2017-12-14 19:50
381 查看
产品的PRD画的原型图有这么一种操作,网上搜了半天不知道叫什么名字,后来在AngularJS Material的DEMO上找到了这种交互方式,分类在Chips下,中文的意思大概是木屑,纸片之类的,就姑且叫做Chips交互
Chips交互的主要操作方式通过肉眼就可以识别:
- 增加一个项目
- 删除一个项目
这两个操作由前端实现,只是在页面上展示,实际上并没有在数据的持久层保存下来
真正与数据库打交道的隐藏逻辑有:
- 隐藏操作: 列出所有项目(list),比如
- 隐藏操作: 新增若干项目(insert),比如增加一个
- 隐藏操作: 删除若干项目(delete), 比如删除一个
- 隐藏操作: 修改项目组(update), 提交or保存的时候,更新整个group,比如
页面的交互逻辑,看起来很简单,但是服务端实现起来,就一不小心衍生出了很多小九九的想法
这些和数据库打交道的隐藏操作,甚至在数据库的字段设计上都可以有所讲究
我们举个例子,假设我要完成如下操作——称之为操作X:
1. 打开页面,载入已有的fruit:
2. 删除✗掉一个fruit:
3. 新增一个fruit:
4. 提交保存,更新fruit数据
执行完操作X之后,数据库中的值变成:
对应的SQL是:
所以我们的操作X可以归结为集合
在服务端,我们需要保留
不过这里采用了集合的差来构造
之后改删除的删除该更新的更新,结果数据库为:
数据库的初始值这么存储:
执行操作X,就直接替换fruit的值,这种做法只需要一个记录即可:
至于页面上的分割效果,就留给前端发挥好了
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_id | fruit |
---|---|
1 | Apple |
2 | Banana |
3 | Orange |
auto_id | fruit |
---|---|
4 | Apple |
5 | Orange |
6 | Cherry |
DELETE * FROM T_Fruit; INSERT INTO T_Fruit VALUES("Apple"), ("Orange"), ("Cherry");
高大上的集合论
数学才是王道,所以工程实现上能沾上数学的边,用集合来搞,自然高大上所以我们的操作X可以归结为集合
Old_Set和集合
New_Set的集合操作
在服务端,我们需要保留
Old_Set和
New_Set共有的(交集),删掉
Old_Set单有的,添加
New_Set单有的
不过这里采用了集合的差来构造
更新集合Updae_Set和
删除集合Delete_Set:
deteteSet = Sets.difference(olderSet, newerSet); insertSet = Sets.difference(newerSet, olderSet);
之后改删除的删除该更新的更新,结果数据库为:
auto_id | fruit |
---|---|
1 | Apple |
3 | Orange |
4 | Cherry |
讨巧的字符串
后来和别人交流,发现还有这种取巧的方式数据库的初始值这么存储:
auto_id | fruit |
---|---|
1 | Apple,Banana,Orange |
auto_id | fruit |
---|---|
2 | Apple,Orange,Cherry |
相关文章推荐
- 使P2P能进行交互操作:Jxta的故事
- COM与.net的交互操作之在把.net注册成"COM"
- Linux基于sshpass小工具,用于非交互的ssh操作
- android 与html交互java调js与js调java操作
- JDBC操作建模成Java对象+与存储过程交互
- 全面兼容的Iframe 与父页面交互操作
- GEF Programmers' Guide 中文版(GEF 交互操作)
- Revit 二次开发之“交互操作-得到选择的对象”
- iOS开发之Objective-C与JavaScript交互操作
- Android与.Net交互模拟用户屏幕操作添加APN和网络4G/3G切换
- Lua与C交互之基础操作(1)
- 错误:无法执行操作,因为未将指定的 Storyboard 应用到此交互控件的对象
- AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
- Appium移动端UI自动化中,如果需要两个APP交互操作的实践经验
- Silverlight与HTML元素交互操作以及Cookie
- lua和C++交互的lua栈操作——以LuaTinker为例
- [王者荣耀剖析]王者荣耀的操作交互设计研究
- 最大化J2EE和数据库交互操作的性能
- Silverlight与JavaScript的交互操作