Atitit.数据操作dsl 的设计 ---linq 方案
Atitit.数据操作dsl 的设计 ---linq 方案
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://www.cnblogs.com/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.软件开发概念--过滤和投影 数据操作
atitit.软件开发概念--过滤和投影 数据操作 投影的本质及扩展 物体在太阳光的照射下形成的影子(简称日影)就是平行投影.日影的方向可以反映时间 投影还比喻此物通过彼物表现出来的迹象. 作者::老 ...
- Atitit. 数据约束 校验 原理理论与 架构设计 理念模式java php c#.net js javascript mysql oracle
Atitit. 数据约束 校验 原理理论与 架构设计 理念模式java php c#.net js javascript mysql oracle 1. 主键1 2. uniq index2 3. ...
- Atitit 数据存储视图的最佳实际best practice attilax总结
Atitit 数据存储视图的最佳实际best practice attilax总结 1.1. 视图优点:可读性的提升1 1.2. 结论 本着可读性优先于性能的原则,面向人类编程优先于面向机器编程,应 ...
- StackExchange.Redis帮助类解决方案RedisRepository封装(字符串类型数据操作)
本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文链接 http://www.cnblogs.com/tdws/tag/NoSql/ 目录 一.基础配置封装 二.String字符串类型数据操作封 ...
- MySQL(一) -- MySQL学习路线、数据库的基础、关系型数据库、关键字说明、SQL、MySQL数据库、MySQL服务器对象、SQL的基本操作、库操作、表操作、数据操作、中文数据问题、 校对集问题、web乱码问题
1 MySQL学习路线 基础阶段:MySQL数据库的基本操作(增删改查),以及一些高级操作(视图.触发器.函数.存储过程等). 优化阶段:如何提高数据库的效率,如索引,分表等. 部署阶段:如何搭建真实 ...
- 初始ADO.NET数据操作
以下介绍直接来源与百度百科,介绍十分全面和详细,作为小菜的我们没有理由不看完这些枯燥的介绍原有: ADO.NET的名称起源于ADO(ActiveX Data Objects),是一个COM组件库,用于 ...
- Atitit.导出excel功能的设计 与解决方案
Atitit.导出excel功能的设计 与解决方案 1.1. 项目起源于背景1 1.2. Js jquery方案(推荐)jquery.table2excel1 1.3. 服务器方案2 1.4. 详细 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:表的数据操作
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:表实体类映射 下一篇:Farseer.net轻量级ORM开源框 ...
- C# 数据操作系列 - 8. EF Core的增删改查
0.前言 到目前为止,我们看了一下如何声明EF Core的初步使用,也整体的看了下EF Core的映射关系配置以及导航属性的配置. 这一篇,我带大家分享一下,我在工作中需要的EF Core的用法. 1 ...
随机推荐
- Inno Setup入门(二十五)——Inno Setup类参考(11)
http://379910987.blog.163.com/blog/static/3352379720126693742406/ 今天说说TNewCheckListBox类.该类和ListBox差不 ...
- Visual Studio自动生成XML类和JSON类
Visual Studio 2013及以上版本提供了一个非常实用的功能.可以根据xml文档或json文档自动生成类.有了这个工具反序列化时就不用再手动写类并且实现了强类型操作. 步骤 1. 准备一份j ...
- C语言嵌入式系统编程修炼
C语言嵌入式系统编程修炼 2008-08-19 作者:宋宝华 来源:天极网 C语言嵌入式系统编程修炼之背景篇 本文的讨论主要围绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到具体的C语言编程 ...
- shell 脚本中执行mysql语句
通过hash建表之后,表的数据量巨大2048,那怎么去验证表是否建成功呢? 逻辑生成表名这部分就不写了.只要能建表成功,这部分的脚本肯定是有的.那么怎么在shell中执行selec查询并返回呢 只要在 ...
- ylbtech-LanguageSamples-SimpleVariance
ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-SimpleVariance 1.A,示例(Sample) 返回顶部 SimpleVar ...
- Oracle两个时间段是否重合、冲突
经常会碰到比较两个时间段是否冲突的情况. 思路1 最开始比较2个时间是否的思路是,时间段的重叠. 但是比较时间段重叠的情况,就有几种情况, 1. 时间前段冲突. 时间A: 2015-10-01 ...
- phpcms v9 wap手机门户站点内容页添加上一篇、下一篇的方法
PHP源码修改:打开 phpcms\modules\wap\index.php 文件找到if(!$r || $r['status'] != 99) showmessage(L('info_does_n ...
- 使用RMAN和控制文件备份删除归档日志的SHELL脚本--RED HAT 5 LINUX 64
在ORACLE用户下的定时器设置 [oracle@SHARKDB dbscripts]$ crontab -l# minute hour day month week15 1 * * 0 sh / ...
- Microsoft.Office.Workflow.Actions Namespace
Microsoft.Office.Workflow.Actions Namespace SharePoint 2010 Contains the workflow activities that ...
- mysql时间字段转换为毫秒格式
下面是转载的关于MySQL毫秒.微秒精度时间处理的两段篇章,留给自己和供大家参考~~ 一.MySQL 获得毫秒.微秒及对毫秒.微秒的处理 MySQL 较新的版本中(MySQL 6.0.5),也还没有产 ...