摘要:一、概述在软件开发特别是DSL开发中常常需要使用一些相对较复杂的业务语言,如果业务语言使用频率足够高,且使用普通的编程模式来实现会导致非常复杂的变化,那么就可以考虑使用解释器模式构建一个解释器对复杂的业务语言进行翻译。这种做法虽然效率相对较低,但可以允许用户使用自定义的业务语言来处理逻辑,因此在效率不是关键问题的场合还是较为有用的。二、解释器模式解释器模式描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这些句子。其结构图如下:AbstractExpression声明一个为抽象语法树中所有节点所共享的解释接口。TerminalExpression表示终结符表达式,实现
阅读全文
随笔分类 - C#
摘要:在系统运维中常常需要定期去跑一些计划任务,比如扫描服务器监控其性能、检查SQL Server作业是否正常、监控MQ队列是否存在堵塞现象等。如果使用Windows计划任务调度,一来管理起来就比较松散,二来如需更改计划任务的配置就必须登录到服务器上进行修改,造成很大的不便。因此笔者在实际工作中自行开发计划任务调度服务来处理这些任务,将调度周期、任务配置等经常需要修改的配置信息保存到数据库中,并开发一个前台界面进行维护和管理。一、基本结构计划任务调度服务使用插件的方式处理各类不同的计划任务,插件必须继承自服务框架提供的MonitorTask抽象类,并在数据库中注册任务名、调度周期等信息,这样就可以由
阅读全文
摘要:委托是C#中的一种类型,它类似于C++中的函数指针,不同的是委托是类型安全的。在实际应用中,委托一个很大的作用就是实现了对方法变化的封装。前阵子我就碰到了一个例子,改动一下拿出来进行演示。需求大体是这样的,根据提供的人员名单得出这些人员手机号码的列表,人员与手机号码的对应关系保存在数据库中。很简单的一个需求,实现代码如下:View Code 1 public IList<string> GetSMSList(List<string> userList)2 {3 List<string> phoneList =new List<string>();
阅读全文
摘要:.NET 4.0增加了不少新特性,并行计算库TPL的引入就是其中之一。TPL不仅大幅提升了并行计算的效率,同时也使得并行计算代码的编写更为简单和方便。最近对此进行了一个小小的测试。首先进行一下简单计算的测试,实现从1到10000000的累加。代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->staticvoid SimpleTest(){ Stopwatch watch =new Stopwatch(); watch.Start();...
阅读全文