Atitit.数据操作dsl 的设计 ---linq 方案
来源:互联网 发布:男女审美差异 知乎 编辑:程序博客网 时间:2024/06/10 19:48
Atitit.数据操作dsl的设计 ---linq方案
1.1.sql与api方式1
1.2.Linq方案与stream方案的选择,1
1.3.前缀表达式 vs 中缀表达式1
1.4.要不要字符串分隔符1
1.5.尽可能的兼容sql标准2
1.6.多数据源的支持2
1.7.结论2
1.8.最终结果如下2
1.1. sql与api方式
对于数据操作,目前常用的俩中方案sql与api方式,api里面又分为linq方案与stream方案。。
一下是他们的比较原则上,以人类可读性为优先。Sql的可读性是最强的,单他的机器可读性就是最差的。。。Api方式则相反,易于解析,牺牲了部分人类可读性,来换取方便的机器解析。。
Sql的解析比较困难,不太适合直接作为dsl来使用。。当然如果数据源是数据库的话,已经实现了sql的解析了,就可以使用sql作为dsl来使用了。。如果是其他的数据源比如list,就自己实现解析sql来查询list,就比较麻烦了。。
1.2. Linq方案与stream方案的选择,
linq是stream的特列。专门化的一种dsl,可读性更好,类似sql,而sql几乎作为实际操作的一种标准dsl,符合标准比较好,容易学习。。绝大部分场合下,应该使用linq方式。。
部分常见的数据结构,可以特化stream api来用,stream api有着更加灵活和简便的操作可以对特定操作。
作者:: ★(attilax)>>> 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
1.3. 前缀表达式vs 中缀表达式
Linq的实现模式有俩中,一种是api前缀表达式模式,此种模式容易解析,单可读性稍微差点。 Api中缀表达式,容易解析,可读性强,但是,此类模式工作量庞大,一般使用机器生成,会带来同步维护性问题,放弃。。
1.4. 要不要字符串分隔符
Sql使用单偏好作为字符串分隔符,其他编程语言使用双引号,但是带来连解麻烦的问题。
考虑到可读性,以及机器解析的需要,反正以及分割的很小单位表达式了,容易解析的,就无需字符串分隔符了。。
1.5. 尽可能的兼容sql标准
1.6. 多数据源的支持
内存数据,string,list,cache,nosql,文件,excel,数据库等均可以利用linq来查询与操作
1.7. 结论
所以折中考虑下,人类可读性优先考虑,但是开发简单性也要保证。。最终的比较好的方案就是在大操作上from where等使用api函数模式,但里面的条件表达式等使用sql模式的文本中缀表达式模式,方便机器解析。。
1.8. 活动发起计划:
兄弟们,我们联合起来,搞个linq呀,我们的目标:
---多数据源的支持:内存数据,string,list,cache,nosql,文件,excel,数据库等均可以利用linq来查询与操作
实现思路:先把linq里面的表达式简单词法分析,转换为全部的api函数式前缀表达式结构。构建ast,然后执行语法解析。。即可。。
1.9. 最终结果如下
List list=ListUtil.addMapFromStr(“name:李明,age:11”).addMapFromStr(“name:刘利,age:17”).toList();
List<Map> result_list= select(“name,age”).from(list).where(“name=李明”).and(“age>12”).orderby(“name,age desc”);
实现思路:先把linq里面的表达式简单词法分析,转换为全部的api函数式前缀表达式结构。构建ast,然后执行语法解析。。即可。。
- Atitit.数据操作dsl 的设计 ---linq 方案
- Atitit.基于dsl的methodinvoker
- atitit.设计文档---操作日志的实现
- Atitit.软件开发的最终的设计 dsl化,ast化(建立ast, 解析执行ast)
- atitit.表单验证 的dsl 本质跟 easyui ligerui比较
- Atitit.工作流系统的本质是dsl 图形化的dsl 4gl
- Atitit. 提升开发效率与质量DSL ( 3) ----实现DSL的方式总结
- Atitit.去除水印的方案
- Atitit 关于建立知识库体系的方案
- scala下DSL的设计与开发
- Atitit dsl实现(1)------异常的库模式实现 异常的ast结构
- Atitit dsl对于数组的处理以及main函数的参数赋值
- Atitit.安全性方案规划设计4gm v1 q928
- Atitit.常见的4gl 第四代编程语言 与 dsl
- Atitit 纯java项目的提升进度大法---通用json dsl接口
- 使用Linq操作XML数据
- LINQ统一数据操作语句
- Atitit dsl exer v3 qb3 新特性
- JAVA自学之路-马士兵
- AutoHotKey的那些事儿:(六)、AutoHotkey开发环境的搭建
- # 数据结构-顺序表和链式表
- 2016年个人工作总结
- html5语法有哪些改变
- Atitit.数据操作dsl 的设计 ---linq 方案
- [Android] BottomBar+ViewPager+Fragment实现炫酷的底部导航效果20160523
- 第一个Android Project中遇到的问题
- php面向对象编程
- dfs
- List排序之根据对象属性
- javaScript中的static类型数据
- Adnroid调用自身的播放器来播放音乐
- <GPS> Guided Policy Search