Builder模式应用实践

本文为《软件设计精要与模式》第十七章

在GOF 所著的《设计模式》一书中,描述了Builder模式的意图:“将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。”按照封装变化的原理,Builder模式实则是封装对象创建的变化,但它与Factory Method模式、Abstract Factory模式不同的是,所谓对象的创建,主要是指对象内部构件的创建。形象地说,Builder模式就好似生产线的装配工人,可以接收多种方式与顺序组装各种零部件。本章,将给出我参与设计与开发的CIMS系统中的一个需求,详细讲解Builder模式的应用。

More...

标签:

WF基础知识问答

Shivprasad koirala在CodeProject上发表了一篇文章Windows Workflow Foundation FAQ,介绍了WF的基础知识。这对于理清WF的整个脉络有一定帮助,摘译如下。

什么是Windows工作流基础?

WWF(张逸注:微软的官方简称为WF)是一种编程模型,用于在Windows中构建支持工作流的应用程序。WF程序集的命名空间为System.Workflow。

More...

标签:

WCF中的Dispose

在我翻译的InfoQ新闻《WCF的问题和Using语句块》中提到了释放客户端资源(其中包括端口、通道)和关闭连接的问题。新闻并没有很深入地讨论,所以我想再补充一些内容。

毫 无疑问,在.NET Framework中,一个资源(尤其是非托管资源)通常都需要实现IDisposable接口。一旦实现了该接口,我们就可以使用using语句来管理 资源,这是最便捷的方式。但是,一旦在using语句中抛出了异常,就可能不会正确完成资源的回收,尤其是连接,很可能会一直打开,既占用了通道和端口, 还可能出现资源的浪费,从而影响系统的性能和稳定性。

More...

标签:

测试驱动开发实践

本文为《软件设计精要与模式》第四章

在企业运营理论体系中,有一种理论叫做运行价值链。它将企业的运营分为三个步骤:首先是发现价值,找到目标市场;然后是生产价值,将高质量的产品生产出 来;最后是保护价值或收获价值,保证产品的质量,做好品牌。我们应该如何理解运行价值链呢?以nike为例,在nike鞋的企业运行过程中,首先是设计 nike鞋,也就是运行价值链中的发现价值。在这个过程中,可能收获50美元的价值。然后是生产。nike公司为了降低成本,会将生产基地设在劳动力成本 较低的国家,例如中国进行生产。这其中的价值大约是10美元。最后,再将生产好的鞋子,贴上nike的商标后送回到美国本土进行销售,又可以收获40美元 的价值。一双鞋利润100美元,而生产价值所能收获的却仅有10美元。这一步获取利益最低,但我们中国本土的公司却做得最好;而对于如何去发现价值,然后又怎样去巩固自己的品牌和知名度,中国的公司就只能说是差强人意了。

More...

标签:

翻译Programming WCF Services第二版

Juval Löwy的《Programming WCF Services》(本书中文版名为《WCF服务编程》,张逸、徐宁译,2008年1月由机械工业出版社出版)可以说是微软WCF技术书籍的开山之作。我在本书的译者序中这样写道:“它全面准确地为我们描绘了一幅WCF画卷的清明上河图”。这句话也成为了机械工业出版社为本书造势的宣传语。随着《Programming WCF Services》中文版在国内的出版,有关WCF的书籍也如雨后春笋一般涌现出来,其中不乏出类拔萃者,但却始终无法撼动《Programming WCF Services》在众多WCF技术书籍中的独特地位。是的,本书并非剖析WCF本质的煌煌巨著,例如像Don Box的那本不朽著作《Essential Com》。同样还有一本讲解技术本质的,除了Don Box的另一本著作《Essential .NET》之外,我还拜读过Dharma Shukla与Bob Schmidt所著的《Essential Windows Workflow Foundation》。必须承认,在WCF技术领域内,目前还缺乏这样一本分析技术本质的佳作。然而不可否认的是,对于WCF技术的推广而言,只有《Programming WCF Services》这样类型的书才是最佳选择。因为它“不仅具有高屋建瓴地体系架构知识,同时又能够细致入微地观察技术细节,然后用深入浅出的语言打造成通俗易懂的著作。就像清明上河图一般,巨细靡遗,浑然天成。”

