.NET模式:架构、设计与过程
基本信息
- 作者: (美)Thimany
- 译者: 张晓坤 汤涛 谭立平
- 出版社:中国电力出版社
- ISBN:7508332733
- 上架时间:2005-6-23
- 出版日期:2005 年6月
- 开本:16开
- 页码:300
- 版次:1-1
- 所属分类:
计算机 > 软件与程序设计 > .NET > 综合
合作专区 > 微软技术图书 > 微软程序设计 > 微软.NET
编辑推荐
本书作者探索出一些非常实用的模式,并且提供了.NET环境下的指导以及实现的代码。另外,作者还提炼出一些切实可行的产品开发思路——这也是本书的精华所在。
内容简介回到顶部↑
模式对那些知道如何编程的人而言是一种很实用的工具。在本书中,作者结合了设计模式世界的抽象和包含于.NET中的具体开发方案。书中的观念对于众多的.NET开发人员来说都是非常有用的。
本书分为三个部分,共7章。第一部分介绍.NET、设计的元素以及开始编写应用程序所需要的架构。第二部分强调了在一个架构层的该做和不该做的事情,将模式分类到三个层当中:表示层、中间层和存储层。最后一部分包括了更高级的模式,介绍了异步行为、复杂线程和缓存等内容。
本书结构合理、概念清晰、实例丰富,并具有很强的启发性和实用性。
读者对象:本书适合于那些从事.NET编程的程序员和广大爱好者阅读
本书分为三个部分,共7章。第一部分介绍.NET、设计的元素以及开始编写应用程序所需要的架构。第二部分强调了在一个架构层的该做和不该做的事情,将模式分类到三个层当中:表示层、中间层和存储层。最后一部分包括了更高级的模式,介绍了异步行为、复杂线程和缓存等内容。
本书结构合理、概念清晰、实例丰富,并具有很强的启发性和实用性。
读者对象:本书适合于那些从事.NET编程的程序员和广大爱好者阅读
作译者回到顶部↑
目录回到顶部↑
序
前言
第一部分 用.net构建框架
第一章 新的框架、新的模型、新的度量 3
打住,这不是另一种语言! 3
.net框架和分布式的新世界 4
.net和xml web服务 9
xml web服务入门 13
.net的亮点 23
模式解说 25
历史和分类 26
模式分类 27
模式库 28
如何使用模式库 29
第二章 框架模式:异常处理、日志记录和跟踪 31
概述 31
异常处理 32
构建一个异常基类 36
管理异常边界 44
技术背景资料——soap fault 46
前言
第一部分 用.net构建框架
第一章 新的框架、新的模型、新的度量 3
打住,这不是另一种语言! 3
.net框架和分布式的新世界 4
.net和xml web服务 9
xml web服务入门 13
.net的亮点 23
模式解说 25
历史和分类 26
模式分类 27
模式库 28
如何使用模式库 29
第二章 框架模式:异常处理、日志记录和跟踪 31
概述 31
异常处理 32
构建一个异常基类 36
管理异常边界 44
技术背景资料——soap fault 46
译者序回到顶部↑
一本书的产生不只是作者编写它。它是某些观念的创作付出、与白色书写板的对话、艺术作品、编辑学,最重要的是时间的有机结合。有许多人有意或无意地参与了这18个月的工程。最容易忘记的人就是这些为进行这本书而贡献了无形的资产(例如时间和耐心)的人。我要感谢那些帮助我从最初模糊的想法到设计、到编码、到内容再到产品的走过来的人们。他们不只是专心地准备了这里所使用的材料,并且也让我有时间在这个工程中使用它。还有像Brett Walker这样的人,给与了我在这本书上的时间,而这些时间本来可以用于立即获取更大利润。因此,我要感谢所有这些为从想法到产品做出贡献的人,按做出贡献的时间顺序排列。
感谢Paul Becker花时间倾听我对这本书的想法,以及评价它的前提价值。特别感谢John Neidhart在Addison加速了这个工程,信任地(用了很少的时间考察)接纳了它的观念,并为我提供了更实用的交付方式。感谢产品组的所有成员(Kyle Howard、Marti Jones和Patti Guerrieri),为我写这本书尽可能减少痛苦所作的努力。
感谢Brett Walker使我在他的公司与他一同工作时,有时间继续写这本书。我被赋予使用这本书中的原则来设计产品应用的能力,并且Brett为我提供了最好的测试平台。没有这种合作和共同的努力,这本书中许多原则可能陷入理论的深坑。Brett Walker、David Mytchak、James Williams 在许多模式方面,给予了我最重要的反馈和创造性鼓舞。没有David Mytchak的帮助,自早期的那几个月我的想法将不会成为现实。没有David的想法和James的代码,我将无法跨越某些传统的思想,并创建第五章。在这里描述的多模型便是源自你们的“原始想法”。
我还要感谢在2003年早春加入公司之前,Microsoft所有关心这本书的人。Microsoft的每个人都对这项工程如此支持,并帮助我提炼本书的信息。在这里所使用的材料,非常漂亮地符合Microsoft的约定标记和它的自己的架构原则。它真正地向你展示了好的设计就是好的设计,无论你怎么打击它。特别感谢Gulf Coast开发组的成员(我是其中的一员):Ed Draper、J Sawyer、Michael Lane Thomas和John Opalko,他们帮助我在他们的现场幻灯片的最后几分钟,加入了这本书的存在的消息。
感谢我的妻子Hilari。到这本书出版时为止,我们刚刚度蜜月回来。我们现在可以回顾并享受我们劳动的成果。我们现在可以欣赏所有花费在我的电脑前的周末和周日夜晚,那时她不得不将食物悄悄地放在我的门后。非常感谢她对于这项工程的耐心和理解。感谢我的母亲所提供的所有的“小的协助”,让我节省了大量的时间,可以进行这本书。
最后,我要感谢Brian Eshelman,他是第三章所有内容的主要贡献者,这使得我节省了一些时光。这里是他的想法、设计和代码。没有他们,我的最后期限可能危难重重——非常感谢你,Brian,为这本书所作的一部分。你是一个杰出的设计师、开发者和朋友。
感谢Paul Becker花时间倾听我对这本书的想法,以及评价它的前提价值。特别感谢John Neidhart在Addison加速了这个工程,信任地(用了很少的时间考察)接纳了它的观念,并为我提供了更实用的交付方式。感谢产品组的所有成员(Kyle Howard、Marti Jones和Patti Guerrieri),为我写这本书尽可能减少痛苦所作的努力。
感谢Brett Walker使我在他的公司与他一同工作时,有时间继续写这本书。我被赋予使用这本书中的原则来设计产品应用的能力,并且Brett为我提供了最好的测试平台。没有这种合作和共同的努力,这本书中许多原则可能陷入理论的深坑。Brett Walker、David Mytchak、James Williams 在许多模式方面,给予了我最重要的反馈和创造性鼓舞。没有David Mytchak的帮助,自早期的那几个月我的想法将不会成为现实。没有David的想法和James的代码,我将无法跨越某些传统的思想,并创建第五章。在这里描述的多模型便是源自你们的“原始想法”。
我还要感谢在2003年早春加入公司之前,Microsoft所有关心这本书的人。Microsoft的每个人都对这项工程如此支持,并帮助我提炼本书的信息。在这里所使用的材料,非常漂亮地符合Microsoft的约定标记和它的自己的架构原则。它真正地向你展示了好的设计就是好的设计,无论你怎么打击它。特别感谢Gulf Coast开发组的成员(我是其中的一员):Ed Draper、J Sawyer、Michael Lane Thomas和John Opalko,他们帮助我在他们的现场幻灯片的最后几分钟,加入了这本书的存在的消息。
感谢我的妻子Hilari。到这本书出版时为止,我们刚刚度蜜月回来。我们现在可以回顾并享受我们劳动的成果。我们现在可以欣赏所有花费在我的电脑前的周末和周日夜晚,那时她不得不将食物悄悄地放在我的门后。非常感谢她对于这项工程的耐心和理解。感谢我的母亲所提供的所有的“小的协助”,让我节省了大量的时间,可以进行这本书。
最后,我要感谢Brian Eshelman,他是第三章所有内容的主要贡献者,这使得我节省了一些时光。这里是他的想法、设计和代码。没有他们,我的最后期限可能危难重重——非常感谢你,Brian,为这本书所作的一部分。你是一个杰出的设计师、开发者和朋友。
前言回到顶部↑
.NET之路和本书
到目前为止,在软件架构、设计和“专业化”原则领域,我们已经被众多混乱的材料所淹没了。当一门新语言或者技术出现在市面上时,对于设计材料方面的需求似乎总会达到巅峰状态。当Java刚开始面世的时候,你可能看到开发人员涌入书店中,选择最新出版的《Learn Java in 10 minutes》。Java不仅仅是一门新语言,也是一个新平台,还是一种用来开发丰富的Internet应用程序的语言。开发人员不仅面临着一门新语法的挑战,而且还不得不学习这门新开发方法的新语义。对于那些没有接触过面向对象技术的人来说,这意味着更陡的学习曲线(learning curve)。在Java中每样东西都是对象,在精通了语法和基础库之后,另一个学习级别就是设计健壮和可重用的应用程序。自从Java诞生,我就从事Java方面的编程,我希望我能与您分享在一些材料所提供的新技术中我所看到的一些东西。这本书讲的几乎全是许许多多的“do’s and don’ts(做什么和不做什么)”,这些都是在我学习.NET并努力精通它的过程中所遇到的。
在作为一个.NET架构师返回Microsoft和热忱地从事Java之前,我真切地努力使自己公平地对待Sun和Microsoft两大巨人之间的技术和语言战争。我从没确定对于任何一方的偏见。Java毫无疑问有它的实力,并且在.NET之前,因为许多原因它已经成为我最喜欢的面向对象语言。我喜欢它的语法、线程模型、类型系统,尤其是基类库。从C/C++和Visual Basic走过来的人,接着无疑是使用Java。你不用再在C运行时和扩展类库的无数重复功能性当中挣扎了。但我们很快发现Java并不是完美的。“Write Once,Run everywhere(一次编写,随处运行)”并不像最初承诺的那么好。开发一个自定义的Java GUI并不是那么简单,并且对于代码的生成有太多厂商选择。面向对象也成为了主流,对设计原则的需求使用它。
Microsoft平台同样有它自身的实力。Visual Basic为构建丰富的GUI应用程序,提供了快速的开发周期。随着Visual Basic的成熟,调整开发专门代码的需求越来越难,例如COM组件使用一种较低级的语言,例如C++。Visual Basic(VB)可以为你提供这些,而不需要做太多的事情,当然,你是在编写一个商业产品,并且需要非常专业化的行为或一个非常小的.DLL。使用VB可以在几个星期内让你的商业应用成为产品,而不需要花几个月时间。任何在Java或VB上从事过GUI开发的人,都能明白我所谈论的东西。从开发的角度来看,我喜欢Java,但将使用AWT、Swing或我所使用的任何第三方类库的GUI应用集成到一起是一件痛苦的事情。随着Java的成熟,第三方会使得它更容易,但你会发现你淹没在太多的选择中了。选择某一个,你便冒着风险采取了一种可能没有支持或没有市场的技术。这似乎总是一个问题,因为这门语言的创建者并没有为所创建的语言,提供一个最广为使用的开发环境。这是Java的实际情况。
以我拙见,甚至在我加入Microsoft之前,我就感觉到它已经构造了一些最好的集成开发环境(IDE)。当然,有一些更强大的编辑器为开发人员提供了一种无所不知的感觉。然而对于大多数人来说,你想要的是一个设计良好的、紧密集成的和对用户友好的IDE,它不仅要可靠而且很平常。在UNIX世界,使得vi如此盛行的原因也正是Visual Studio如此吸引人的原因——它随处都可以找得到。如果在Windows 2000上开发Visual Basic或C++应用程序,Visual Studio通常是你所使用的工具。而在Java 世界却不是这样。你可以使用BEA、Borland、Sun和IBM等厂商的编辑器。作为一个Java顾问,我需要尝试所有主要厂商的编辑器,因为似乎没有一个编辑器是真正杰出的。对于资本主义制度来说,这种“开放市场”观念似乎是很有吸引力的,但对于工程学来说,它创建了一种回旋(convolution)。
我曾经对自己说,“要是有一个平台,它结合了Java和Visual Basic的优点,又能提供C++的强大功能该多好啊。”这就是.NET(尤其是C#)。我希望当我这么说的时候,并没有使得太多人脸红而想放下这本书。但对于双边的语言战争,我希望我有权利作出这样一个选择。.NET框架包含了在Java中我喜欢的每一样东西,甚至更多。你不用再被迫选择一门语言,并且遭受实际开发中类库不一致的痛苦,更不用说我将要在本书中提到的为数众多的其他好处。作为第一代产品(.NET框架1.1在本书中仍然算第一代产品),我对我们今天所拥有的功能性(functionality)感到惊讶,而这不过是冰山之一角。有希望的是,在随后的数年,.NET将会继续改进,成为将来的跨平台开发框架,并为这些环境带来好处。考虑在.NET框架1.1版本和Visual Studio .NET中已经提供的相当数量的功能性,我可以想像得到今后的两年.NET平台将会更进一步。Microsoft生产这个不同开发环境的速度是惊人的,使我想起在如此短的时间内Internet Explorer成为市面上重要的浏览器。这不只是因为良好的市场,还有良好的交付。如果你是一个Java开发人员,将.NET当成一个重要的转变;我想你将不会后悔。
我开始这本书正是在.NET Beta 2发布之后,这时.NET类库和其运行时的大部分主要特征都已经完成了。一年之后,当你拿起本书的第一版时.NET框架版本应该发布和公开了。令人感到高兴的是,在那时并没有太大的改变。只在原始发布的版本和Beta 2的稳定性方面谈论了许多。实际上,如果你刚好有一个旧版的Beta 2版本,你可以随意地测试本书中引用的代码。它应该是可以编译并运行的。毕竟,这是一本关于设计与架构的最佳实践的书。在那个时候,在一个未定的环境中编写代码是很难的,但更难的是试图开发出最好的实践。问题在于编写的代码对于这个技术是不可知的。使用.NET框架1.1对这一点做出严格的测试,我很高兴地发现一切都是兼容的。但本书最终出版时,.NET1.0已经发布一年多了,并且成千上万的开发人员对于其内容、示例代码和使用的原则是哗声一片。我所做的事情是在Beta 2之上进行的。
我希望可以帮助你进入这个远离Microsoft传统开发平台的不同世界。Microsoft不仅引入了等同的一套新语言,而且还提供了在Java世界吸引Java开发人员的相同的元素。Microsoft现在为知道一些面向对象但没有真正经历过的Visual Basic开发人员,真正地提供了面向对象的特征。为.NET的新味道干杯(bottom up)!我相信每个人都会对这道菜感到满意的。
到目前为止,在软件架构、设计和“专业化”原则领域,我们已经被众多混乱的材料所淹没了。当一门新语言或者技术出现在市面上时,对于设计材料方面的需求似乎总会达到巅峰状态。当Java刚开始面世的时候,你可能看到开发人员涌入书店中,选择最新出版的《Learn Java in 10 minutes》。Java不仅仅是一门新语言,也是一个新平台,还是一种用来开发丰富的Internet应用程序的语言。开发人员不仅面临着一门新语法的挑战,而且还不得不学习这门新开发方法的新语义。对于那些没有接触过面向对象技术的人来说,这意味着更陡的学习曲线(learning curve)。在Java中每样东西都是对象,在精通了语法和基础库之后,另一个学习级别就是设计健壮和可重用的应用程序。自从Java诞生,我就从事Java方面的编程,我希望我能与您分享在一些材料所提供的新技术中我所看到的一些东西。这本书讲的几乎全是许许多多的“do’s and don’ts(做什么和不做什么)”,这些都是在我学习.NET并努力精通它的过程中所遇到的。
在作为一个.NET架构师返回Microsoft和热忱地从事Java之前,我真切地努力使自己公平地对待Sun和Microsoft两大巨人之间的技术和语言战争。我从没确定对于任何一方的偏见。Java毫无疑问有它的实力,并且在.NET之前,因为许多原因它已经成为我最喜欢的面向对象语言。我喜欢它的语法、线程模型、类型系统,尤其是基类库。从C/C++和Visual Basic走过来的人,接着无疑是使用Java。你不用再在C运行时和扩展类库的无数重复功能性当中挣扎了。但我们很快发现Java并不是完美的。“Write Once,Run everywhere(一次编写,随处运行)”并不像最初承诺的那么好。开发一个自定义的Java GUI并不是那么简单,并且对于代码的生成有太多厂商选择。面向对象也成为了主流,对设计原则的需求使用它。
Microsoft平台同样有它自身的实力。Visual Basic为构建丰富的GUI应用程序,提供了快速的开发周期。随着Visual Basic的成熟,调整开发专门代码的需求越来越难,例如COM组件使用一种较低级的语言,例如C++。Visual Basic(VB)可以为你提供这些,而不需要做太多的事情,当然,你是在编写一个商业产品,并且需要非常专业化的行为或一个非常小的.DLL。使用VB可以在几个星期内让你的商业应用成为产品,而不需要花几个月时间。任何在Java或VB上从事过GUI开发的人,都能明白我所谈论的东西。从开发的角度来看,我喜欢Java,但将使用AWT、Swing或我所使用的任何第三方类库的GUI应用集成到一起是一件痛苦的事情。随着Java的成熟,第三方会使得它更容易,但你会发现你淹没在太多的选择中了。选择某一个,你便冒着风险采取了一种可能没有支持或没有市场的技术。这似乎总是一个问题,因为这门语言的创建者并没有为所创建的语言,提供一个最广为使用的开发环境。这是Java的实际情况。
以我拙见,甚至在我加入Microsoft之前,我就感觉到它已经构造了一些最好的集成开发环境(IDE)。当然,有一些更强大的编辑器为开发人员提供了一种无所不知的感觉。然而对于大多数人来说,你想要的是一个设计良好的、紧密集成的和对用户友好的IDE,它不仅要可靠而且很平常。在UNIX世界,使得vi如此盛行的原因也正是Visual Studio如此吸引人的原因——它随处都可以找得到。如果在Windows 2000上开发Visual Basic或C++应用程序,Visual Studio通常是你所使用的工具。而在Java 世界却不是这样。你可以使用BEA、Borland、Sun和IBM等厂商的编辑器。作为一个Java顾问,我需要尝试所有主要厂商的编辑器,因为似乎没有一个编辑器是真正杰出的。对于资本主义制度来说,这种“开放市场”观念似乎是很有吸引力的,但对于工程学来说,它创建了一种回旋(convolution)。
我曾经对自己说,“要是有一个平台,它结合了Java和Visual Basic的优点,又能提供C++的强大功能该多好啊。”这就是.NET(尤其是C#)。我希望当我这么说的时候,并没有使得太多人脸红而想放下这本书。但对于双边的语言战争,我希望我有权利作出这样一个选择。.NET框架包含了在Java中我喜欢的每一样东西,甚至更多。你不用再被迫选择一门语言,并且遭受实际开发中类库不一致的痛苦,更不用说我将要在本书中提到的为数众多的其他好处。作为第一代产品(.NET框架1.1在本书中仍然算第一代产品),我对我们今天所拥有的功能性(functionality)感到惊讶,而这不过是冰山之一角。有希望的是,在随后的数年,.NET将会继续改进,成为将来的跨平台开发框架,并为这些环境带来好处。考虑在.NET框架1.1版本和Visual Studio .NET中已经提供的相当数量的功能性,我可以想像得到今后的两年.NET平台将会更进一步。Microsoft生产这个不同开发环境的速度是惊人的,使我想起在如此短的时间内Internet Explorer成为市面上重要的浏览器。这不只是因为良好的市场,还有良好的交付。如果你是一个Java开发人员,将.NET当成一个重要的转变;我想你将不会后悔。
我开始这本书正是在.NET Beta 2发布之后,这时.NET类库和其运行时的大部分主要特征都已经完成了。一年之后,当你拿起本书的第一版时.NET框架版本应该发布和公开了。令人感到高兴的是,在那时并没有太大的改变。只在原始发布的版本和Beta 2的稳定性方面谈论了许多。实际上,如果你刚好有一个旧版的Beta 2版本,你可以随意地测试本书中引用的代码。它应该是可以编译并运行的。毕竟,这是一本关于设计与架构的最佳实践的书。在那个时候,在一个未定的环境中编写代码是很难的,但更难的是试图开发出最好的实践。问题在于编写的代码对于这个技术是不可知的。使用.NET框架1.1对这一点做出严格的测试,我很高兴地发现一切都是兼容的。但本书最终出版时,.NET1.0已经发布一年多了,并且成千上万的开发人员对于其内容、示例代码和使用的原则是哗声一片。我所做的事情是在Beta 2之上进行的。
我希望可以帮助你进入这个远离Microsoft传统开发平台的不同世界。Microsoft不仅引入了等同的一套新语言,而且还提供了在Java世界吸引Java开发人员的相同的元素。Microsoft现在为知道一些面向对象但没有真正经历过的Visual Basic开发人员,真正地提供了面向对象的特征。为.NET的新味道干杯(bottom up)!我相信每个人都会对这道菜感到满意的。
序言回到顶部↑
模式识别是人类智力的基本行为方式。自从Christopher Alexander意识到模式存在于良好的建筑中,软件开发人员也很快明显地谈论到存在于良好的代码中的模式。是什么在推动我们前进?重用(reusing)并非只有代码适用,对于我们创建代码的方式,它也同样有效。
如今可重用代码的最重要的部分之一就是类库,它是.NET 框架的一部分。这个软件的庞大集合提供了一些标准的方式,来操纵XML文档、创建GUI(图形用户接口)、与其他系统通信以及更多其他功能。至少学会使用这些类库中某些部分,是任何Windows软件开发人员的任务。
然而只学会这些技术仍然是不够的。理解.NET命名空间如何工作,并不能自动为你产生高效地应用这种理解所需的智力工具。了解哪种模式在一个给定的.NET上下文中工作得最好,是创建一个良好解决方案的关键部分。
这就是.NET模式:架构、设计和过程产生的原因了。在本书中,Christian Thilmany结合了设计模式世界的抽象和包含于.NET中的具体开发解决方案。其结果便是一套观念,它们用于指导实践和更加正式的模式,而这些对于众多的.NET开发人员来说都将是非常有用的。它们中有一些是很通用的,甚至可以被工作在任何软件环境中的任何人使用。还有一些依赖于.NET的某些相关特征,在这一点上,它恰好是你期望从书中得到的。无论哪种情形,在.NET世界中的软件专业人员都可以从这些以往的经验中获得好处。
设计模式活动在Java社区已经存在很长时间,并成为Java社区不可分割的部分。我非常高兴地看到随着.NET的诞生,Microsoft世界也明确地包含了这些观念。这本书就是迈向这条路上的极具价值的一步。
David Chappell
San Francisco,CA
如今可重用代码的最重要的部分之一就是类库,它是.NET 框架的一部分。这个软件的庞大集合提供了一些标准的方式,来操纵XML文档、创建GUI(图形用户接口)、与其他系统通信以及更多其他功能。至少学会使用这些类库中某些部分,是任何Windows软件开发人员的任务。
然而只学会这些技术仍然是不够的。理解.NET命名空间如何工作,并不能自动为你产生高效地应用这种理解所需的智力工具。了解哪种模式在一个给定的.NET上下文中工作得最好,是创建一个良好解决方案的关键部分。
这就是.NET模式:架构、设计和过程产生的原因了。在本书中,Christian Thilmany结合了设计模式世界的抽象和包含于.NET中的具体开发解决方案。其结果便是一套观念,它们用于指导实践和更加正式的模式,而这些对于众多的.NET开发人员来说都将是非常有用的。它们中有一些是很通用的,甚至可以被工作在任何软件环境中的任何人使用。还有一些依赖于.NET的某些相关特征,在这一点上,它恰好是你期望从书中得到的。无论哪种情形,在.NET世界中的软件专业人员都可以从这些以往的经验中获得好处。
设计模式活动在Java社区已经存在很长时间,并成为Java社区不可分割的部分。我非常高兴地看到随着.NET的诞生,Microsoft世界也明确地包含了这些观念。这本书就是迈向这条路上的极具价值的一步。
David Chappell
San Francisco,CA
相关资源回到顶部↑
· 精彩评论..
· 【推荐】众多高校学子口口相传,他们共同的选择--华清远见嵌入式学院(嵌入式Linux就业课程、3G手机开发就业课程,通过入学测试即签100%就业协议,4个月集中实训,世界500强企业成功就业保障!!!)· 【亚嵌教育 嵌入式培训专家】(嵌入式培训,嵌入式Linux培训,ARM培训,Linux培训,3G培训,Android培训,WINCE培训,DSP培训,FPGA培训,嵌入式就业培训)
· InfoQ中文站论坛:.NET讨论区(InfoQ .NET)
· 程序员的7种武器(正则表达式、编程语言、数据库、算法、软件调试、开发环境)
· WCF的开山之作 WCF画卷的清明上河图(WCF WF WPF)








点击看大图





加载中...

