-
Notifications
You must be signed in to change notification settings - Fork 3
Description
dp2前端辅助类参考
前端早期的代码都是老老实实用 SearchXXX() 然后用 GetSearchResult() API,书写起来比较繁琐。后来增加了类似 ResultSetLoader 这样的枚举类,可以简化 GetSearchResult() 阶段的代码书写。
可以在 dp3 里面有计划地写前端辅助类,让编程幸福起来。用 “: IEnumerable”搜索一下 dp2 源代码就看出来有哪些类了。
todo:列出dp2的辅助类
yield 语法糖:yield return 这是 C# 后来发展出来的语法糖,对于写枚举类非常有用,是节省精力和让代码简洁的好技术,希望能够掌握。
https://blog.csdn.net/stupidcodegenerator/article/details/11480919
关于dp2逻辑检索使用逆波兰表
Jason.Liao(271095962) 16:26:38
将正常顺序变成逆波兰表序
这是做啥?
SearchReader到最后执行到了rms.db里面的Query.cs
数字平台谢*(2820725526) 16:30:38
您这是说 dp2kernel 了吧。因为 dp2kernel 的 API Search(),是采用了一种 XML 的检索式。检索式里面支持逻辑运算,甚至可以支持括号。所以传统上来说,要把检索式解析为 RPN 逆波兰表方式,便于实际运行检索和合并。
Jason.Liao(271095962) 16:32:14
您这有点语义分析还是词法分析的味道啊,我要不要回去找找编译原理
数字平台谢*(2820725526) 16:32:16
就是说,先变换为逆波兰表达方式。然后用另外一个执行模块,对逆波兰表的每个节点进行检索。同时按照逆波兰表进行逻辑运算。逻辑运算一般就是检索所产生的结果集之间的运算。比如两个结果集与,或,等等。
逆波兰算法比较经典。记得当时任**是看了 wikipedia 的定义。
如果要了解这个算法的原理,我记得有个火车编组的图示好像挺直观的,不过不知道是否还能找到。
一般我们开发是这样:相信这个算法,也就是别人给出的算法是正确的,我们去实现代码即可。比如我现在连二分法搜索都懒得去深究,特别是边界情况很费脑子。直接抄经典代码就可以了。
MarcQuery 的 XPath 解析运行,完全是继承 .NET 的一个基础类。基础类里面把算法解决好了,派生类填写一些必要的方法(函数)即可。
廖工,后面我们做 dp3 的时候,逻辑检索这部分可能要从头来一次,到时候我们仔细研究算法。dp2kernel 里面这个逻辑算法,其实可以推给 SQL 语句。dp2kernel 这里优化不是很好,有些情况感觉执行非常慢。
也有一些经验积累。后面我们做这种很深的模块,可以带有 show plan 功能,解释一下内部运作过程,供调试者参考。
Jason.Liao(271095962) 16:38:49
要不要考虑一下Odata?
数字平台谢*(2820725526) 16:39:37
@Jason.Liao > 要不要考虑一下Odata?
嗯,这个东西我还不了解
Jason.Liao(271095962) 16:48:18
https://msdn.microsoft.com/zh-cn/library/gg309461.aspx