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://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,然后执行语法解析。。即可。。

转载于:https://www.cnblogs.com/attilax/p/5521887.html

Atitit.数据操作dsl 的设计 ---linq 方案相关推荐

  1. 数据操作日志记录表设计、可以查询、恢复历史数据记录

    数据操作日志记录表设计.可以查询.恢复历史数据记录 摘要:在日常开发中,我们经常会遇到这样的需求,产品希望用户对业务系统的所有操作都做日志记录,尤其是涉及到修改.删除的时候,更应该,因为用户在操作系统 ...

  2. 从EF三层 到 DDD领域驱动设计(1)--------------数据操作

    前言: 一路走来,从单片机到C#,从电子行业到计算机行业,技术是不断提高,但是身体确不断变差,本来高新的工作也不得不辞掉,改到一家国企过着咸鱼般,但很爽的生活. 最近的金砖比较忙,刚忙完金砖的事,就有 ...

  3. Atitit. 数据约束 校验 原理理论与 架构设计 理念模式java php c#.net js javascript mysql oracle...

    Atitit. 数据约束 校验 原理理论与 架构设计 理念模式java php c#.net js javascript mysql oracle 1. 主键1 2. uniq  index2 3.  ...

  4. LEAP能源供应转换、能源需求及碳排放预测中的基础数据搜集及处理、能源平衡表核算、模型框架构建、模型操作、情景设计、结果分析、优化、预测结果不确定性分析

    采用部门分析法建立的LEAP(Long Range Energy Alternatives Planning System/ Low emission analysis platform,长期能源可替 ...

  5. 智能手环功能模块设计_智能手环的设计的方案.doc

    智能手环的设计的方案 智能手环的设计的方案 摘 要 本手环设计本身添加了市面上智能手环的相关功能,能够实现显示时间.测量步数.热量.闹钟等功能.因此本设计也适用于普通的使用者,在能够拥有智能手环的便捷 ...

  6. Access把每一天的数据累加_如何设计 QQ、微信等第三方账号登陆 ?以及设计数据库表!...

    来源:http://suo.im/5SBVka 多账户的统一登录 名称解释 这里的多账户区别于系统级别的,我们讲的多账户系统是指,在我们互联网应用当中,我们的应用会使用多个第三方账号进行登录,比如现在 ...

  7. dama数据管理知识体系指南_DAMA知识体系解读(6)数据操作管理

    数据操作管理是提供从数据获取到数据清理的全过程支持,关联图: 一.概念 数据操作管理是结构化数据的开发.维护和支持活动.包括两个职能:数据库支持和数据技术管理.数据管理员(DBA)在该活动中起着重要的 ...

  8. 网易数据运河系统NDC设计与应用

    [导语] NDC是网易近一年新诞生的结构化数据传输服务,它整合了网易过去在数据传输领域的各种工具和经验,将单机数据库.分布式数据库.OLAP系统以及下游应用通过数据链路串在一起.除了保障高效的数据传输 ...

  9. 数据表格应该这样设计

    作者:nick  (转载已取得作者授权) 1. 前言 在企业级中后产品中,通常大量使用表格来展示结构化的数据.合理地设计表格能给用户带来高效的信息获取率,但如何言而有物地设计表格,相信是绝大数刚入行B ...

最新文章

  1. 偏度与峰度的正态性分布判断
  2. linux下载哪个python版本-Linux升级python版本
  3. asp.net web 开发登录相关操作的控件LoginName、LoginStatus和LoginView控件使用详解
  4. 【算法漫画】什么是红黑树?
  5. 如何从新开发的程序中提炼服务
  6. Object category automatic search
  7. 安装oracle配置监听出错,安装失败,无法建立监听?
  8. 中国首个开源学校教务管理系统、网站布局自动化、学生/成绩/教师、成绩查询
  9. linux+top写日志,Linux:日志那些命令
  10. 《Summer Tree》第八期封面
  11. man statd(rpc.statd中文手册)
  12. blog推荐 - Sources of Insight
  13. Android开发视频教程汇总
  14. 基于JSP网上拍卖平台系统
  15. 期末C语言不挂科之选择题
  16. BZOJ4832: [Lydsy1704月赛]抵制克苏恩
  17. 腾讯云开发低代码平台初探
  18. 自建Kubernetes集群如何使用阿里云CSI存储组件
  19. AD16实现板框挖空
  20. GMS2的一些常用函数记录

热门文章

  1. 差分约束系统【模板】
  2. 输出链表倒数第K个节点
  3. 基本蚁群算法的C++源程序
  4. Basic脚本解释器移植到STM32
  5. Golang 新手可能会踩的 50 个坑
  6. 无缓冲 Chan 的发送和接收是否同步
  7. linux命令awk
  8. springmvc十二:@PathVariable
  9. linux: 查找文件
  10. Delphi下MSMQ(Mircosoft Message Queue)实例(私有队列)