代码改变世界

随笔档案-2014年03月

业务逻辑层相关(文字信息版本)

2014-03-11 15:46 by JerremyZhang, 452 阅读, 收藏, 编辑
摘要: 主要介绍业务逻辑层的四种组织方式:1.TransactionScript(事务脚本):面向过程式的组织方式,充斥着大量的业务方法,可能会出现好多重复的细粒度的API,使用比较简单,易于上手,但是项目过大,会暴露出其问题,不易扩展2.ActiveRecord(活动记录):该模式比较流行,尤其在底层数据库模型匹配业务模型时,通常,数据库中的每张表都对应一个业务对象。业务对象表示表中的一行,并且包含数据、行为以及持久化该对象的工具,此外还有添加新实例和查找对象集合所需的方法。在ActiveRecord模式中,每个业务对象均负责自己的持久化和相关的业务逻辑。所以ActiveRecord模式非常适合数据 阅读全文

我忽略过的或者未知的,记忆下

2014-03-11 10:50 by JerremyZhang, 297 阅读, 收藏, 编辑
摘要: C#语音播报.Net里面自带了一个语音类库:System.Speech,调用系统的语音功能,就能实现string到语音的转换:using System.Speech.Synthesis; var reader = new SpeechSynthesizer(); reader.SpeakAsync(" Hello, world! ");中文需要操作系统语言包支持C#DateTimeC#中对于DateTime==null,这个值永远为假命题,因为DateTime永远有值,其默认值为0001-01-01,所以和其做逻辑与&&操作的表达式永远执行不到。关于扩展方法 阅读全文

TPL相关

2014-03-11 10:35 by JerremyZhang, 312 阅读, 收藏, 编辑
摘要: C#中的TimerSystem.Windows.Forms.TimerSystem.Threading.TimerSystem.Timers.Timer1.System.Windows.Forms.Timer在激发Timer.Trick的时候,其实是在主线程中执行的,所以可以用来更新所有的UI控件,而不用担心线程安全的问题。2.System.Threading.Timer和System.Timers.Timer都是基于ThreadPool的,每次执行Timer.Trick的时候都会基于ThreadPool创建一个线程,无法直接线程安全的操作主线程中控件。协调数据结构协调数据结构(Coordin 阅读全文

关于MEF

2014-03-11 10:26 by JerremyZhang, 360 阅读, 收藏, 编辑
摘要: MEF(Managed Extensibility Framework)是.NET Framework 4.0一个重要的库,Visual Studio 2010 Code Editor的扩展支持也是基于MEF构建的。MEF组合过程1.创建组件目录(如AssemblyCatalog)2.创建组合容器CompositionContainer3.创建一个组件4.从组件容器获取其它组件功能定义,执行匹配组合var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); //创建一个程序集目录,用于从一个程序集获取所有的组件定义 . 阅读全文

javascript拾遗

2014-03-10 16:20 by JerremyZhang, 190 阅读, 收藏, 编辑
摘要: javascript中,只有null和undefined不能拥有方法,其他任何类型都可以在其上定义方法;字符串既然不是对象,怎么会有属性呢?只有引用了字符串的属性,那么javascript就会将字符串通过调用new String()的方式转换为对象,这个对象继承了字符串的方法,并被用来处理属性的引用。一旦属性引用结束,这个新创建的对象就会销毁(其实在实现上并不一定创建或者销毁这个临时对象,然而整个过程看起来是这样)。同字符串一样,数字和布尔值也具有各自的方法:通过Number()和boolean()构造函数创建一个临时对象,这些方法的调用均是来自于这个临时对象,null和undefined没有 阅读全文

记录下关于SQL Server的东西

2014-03-10 09:58 by JerremyZhang, 389 阅读, 收藏, 编辑
摘要: CTE之所以与其他表表达式不同,是因为它支持递归查询:定义一个递归CTE,至少需要两个查询(或者更多),第一个查询称为定位点成员(anchormember),第二个查询称为递归成员(recursivemember),基本格式如下:定位点成员只是返回有效关系结果表的查询,与用于非递归查询类似,定位点成员查询只被执行一次。递归成员是一个引用了CTE名称的查询,对CTE名称的引用表示查询在一个执行序列中逻辑上的“前一个结果集”,第一次调用递归成员时,它表示的就是定位点成员的查询结果,之后调用递归时,引用CTE则代表前一次调用所返回的结果集。递归成员没有显示的递归终止检查,递归成员会一直被重复调用,直 阅读全文

学习ExpressionTree(做装配脑袋出的练习题)

2014-03-04 14:51 by JerremyZhang, 319 阅读, 收藏, 编辑
摘要: 1 // 第一题:画出下列表达式的表达式树。一开始,您很可能不知道某些操作其实也是表达式(比如取数组的运算符a[2]),不过没有关系,后面的习题将帮你验证这一点。 2 3 //-a 4 ParameterExpression e1 = Expression.Variable(typeof(int), "a"); 5 UnaryExpression u = Expression.Negate(e1);//求反的表达式 6 Console.WriteLine(u); 7 8... 阅读全文
点击右上角即可分享
微信分享提示