More...

标签:

Martin Fowler确定QCon北京演讲

敏捷宣言缔造者之一、ThoughtWorks首席科学家Martin Fowler日前确定了他在QCon北京大会上的演讲题目。在4月即将举行的QCon全球企业开发大会北京站上,他将进行两个演讲,一个是其最近一直关注的领域特定语言,一个是对ThoughtWorks在过去几年中使用Ruby语言的总结和展望。

在“领域特定语言的发展和应用”演讲中,Martin Fowler将围绕一下观点展开讨论:

领域特定语言(DSLs)已经产生了20多年,但是一直没有成为主流。最近几年,它似有蓬勃喷发之意,这也促使我在我的下一本书中将它列为主题。在这个演讲中,我会介绍该书中所涉及的领域特定语言相关内容:包括领域特定语言的案例,内部(internal)和外部 (external)领域特定语言的区别,语言工作台(Workbench)的角色,以及为什么要考虑使用领域特定语言。

 

More...

标签:

聚焦WCF行为的扩展

WCF以其灵活的可扩展架构为开发者提供了方便,其中对行为的扩展或许是应用中最为常见的。自 定义对行为的扩展并不复杂,但仍有许多细节需要注意。在服务端,一般是对DispatchRuntime和DispatchOperation进行扩展, 扩展点包括了对参数和消息的检查,以及操作调用程序,它们对应的接口分别为 IParameterInspector,IDispatchMessageInspector以及IOperationInvoker。而在客户端,则 是对ClientRuntime和ClientOperation进行扩展,扩展点包括对参数和消息的检查,对应的接口分别为 IParameterInspector和IClientMessageInspector。这些接口类型均被定义在 System.ServiceModel.Dispatcher命名空间下,其中IParameterInspector接口可以同时作用在服务端和客户端。

More...

标签:

在Dictionary中使用枚举

自从.NET Framework 2.0引入泛型之后,对集合的使用就开创了新的局面。首先我们不用考虑类型是否安全,利用泛型以及对泛型参数的约束完全可以保障这一点;其次,集合元素不会因为频繁的Boxing和Unboxing而影响集合遍历与操作的性能。泛型带来的这两点好处毋庸置疑。在Dictionary<TKey, TValue>中,除了字符串,我们普遍会使用值类型作为它的key,例如int类型。而枚举类型作为一种值类型,在某些时候特别是需要位操作的时候,也会经常用作key。问题就出现在这里。

More...

标签:

WCF基础知识问与答

1、WCF是什么?

从WCF所处的位置来看,它是包含在.NET 3.0(也包括.NET 3.5)之中的。我们注意比较.NET 3.0与.NET 2.0,其实唯一的区别就是.NET 3.0包含了WCF、WPF、WF(或者还有CardSpace)而已。因此,我们认为WCF是.NET框架的一部分,似乎并不为过。尤为关键的 是,WCF并不能脱离.NET框架而单独存在(但非WCF客户端可以调用WCF服务),因此,虽然WCF是微软用以应对SOA解决方案的开发需求而专门推 出的,但它并不是例如Spring、Struts那样的框架,也不是像EJB那样的容器或者服务器。微软真正符合SOA企业应用服务器角色的,我想应该是 Biztalk Server。

More...

标签:

当弱引用对象成为集合元素时

当我们在系统用到某些占用内存较多的大对象,且该对象并不会被频繁使用(例如缓存场景)时,考虑性能因素,或许我们可以选择使用弱引用(WeakReference)对象。弱引用对象就像是对象之中的“无间行者”,行走于“活动”与“非活动”状态之间。可能在某个时刻虽然对该对象存在引用,然而垃圾回收器仍然可以对其进行回收,这使得我们对该对象的调用始终存在一种不可预知性,除非我们通过Target属性赋给对象,以创建强引用,否则我们始终处于这种忧虑之中。然而考虑到性能,我们在合适的场景仍然可以考虑弱引用。

More...

标签: