12 2005 档案
摘要:又是一年过去了,距离06年剩下不到8个小时了。这一年对自己来说是变化最大的一年,进步最快的一年。这一年有得也有失,有过欢乐也有过痛苦。总想找个时间做一下自我总结,可是又特别不想写,因为我自己不知道该从何写起,回想自己这一年的工作生活变化,真的是很多很乱。可是再不写点什么,可能就要留下遗憾了。这一年总体上来说在技术上提高了不少,思想上也成熟了。 新年到来之际,感谢领导,感谢同事,感谢我生活中的每一位...
阅读全文
摘要:大家都知道,在CodeSmith中现在没有提供选择字段的功能,我们在生成一个List页面时,不可能对整张表的所有字段都生成,所以有必要去实现选择字段的功能。我总结了一下,大体上有以下几种实现思路。
阅读全文
摘要:在CodeSmith中,以下几个快捷键有助于我们快速输入。 1.Ctrl + Shift + C 在空行上,按下Ctrl + Shift + C后将会录入一个代码块。 2.Ctrl + Shift + Q 按下Ctrl + Shift + Q后录入一个脚本块。 3.Ctrl + Shift + V 对代码块反转,如有下面这样一行代码: 在两个大括号之间按下Ctrl + Shift + ...
阅读全文
摘要:Progress对象可以在CodeSmith生成代码时给用户显示一个进度条,当生成代码的时间很长时非常有用。如果你使用的是CodeSmith Explorer,进度条将显示在Generate按钮的左边: 如果使用的是CodeSmith Studio,进度条将显示在状态栏上: 使用Progress和在WinForm中使用进度条差不多,需要设置它的最大值和步长: this.Progress.Max...
阅读全文
摘要:在CodeSmith中使用CodeTemplateInfo可以获取当前模版的一些信息: 属性 返回值 CodeBehind Gets the full path to the code-behind file for the template (or an empty string if there is no code-behind file). ContentHash...
阅读全文
摘要:在CodeSmith中,如果生成的代码是SQL脚本,则可以在生成代码完成时自动执行生成的代码,也就是在生成的SQL脚本的同时在数据库中创建新的对象。 用BaseTemplates.ScriptUtility对象提供ExecuteScript方法可以实现,如果想在生成代码完成后立即执行生成的脚本,可以很方便的通过重载OnPostRender来实现。 在使用之前,先添加对下列程序集的引用: 看下面的...
阅读全文
摘要:最近跟同事在研究CodeSmith,感觉中文文档是少之又少,所以我们自己写(翻译)了一些文档,总结如下,希望对使用CodeSmith的朋友有所帮助。
等整个文档完成后,我会做成PDF文件供大家下载。
阅读全文
摘要:如果你需要提供一个复杂的组合用户界面来输入元数据,这时就要添加设计器的支持。换句话说,除此之外没有别的办法来输入你自定义的元数据类型。添加设计器的支持,首先你要创建一个Editor作为自定义的类型,一个Editor其实就一个继承于.NET 中的System.Drawing.Design.UITypeEditor类的子类。 安装CodeSmith后在,在C:\Program File\CodeSmi...
阅读全文
摘要:CodeSmith在执行模版时通过调用一些API来完成的,主要经过了以下这几步的操作: l 编译一个模版 l 显示编译错误信息 l 创建一个新的模版实例 l 用元数据填充模版 l 输出结果 下面这段代码显示了这些操作: CodeTemplateCompiler compiler = new CodeTemplateC...
阅读全文
摘要:在CodeSmith中,CodeTemplate.Render方法是在模版执行完成进行模版输出时执行,你可以通过重载CodeTemplate.Render方法来修改CodeSmith输出时的事件处理。例如:你可以修改模版输出时的方式来代替现在默认的方式,下面这段代码展示了在保持CodeSmith默认的窗口显示的同时,把结果输出到两个不同的文件。 1 2 3This template demo...
阅读全文
摘要:在CodeSmith中,要把生成的代码文件输出到文件中,你需要在自己的模版中继承OutputFileCodeTemplate类。 OutputFileCodeTemplate主要做两件事情: 1.它添加一个名为OutputFile的属性到你的模版中,该属性要求你必须选择一个文件; 2.模版重载了方法OnPostRender(),在CodeSmith生成代码完成后把相应的内容写入到指定的文件中去。...
阅读全文
摘要:在使用CodeSmith进行代码生成的时候,你可能需要在子模版和父模版之间共享属性。比如,写一个基于数据库生成代码的模版,在每个模版里面都定义了一个名为Server的属性。当你在父模版中使用此属性时,它的值只对父模版起作用。想要设置此值到子模版,可以在父模版中使用CopyPropertiesTo方法,当在父模版中使用此属性时,它的值会发送到子模版中去。下面这段代码展示了如何使用该方法: //...
阅读全文
摘要:CodeSmith允许我们存储元数据在XML文件中,然后在执行模版时直接打开XML文件填写到属性面板中。 1.XML Property With a Schema 1 2 6 7 8 9 10 11 12 13 14 15 16 ...
阅读全文
摘要:用CodeSmith生成可变化的代码,其实是先利用CodeSmith生成一个基类,然后自定义其它类继承于该类。当我们重新生成基类时CodeSmith不要接触继承的子类中的代码。看下面的这段模版脚本: class { m_; public ( ) { m_ = }} 执行该模版并输入如下数据: 该模版生成的代码可能如下: 1class Accou...
阅读全文
摘要:SchemaExplorer允许我们获取数据库中一些对象的信息。如果你使用的是SQL Server2000数据库,你可以通过扩展属性获取很多对象的有用的信息。
阅读全文
摘要:使用FileDialogAttribute可以设置FileNameEditor中的属性,其用法如下。
阅读全文
摘要:FileNameEditor类给我们提供了在CodeSmith属性面板中弹出打开或保存文件对话框的方式,在使用时,首先在模版中得添加对程序集CodeSmith.CustomProperties的引用。然后就可以在模版中定义一个属性来使用FileNameEditor。
阅读全文
摘要:昨天写了一篇《你真的了解.NET中的String吗?》的随笔,引起了大家的广泛关注。其中一些朋友发现文中存在的问题,这里我得接受批评,同时也深深体会到了博客园的宣传语“像写代码一样写文章”的深刻意义。写出来的文章如果误导了读者,那就是大罪过了。 1.关于字符串的比较: 经过查找发现= =操作符是Equals的重载,所以这点在文中有误。 public static bool operator =...
阅读全文
摘要:我们都知道,当存储过程引用的表改变时,SQL Server会重新编译该存储过程。但是当我们增加一个有助于存储过程执行效率的索引时,SQL Server却不会重新编译该存储过程。只有当存储过程高速缓存被冲刷时(SQL Server重新启动),存储过程才会被重新编译。 如果想要强制编译一个存储过程,可以调用系统存储过程: Execute sp_recompile P_Sys_OrderRead 当一张...
阅读全文
摘要:String在任何语言中,都有它的特殊性,在.NET中也是如此。它属于基本数据类型,也是基本数据类型中唯一的引用类型。字符串可以声明为常量,但是它却放在了堆中。
本文从String类型是不可改变对象说起,深入探讨了字符串的引用、驻留、比较操作效率以及StringBuilder等内容。
阅读全文
摘要:StringCollection提供了一种集合的输入方式,在代码中,可以用Array的方式来引用。在使用这个类之前,在模版中我们必须添加对CodeSmith.CustomProperties程序集的引用: 添加完程序集之后,我们就可以使用StringCollection在脚本块中定义一个属性: 执行该模版时,这个属性将在属性窗体中显示为一个按钮: 单击按钮,将会弹出一个String C...
阅读全文
摘要:虽然不能完全避免死锁,但我们可以将死锁减至最少,并通过一定的方法来检测死锁。如果发生死锁了,我们怎么去检测具体发生死锁的是哪条SQL语句或存储过程?如何去手动的杀死进程和锁?如何查看系统中所有锁的详细信息?
阅读全文
摘要:先看一下这段Javascript脚本代码: 1 alert 出来的是什么?在我们看来应该是 "aaa",实际上alert 出来的是 "undefined"。为什么? 因为 Javascript为了简化处理,变量实际上只有两种作用域,全局变量和函数的内部变量。你在函数内部任何一个地方定义的变量其作用域都是整个函数体。而在 alert 的时候函数的内部变量 v 已经定义了,并且覆盖掉了同名的全局变量...
阅读全文
摘要:在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?这就是要说的建造者模式。
本文通过现实生活中的买KFC的例子,用图解的方式来诠释建造者模式。
阅读全文
摘要:在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合?这就是我们要说的抽象工厂模式。
本文力图通过一个通俗易懂的计算工资程序,用一种全新的方式来说明抽象工厂模式。
阅读全文
摘要:在.NET中,可以轻松的通过try-catch块来捕获异常。为了防止在应用程序中出现未处理的异常,可以通过添加一个全局的异常处理函数,如果是多线程的处理,还必须考虑除了主线程之外的工作线程中的异常处理办法,这里用委托机制来实现。
阅读全文
摘要:SOA(面向服务架构),一个炙手可热的话题。今天上午看CSDN新闻,发现在首页IT新闻区里面基本上全是SOA的报道,看来一个SOA时代真的到来了。
阅读全文
摘要:Sigleton设计模式是一个非常有用的机制,可用于在面向对象的应用程序中提供单个访问点。文中通过五种实现方式的比较和一个完整的示例,完成了对Sigleton模式的一个总结和探索。用一句广告词来概括Sigleton模式就是“简约而不简单”。
阅读全文
摘要:加入Design & Pattern团队有几个月的时间了,惭愧的是从没有写过关于设计模式的随笔,得到wayfarer的同意,把企业库系列的随笔放在了团队的首页上。不是不想去写这样的随笔,也不是没有时间,自己初学设计模式,去写设计模式的文章,有点班门弄斧的味道。园子里吕震宇老师的《设计模式系列》和wayfarer的《设计之道》堪称设计模式里的经典之作。可是正如wafarer所说的那样,受到发表欲的蛊惑,本着交流就是进步的想法,思考再三,还是决定写这样的随笔,来对设计模式做一些探索和总结,起名曰“探索设计模式”,有些言过其实,就当是记录自己学习设计模式的历程吧,不过还是希望能得到各位前辈的指点!
阅读全文
摘要:AppSetting Application Block并不是企业库里面的一个应用程序块。它可以使我们运用企业库的配置工具来管理类似于appSetting这样的配置文件中的标记,像我们经常用到的数据库连接字符串。
阅读全文
摘要:配置应用程序块为应用系统提供了一个通用的配置管理解决方案,可以方便的从各种存储中读取配置信息。在设计上旨在提供一个用于读/写配置数据的简单接口,实现配置数据的读写与数据的存储相分离。使用Storage Provider 和 Transformers在应用和物理存储之间传递数据,同时采用抽象AbstractFactory模式生成Provider数据。
概述
结构设计
解耦
简化配置
扩展器和工厂
阅读全文
摘要:在本篇随笔中,通过一些简单的示例来说一下Web Service中的异步调用模式。
概述
客户端异步调用方法
服务端使用Soap One-Way方法
服务端使用WSE SoapSender和SoapRecevier
服务端使用WSE 自定义SoapMSMQ传输
阅读全文
摘要:利用Jmail发送和接收邮件.
阅读全文
摘要:写入XML,通过DOM,XMLReader,XPath读取XML文件,显示XML文件,验证XML文件。
阅读全文
摘要:有朋友给我留言说希望能写一下在企业库里面基于MSMQ的异步日志,正好最近有点时间,于是便有了这篇随笔。
阅读全文
摘要:包含内容:读取文本文件,获取文件列表,读取日志文件,写入日志文件,创建HTML文件。
阅读全文
摘要:保存图片到XML文件及从XML文件中读取。
阅读全文