hirisw

博客园 首页 联系 订阅 管理

共享一个从字符串转 Lambda 表达式的类(1)

Posted on 2012-05-25 11:13 Lenic 阅读(1288) 评论(4) 编辑 收藏

记得在古老的 2.0 时代,如果想要不重新编译动态更改逻辑,有两种方式:第一种是插件式编程,第二种是使用 System.CodeDom.Compiler 空间下的动态编译功能。两种思路的核心思路差不多,都是实现接口,进而创建实例操作的。或许,还有第三种方式,恕我孤陋寡闻。

 

然而,时代在进步,总会出现一些新的技术替换。在进入 3.0 之后,Lambda 表达式的出现,给我们一些新的思路,我们应该可以将这样的字符串【p => p.FirstName + p.LastName】转换为 Lambda 表达式树或者其编译后的委托,算是第二种方式的一种进阶吧。这恰恰是我在接下来的一系列的文章中,将要展示给大家的东西,希望大家能喜欢。

 

在这第一篇文章中,我说下思路吧。

  1. 分析字符串【p => p.FirstName + p.LastName】并转换为一组 symbol 集合。
  2. 传递目标 LambdaExpression 包含的委托类型到分析类中。
  3. 根据 LambdaExpression 规则递归分析集合中的每一个 symbol 。
  4. 返回分析得到的 LambdaExpression 表达式或编译后的委托。

 

这样,你就可以根据委托这种后绑定的数据形式,做任何你想要的事情了。关于第一种的插件式编程,在完成了这个系列之后,我会共享一个高效、轻量的 DI 类库,和这个系列组合起来,形成一个真正可用的微型框架。在这里先吊吊大家的胃口,希望不要喷我才好。敬礼,呵呵。

 

最后,我的原始思路来源于咱园子里的朱才博主,我将要发表的一系列文章正是来源于此,不过是将其剖析了一遍而已,谢谢朱才

 
 
 
1
1
 
(请您对文章做出评价)
 
« 博主前一篇:可重用的泛型相等比较器
» 博主后一篇:共享一个从字符串转 Lambda 表达式的类(2)
 

Feedback

我觉得没必要自己解析了,利用微软的DLinq的解析就足够了,哈哈。我用过很多次了在数据权限的表达式,和流程分支判断,再结合StringTemplate,堪称完美,哈哈 多多交流

#2楼[楼主]   支持(0)反对(0)回复引用

2012-05-25 13:37 by Lenic  
@破狼
对于一些简单的表达式来说,确实足够了,但是一些复杂的功能,还是需要的

#3楼   支持(0)反对(0)回复引用

2012-05-28 09:45 by xwy  
先顶下

#4楼   支持(0)反对(0)回复引用

2012-05-30 07:28 by Boyce Yang  
Mark
 
posted on 2012-06-05 19:43  hirisw  阅读(198)  评论(0编辑  收藏  举报