﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-Anytao</title><link>http://www.cnblogs.com/anytao/</link><description> 
		Anytao | 
		inAspnet | 
		CLRTeam | 
		Life | 
		Reader | 
		Doc | 
		Contact | 
		About


--&gt;
</description><language>zh-cn</language><lastBuildDate>Tue, 06 Jan 2009 19:43:48 GMT</lastBuildDate><pubDate>Tue, 06 Jan 2009 19:43:48 GMT</pubDate><ttl>60</ttl><item><title>我的2008，专注而行</title><link>http://www.cnblogs.com/anytao/archive/2008/12/31/anytao_my_2008.html</link><dc:creator>Anytao</dc:creator><author>Anytao</author><pubDate>Tue, 30 Dec 2008 16:11:00 GMT</pubDate><guid>http://www.cnblogs.com/anytao/archive/2008/12/31/anytao_my_2008.html</guid><wfw:comment>http://www.cnblogs.com/anytao/comments/1365688.html</wfw:comment><comments>http://www.cnblogs.com/anytao/archive/2008/12/31/anytao_my_2008.html#Feedback</comments><slash:comments>85</slash:comments><wfw:commentRss>http://www.cnblogs.com/anytao/comments/commentRss/1365688.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/anytao/services/trackbacks/1365688.html</trackback:ping><description><![CDATA[<h2 align="center"><font color="#0000ff" size="6" face="微软雅黑">我的2008，专注而行</font></h2>
<p align="right"><font face="微软雅黑">发布日期：2008.12.31 作者：</font><a href="http://about.anytao.com/"><font face="微软雅黑">Anytao</font></a> <br />
<font color="#ff0000" face="微软雅黑">&#169; 2008 </font><a href="http://www.anytao.com/"><font color="#ff0000" face="微软雅黑">Anytao.com</font></a><font color="#ff0000" face="微软雅黑"> ，Anytao原创作品，转贴请注明作者和出处。</font></p>
<p>气象更新，总有小结。多事之秋，随着寒风而过，虽有很多记忆难眠，但未来还在挺进。对2008做个小结，就像一本年历到了该翻过的时候，应该擦擦干净为来年打个好头。2008，对国家和世界来说，都无疑是一个多事之年，这已无须一届书生多言，留在心里的记忆应该是永恒的。千言万语，唯有祝福在此，擦亮双眼继续技术之路的多味人生。</p>
<p><strong><font size="4">2008</font></strong></p>
<p><strong>2008，大事记</strong>，记录平凡技术生涯的360个旅程。</p>
<ul>
    <li>2008/01
    <ul>
        <li>2008/01/01，当选Visual c# MVP（<a href="http://www.cnblogs.com/anytao/archive/2008/01/02/anytao_2008_mvp.html">当选2008 Microsoft MVP，从好的开始继续</a>）</li>
        <li>2008/01/13，参见MVP Togeting活动，有幸遇见ScottGu大师（<a href="http://www.cnblogs.com/anytao/archive/2008/01/14/anytao_activities_080113.html">[活动]Scott，来了</a>）</li>
        <li>2008/01/24，入选2008微软&#8220;十大IT技术英雄&#8221;活动提名奖（<a href="http://www.cnblogs.com/anytao/archive/2008/01/28/anytao_activity_mshero.html">[anytao.activity]也来拉票，不只为评选</a>）</li>
        <li>2008/01/27，博文视点与博客园系列图书作者见面会暨.NET技术交流会，并发表题为《你必须知道的.NET：基础＋本质》的演讲（<a href="http://www.cnblogs.com/anytao/archive/2008/02/01/anytao_activity_shtravel.html">[活动]上海印象，迟来的总结</a>） </li>
    </ul>
    </li>
    <li>2008/03
    <ul>
        <li>2008/03/29，新书《<a target="_blank" href="http://book.anytao.com/">你必须知道的.NET</a>》出版 </li>
    </ul>
    </li>
    <li>2008/05
    <ul>
        <li>离开工作两年的长软，在新公司开始新的技术征途</li>
        <li>2008/05/30，在asp.net上首开英文技术博客（<a href="http://weblogs.asp.net/anytao/archive/2008/05/30/anytao_5F00_performance_5F00_01.aspx">Ways of Performance in .NET - Part1</a>）</li>
        <li>2008/05至今，参与博客园精华集的编审工作（<a href="http://www.cnblogs.com/anytao/archive/2008/09/04/lovechina_bestclr_3rdfilter.html">《博客园精华集---CLR/C#分册》第三轮筛选结果 </a>） </li>
    </ul>
    </li>
    <li>2008/06
    <ul>
        <li>2008/06/18，组织Visual Stuido的问卷调查（<a href="http://www.cnblogs.com/anytao/archive/2008/06/18/anytao_activity_vsbetter.html">[活动]问卷调查：打造更好用的Visual Studio 2008</a>） </li>
    </ul>
    </li>
    <li>2008/07
    <ul>
        <li>2008/07，参加山西.NET俱乐部share &amp; success（分享与成功），探讨《基于.NET的面向对象实现机制》 </li>
    </ul>
    </li>
    <li>2008/08
    <ul>
        <li>在IT168开设个人专栏（<a target="_blank" href="http://space.itpub.net/15029997/">这里</a>） </li>
    </ul>
    </li>
    <li>2008/09
    <ul>
        <li>2008/09，发起、组织和参与CN.Dotnet.org的Ezsocio开源项目（原名UCenter.NET，<a target="_blank" href="http://www.cndotnet.org/ezsocio/">这里</a>）</li>
        <li>2008/09至今，作为公司的技术培训讲师，分享关于.NET Basic、Design Principle和Design Patterns的技术交流 </li>
    </ul>
    </li>
    <li>2008/10
    <ul>
        <li>2008/10，《你必须知道的.NET》重印（<a href="http://www.cnblogs.com/anytao/archive/2008/11/20/anytao_insidenet_futureanddream.html">《你必须知道的.NET》第二次印刷，未来与梦想</a>）</li>
        <li>2008/10/18，参加MVP OpenDay，和好友在汤山商谈两日 </li>
    </ul>
    </li>
    <li>2008/11
    <ul>
        <li>2008/11，参加微软2008 TechEd北京站活动</li>
        <li>2008/11，申请并获选微软最有影响力开发者 </li>
    </ul>
    </li>
    <li>2008/12
    <ul>
        <li>2008/12/20，参加微软开发工具产品组北京座谈会</li>
        <li>2008/12/27，参加微软中文技术论坛2009新年欢庆Party </li>
    </ul>
    </li>
    <li>其他
    <ul>
        <li>N场技术交流活动</li>
        <li>M次技术座谈会</li>
        <li>还有幸结识M+N多个圈中好友，此为幸事 </li>
    </ul>
    </li>
</ul>
<p>与<a target="_blank" href="http://www.cnblogs.com/terrylee">terry</a>、<a target="_blank" href="http://www.cnblogs.com/dingxue">丁丁</a>的午饭八卦，植物园聚会，和<a target="_blank" href="http://www.cnblogs.com/dingxue">丁丁</a>、<a target="_blank" href="http://www.cnblogs.com/guaiguai">怪怪</a>畅聊一夜，感受很多读者对新书的关注，等等等等。所有的经历，连同我的人生，都一同记录在博客园的数据中心，未来的2009我会让自己的记录更多，因为<a target="_blank" href="http://www.cnblogs.com/dudu">dudu</a>的带领下的博客园已经像其存储空间一样在稳定中走向强大。 </p>
<p><strong>2008成绩单</strong>，把2007的想法找回来。</p>
<p>回顾2007年末的目标是否实现，检验检验自己一年之前的想法和当下的现状，取长补短，功过自评。</p>
<ul>
    <li>继续在博客园和大家交流---2009还将继续，尤其是设计架构、CLR方面的分享。</li>
    <li>继续.NET征程，对CLR、WCF、WPF、ASP.NET&amp;Ajax、LINQ、 Architecture&amp;Design有所涉猎---有所成长，仍需深入。</li>
    <li>英文---上了很多课，写了很多文，读了很多书，多少有些长进。</li>
    <li>坚持身体锻炼---熬夜少了，思考多了。</li>
    <li>完成一个.NET技术开源框架---继续Ezsocio。 </li>
</ul>
<p>回顾，<a href="http://www.cnblogs.com/anytao/archive/2007/12/29/anytao_2007.html">写在2007，行胜于言</a>中的壮语豪言。</p>
<p><strong><font size="4">2009</font></strong></p>
<p><strong>2009，脚踏实地，要做的还有更多</strong>：</p>
<ul>
    <li>一本新书</li>
    <li>一个软件作品</li>
    <li>有意义的转身</li>
    <li>打造开源经典</li>
    <li>深入和专注：WCF、Silverlight、Azure</li>
    <li>完成预定计划的写作
    <ul>
        <li>你必须知道的.NET系列2.0</li>
        <li>Silverlight随笔</li>
        <li>从设计到架构系列 </li>
    </ul>
    </li>
    <li>技术交流和分享</li>
    <li>还有几个秘密:-) </li>
</ul>
<p>作为平凡人生，我崇尚简单就好的生活理念；作为技术粉丝，我专注兴趣至上的研究探索。没有规矩，不成方圆。没有计划，不得章法。作此文，以不盲目的小样儿，为2009开个好头，并祝福博客园所有的朋友，新年快乐。</p>
<div id="MySignature">
<p class="class"><a href="http://i.anytao.com/">anytao</a> | <a class="copyright" href="http://www.anytao.com/">&#169; 2008 Anytao.com</a></p>
<p class="class">2008/12/31 | <a href="http://anytao.cnblogs.com/">http://anytao.cnblogs.com/</a></p>
<p class="class">本文以&#8220;现状&#8221;提供且没有任何担保，同时也没有授予任何权利。 | This posting is provided "AS IS" with no warranties, and confers no rights.</p>
<p>本文版权归作者所有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。</p>
</div>
<img src ="http://www.cnblogs.com/anytao/aggbug/1365688.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/><a href="http://job.cnblogs.com/offer/302/" target="_blank">盛大招聘.Net开发工程师 </a><br/><a href="http://www.hjbook.net/product/4041/" target="_blank">经典好书：.NET框架程序设计（修订版）</a><br/>新闻：<a href="http://news.cnblogs.com/n/44346/" target="_blank">环球企业家：分众易帜幕后</a><br/>导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target="_blank">招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>[推荐]超酷的Visual Studio使用体验，来自《Microsoft Visual Studio Tips》</title><link>http://www.cnblogs.com/anytao/archive/2008/12/21/anytao_recommand_book_vstips.html</link><dc:creator>Anytao</dc:creator><author>Anytao</author><pubDate>Sat, 20 Dec 2008 16:08:00 GMT</pubDate><guid>http://www.cnblogs.com/anytao/archive/2008/12/21/anytao_recommand_book_vstips.html</guid><wfw:comment>http://www.cnblogs.com/anytao/comments/1359125.html</wfw:comment><comments>http://www.cnblogs.com/anytao/archive/2008/12/21/anytao_recommand_book_vstips.html#Feedback</comments><slash:comments>27</slash:comments><wfw:commentRss>http://www.cnblogs.com/anytao/comments/commentRss/1359125.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/anytao/services/trackbacks/1359125.html</trackback:ping><description><![CDATA[<p><strong><a href="http://book.anytao.com/"><strong><font color="#ff0000">《你必须知道的.NET》网站</font></strong></a></strong> | <strong><font color="#0000ff"><a href="http://www.anytao.com/">Anytao技术博客</a>&nbsp; </font></strong></p>
<h2 align="center"><font color="#0000ff" size="6" face="微软雅黑">[推荐]超酷的Visual Studio使用体验，来自《Microsoft Visual Studio Tips》</font></h2>
<p align="right"><font face="微软雅黑">发布日期：2008.12.21 作者：</font><a href="http://about.anytao.com/"><font face="微软雅黑">Anytao</font></a> <br />
<font color="#ff0000" face="微软雅黑">&#169; 2008 </font><a href="http://www.anytao.com/"><font color="#ff0000" face="微软雅黑">Anytao.com</font></a><font color="#ff0000" face="微软雅黑"> ，Anytao原创作品，转贴请注明作者和出处。</font></p>
<p>今天你使用Visual Studio了吗？当然，如果你是铁杆的.NET开发者，那么这句问候简直是多余的，在.NET世界里我们有幸能使用超酷的Visual Studio工具，为每天的编程生活增添了无限乐趣。工欲善其事必先利其器，Visual Studio已经足够好了，未来的2010版还会有很多激动人心的feature。我们简直是幸福的Coder，因为Visual Studio的存在。</p>
<p>然而，你了解真正的Visual Studio了吗？你知道为什么Visual Studio的可执行文件被定义为devenv.exe而不是visualstudio.exe吗？你了解最新的Visual Studio有哪些超酷的快捷方式吗？你如果正确的使用这一工具来提高自己的生产力？你如果是否认识Visual Studio中一个个功能强大的工具？</p>
<p>带着这些技巧，花边新闻，还有无限的使用体验，来认识更多的使用体验，让你每天的Coding更High起来，<a target="_blank" href="http://i.anytao.com/">Anytao</a>特别推荐一本值得你饭后欣赏的新书《Microsoft Visual Studio Tips： 251 Ways to improve your productivity》。</p>
<p><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/anytao/162192/o_anytao_book_vstips.jpg" />&nbsp;</p>
<p>那么这边书有什么呢？正如标题而言，这本书包含了：</p>
<ul>
    <li>251个使用技巧和快捷方式</li>
    <li>改善和提高你的编码技巧</li>
    <li>提高生产效率</li>
    <li>认识更多的Visual Studio故事</li>
    <li>只有200多页，一个周末就可以读完。 </li>
</ul>
<p>作者：<a href="http://www.amazon.com/exec/obidos/search-handle-url/ref=ntt_athr_dp_sr_1?%5Fencoding=UTF8&amp;search-type=ss&amp;index=books&amp;field-author=Sara%20Ford">Sara Ford</a>，是一名资深的Visual Studio测试工程师，你可以访问她的Blog来了解更多Visual Studio的使用技巧和故事，点击<a target="_blank" href="http://blogs.msdn.com/saraford/">这里</a>。也可以通过<a target="_blank" href="http://www.amazon.com/Microsoft-Visual-Studio-Tips-Sara/dp/0735626405">Amazon</a>，了解其相关出版情况，有兴趣的读者可以享受了，下面是大概的目录：</p>
<ul>
    <li>Get Back to Basics with Your Editor，介绍编辑器基础技巧，例如Ctrl+W，Ctrl+L，Ctrl+Enter这些耳熟能详的快捷方式；</li>
    <li>Make Your Editor Work For You，介绍了高级编辑技巧。</li>
    <li>Find What You Are Searching For，介绍键盘查找，我的题外话是2010版在Search方面，那才叫一个酷。</li>
    <li>Manage Your Environment Layout，介绍例如MDI模式，键盘导航等内容。</li>
    <li>Discover More Tools for Your Design Time，设计时的工具介绍，分上下俩部分阐释，包含了相当多的工具使用，例如Task List、Output Window、Dialog Boxes等。</li>
    <li>Know Your Solutions, and Other Project and Debugging Tweaks，关于解决方案、项目方面的调试技巧等，这章非常值得一看，以了解更多的基础性概念，例如Mutiltargeting、Projects、Debugging等。</li>
    <li>最后的几个附录，其实内容更精彩。 </li>
</ul>
<p>推荐<a target="_blank" href="http://www.cnblogs.com/anderslly/">Anders Cui</a>在<a target="_blank" href="http://space.cnblogs.com/group/vs/">Visual Stuido</a>小组中的<a target="_blank" href="http://space.cnblogs.com/group/topic/1424/">总结</a>，他的总结也来自于本书作者的博客，所是不错的翻译本。同时，分享几个我常用的编码技巧：</p>
<p>1 转到定义: F12； <br />
2 设置书签:Ctr+K+K； <br />
3 设置任务: //TODO:something,查看任务Ctrl+W+T； <br />
4 查找：Ctrl+ F， Ctrl+Shift+F； <br />
5 强迫智能感知：Ctrl+J； <br />
6 强迫智能感知显示参数信息：Ctrl-Shift-空格； <br />
7 格式化整个块：Ctrl+K+F； <br />
8 全屏幕：Alt+Shift+Enter； <br />
9 设置书签：Ctrl+B+T，跳转书签：Ctrl+B+N <br />
10 检查括号匹配(在左右括号间切换): Ctrl +] <br />
11 选中从光标起到行首(尾)间的代码: Shift + Home(End) <br />
12 在方法定义和调用之点切换：Ctrl+Shift+7(8) <br />
13 设置断点：F9 <br />
14 查找所有引用： Shift + F12 <br />
15 注释代码,助记方法，Edit + Comments：Ctrl + E,C <br />
16 取消注释, 助记方法：Edit + UnComments：Ctrl + E,U <br />
17 格式代码, 助记方法：Edit + Document(只能在代码能编绎的情况下起使用)：Ctrl + E,D <br />
18 收拢代码：Ctrl+M, O <br />
19 选中自己圈中的长方块：Alt+Shift+鼠标 <br />
20 调试模式下，&#8220;调试——窗口——反汇编&#8221;，或者ctrl + alt + d <br />
21 按下Ctrl+Enter会在上面插入一个空行，Ctrl+Shift+Enter则会在下面插入一个空行。光标会移至新行的开始处。 <br />
22 使用Tab增加缩进，Shift+Tab减少缩进（相应的菜单命令在Edit - Advanced 中） <br />
23 格式化整篇代码： Ctrl+K, D <br />
24 用Ctrl+W选中当前字 <br />
25 单个节点折叠与打开开关: Ctrl+M, M <br />
26 使用Ctrl+G跳至指定行 <br />
27 使用Ctrl+Delete和Ctrl+Backspace分别删除后继和前驱的词 <br />
28 使用Ctrl+L剪切当前行，Ctrl+Shift+L删除当前行 <br />
29 如何创建书签并在其中进行跳转？（推荐）按下Ctrl+K, Ctrl+K 可以创建/取消一个书签，该命令绑定至Edit.ToggleBookmark，如果你的快捷键与此不同，可通过命令来查看具体的快捷键。</p>
<p>30 使用Ctrl+J来帮助语句完成。</p>
<p>而更多的答案就到这本《Microsoft Visual Studio Tips： 251 Ways to improve your productivity》中寻找编码的快感吧:-)</p>
<p><font color="#ff0000">注：以上快捷方式基于c#键盘局部，当然还有更多，不过熟练掌握20个左右就很能提高操作效率了。</font></p>
<p>推荐看看，没错的。</p>
<p>&nbsp;</p>
<div id="MySignature">
<p class="class"><a href="http://i.anytao.com/">anytao</a> | <a class="copyright" href="http://www.anytao.com/">&#169; 2008 Anytao.com</a></p>
<p class="class">2008/12/21 | <a href="http://anytao.cnblogs.com/">http://anytao.cnblogs.com/</a></p>
<p class="class">本文以&#8220;现状&#8221;提供且没有任何担保，同时也没有授予任何权利。 | This posting is provided "AS IS" with no warranties, and confers no rights.</p>
<p>本文版权归作者所有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。</p>
</div>
<img src ="http://www.cnblogs.com/anytao/aggbug/1359125.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/><a href="http://job.cnblogs.com/offer/302/" target="_blank">盛大招聘.Net开发工程师 </a><br/><a href="http://www.hjbook.net/product/4041/" target="_blank">经典好书：.NET框架程序设计（修订版）</a><br/>新闻：<a href="http://news.cnblogs.com/n/44345/" target="_blank">雅虎、三星合作 电视登录雅虎YouTube等网站</a><br/>导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target="_blank">招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>[技术速递]体验微软开源范例-Oxite</title><link>http://www.cnblogs.com/anytao/archive/2008/12/10/anytao_msnews_02_oxite.html</link><dc:creator>Anytao</dc:creator><author>Anytao</author><pubDate>Wed, 10 Dec 2008 02:30:00 GMT</pubDate><guid>http://www.cnblogs.com/anytao/archive/2008/12/10/anytao_msnews_02_oxite.html</guid><wfw:comment>http://www.cnblogs.com/anytao/comments/1351632.html</wfw:comment><comments>http://www.cnblogs.com/anytao/archive/2008/12/10/anytao_msnews_02_oxite.html#Feedback</comments><slash:comments>56</slash:comments><wfw:commentRss>http://www.cnblogs.com/anytao/comments/commentRss/1351632.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/anytao/services/trackbacks/1351632.html</trackback:ping><description><![CDATA[<p>什么是Oxite？</p>
<p>&nbsp;</p>
<p><img border="0" alt="" src="http://www.cnblogs.com/images/cnblogs_com/anytao/oxite.png" width="160" height="79" /></p>
<p>你可能没有听过OXite，但你是否听过&nbsp;<a class="externalLink" href="http://channel9.msdn.com/"><font color="#3e62a6">Channel 9</font></a>&nbsp;、 <a class="externalLink" href="http://channel8.msdn.com/">Channel 8</a>、 <a class="externalLink" href="http://on10.net/">Channel 10</a>、 <a class="externalLink" href="http://edge.technet.com/">TechNet Edge</a>、 <a class="externalLink" href="http://visitmix.com/">Mix Online</a>，显然OXite就是这些网站的后台发动机。<a class="externalLink" href="http://visitmix.com/">Mix Online</a>，你就能在Mix首页看到对Oxite的导航。确切的说，Oxite是微软的开源博客内容管理系统，基于ASP .NET MVC架构，正如其团队在Codeplex上的阐述一样，Oxite是为了以下目标而生的：</p>
<ul>
    <li>提供一个Blog范例，除了Blog的基本功能，你还可以了解到Trackback，rss，comment这些基本模块的实现，当然这些东西可以在其他开源项目中了解，但是Oxite至少提供了可以对比借鉴的可能:-)</li>
    <li>提供一个现实世界的MVC架构范例。</li>
</ul>
<p>如果你对MVC和Blog开源项目有十足的兴趣，不妨下载Oxite来了解一下Mix发动机的秘密，下面是如何开始的一点导航：</p>
<ul>
    <li>Oxite在Codeplex主页：<a href="http://www.codeplex.com/oxite">这里</a></li>
    <li><a href="http://www.codeplex.com/oxite/Wiki/View.aspx?title=gettingstarted&amp;referringTitle=Home"><font color="#3e62a6">Getting Started with Oxite</font></a> </li>
    <li><a href="http://www.codeplex.com/oxite/Wiki/View.aspx?title=FAQ&amp;referringTitle=Home"><font color="#3e62a6">Frequently Asked Questions</font></a> </li>
</ul>
<p>还等什么，去下载Oxite来建立自己的博客内容管理系统，顺便学习学习基于MVC架构下的软件设计实现，这是多好的事儿啊。</p>
<img src ="http://www.cnblogs.com/anytao/aggbug/1351632.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/><a href="http://job.cnblogs.com/offer/302/" target="_blank">盛大招聘.Net开发工程师 </a><br/><a href="http://www.hjbook.net/product/4041/" target="_blank">经典好书：.NET框架程序设计（修订版）</a><br/>新闻：<a href="http://news.cnblogs.com/n/44344/" target="_blank">传IBM将于23日宣布裁员16000人</a><br/>导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target="_blank">招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>[从设计到架构]第四回：依赖的哲学（上）</title><link>http://www.cnblogs.com/anytao/archive/2008/12/02/anytao_design_04_couplingphilosophy.html</link><dc:creator>Anytao</dc:creator><author>Anytao</author><pubDate>Mon, 01 Dec 2008 16:16:00 GMT</pubDate><guid>http://www.cnblogs.com/anytao/archive/2008/12/02/anytao_design_04_couplingphilosophy.html</guid><wfw:comment>http://www.cnblogs.com/anytao/comments/1345389.html</wfw:comment><comments>http://www.cnblogs.com/anytao/archive/2008/12/02/anytao_design_04_couplingphilosophy.html#Feedback</comments><slash:comments>60</slash:comments><wfw:commentRss>http://www.cnblogs.com/anytao/comments/commentRss/1345389.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/anytao/services/trackbacks/1345389.html</trackback:ping><description><![CDATA[<p><strong><a href="http://book.anytao.com/"><strong><font color="#ff0000">《你必须知道的.NET》网站</font></strong></a></strong> | <strong><font color="#0000ff"><a href="http://www.anytao.com/">Anytao技术博客</a>&nbsp; </font></strong></p>
<h2 align="center"><font color="#0000ff" face="微软雅黑" size="6">[从设计到架构]第四回：依赖的哲学（上）</font></h2>
<p align="right"><font face="微软雅黑">发布日期：2008.12.02 作者：</font><a href="http://about.anytao.com/"><font face="微软雅黑">Anytao</font></a>
<br />
<font color="#ff0000" face="微软雅黑">&#169; 2008 </font><a href="http://www.anytao.com/"><font color="#ff0000" face="微软雅黑">Anytao.com</font></a><font color="#ff0000" face="微软雅黑"> ，Anytao原创作品，转贴请注明作者和出处。</font></p>
<!------------------------------------------------以下为logo区-------------------------------------------->
<div style="border: 1px dotted teal; text-align: center; width: 220px; float: right; color: teal; font-size: 9pt;"><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/anytao/125111/o_Anytao_Design_Logo2008_En.jpg" /> <a title="从设计到架构" href="http://www.cnblogs.com/anytao/archive/2007/08/15/anytao_design_catalog.html">从设计到架构</a> </div>
<br />
<!------------------------------------------------以上为logo区-------------------------------------------->
<p>本文将介绍以下内容: </p>
<ul>
    <li>关于依赖和耦合 </li>
    <li>面向抽象编程 </li>
    <li>依赖倒置原则 </li>
    <li>控制反转 </li>
    <li>依赖注入 </li>
    <li>工厂模式 </li>
    <li>Unity框架应用 </li>
</ul>
<div>&nbsp;</div>
<div>
<table style="border-collapse: collapse;" border="0">
    <colgroup><col style="width: 590px;"></colgroup>
    <tbody valign="top">
        <tr style="background: #87bfd1 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
            <td style="padding-left: 7px; padding-right: 7px;"><span style="color: white;"><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/anytao/125111/o_icon_your_info.gif" art="Anytao.com" /><span style="color: white;">说在，开篇之前</span> </span></td>
        </tr>
        <tr>
            <td style="padding-left: 7px; padding-right: 7px;">在老子的&#8220;小国寡民&#8221;论中，提出了一种理想的社会状态：民至老死，不相往来。这是他老人家的一种社会理想，老死不相往来的人群呈现了一片和谐景象。因为不发生瓜葛，也就无所谓关联，进而无法倒置冲突。这是先祖哲学中的至纯哲理，但理想的大同总是和现实的生态有着或多或少的差距，人类社会无法避免联系的发生，所以小国寡民的理想成为一种美丽的梦想，不可实现。同样的道理，映射到软件&#8220;社会&#8221;中，也就是软件系统结构中，也预示着不同的层次、模块、类型之间也必然存在着或多或少的联系，这种联系不可避免但可管理。正如人类社会虽然无法实现小国寡民，但是理想的状态下我们推崇和谐社会，把人群的联系由复杂变为简单，由曲折变为统一，同样可以使得这种关联很和谐。所以，软件系统的使命也应该朝着和谐社会的目标前进，对于不同的关系处理，使用一套行之有效的哲学，把复杂问题简单化，把僵化问题柔性化，这种哲学或者说方法，在我看来就是：依赖的哲学，也就是本文所要阐释的中心思想。
            <br />
            <br />
            <p align="right"><font color="#ff0000"><strong>*Hot:</strong></font><a title="《你必须知道的.NET》" href="http://book.anytao.com/">《你必须知道的.NET》</a></p>
            </td>
        </tr>
    </table>
    </div>
    <div>&nbsp;</div>
    <p><font color="#800000" size="5">1 引言</font></p>
    <p>因为在公司内部进行设计原则和设计模式的培训，我的第一个任务就是和大家就依赖倒置原则进行沟通。作为5大设计原则之一的DIP原则，单纯的由概念而实例在我认为并不能完全阐释清楚： </p>
    <ul>
        <li>什么是依赖倒置？ </li>
        <li>为什么依赖倒置？ </li>
        <li>如何依赖倒置？ </li>
    </ul>
    这几个关键的问题，所以我决定不单纯的通过DIP而DIP，而是从依赖这个最原始的概念讲起，来了解在面向对象软件设计体系中，关于&#8220;关系的处理&#8221;，也就是&#8220;依赖的哲学&#8221;。对，依赖就是关系，处理依赖也就意味着处理关系。因为，我们人类是最善于搞关系的动物，所以原本可以简单的理论，在人类的意识哲学中变得复杂而多变，以至于我们本应简单的道理变得如此复杂，这就是依赖。那么，从依赖讲起来了解依赖倒置原则，我觉得首先应该回到以下的问题：
    <ul>
        <li>控制反转、依赖倒置、依赖注入这些概念，你认识但是否熟悉？ </li>
        <li>Unity、ObjectBuilder、Castle这些容器，你相识但是否相知？ </li>
        <li>面向接口、面向抽象、开放封闭，这些思想，你了解但是否了然？ </li>
    </ul>
    带着对这些问题的思考和思索，<a href="http://www.anytao.com/">Anytao</a>带领大家就依赖这个话题开始一次循序渐进的面向对象之旅，以解答这些从一开始就有足够吸引力的问题，从原理到实例，从关系到异同，我期待这篇文章能带来一些认知的变革。&nbsp;&nbsp;
    <p><font color="#800000" size="5">2 什么是依赖，什么是抽象</font></p>
    <p><font color="#800000" size="4">2.1 关于依赖和耦合：由小国寡民到和谐社会</font></p>
    <p>在老子的&#8220;小国寡民&#8221;论中，提出了一种理想的社会状态：民至老死，不相往来。这是他老人家的一种社会理想，老死不相往来的人群呈现了一片和谐景象。因为不发生瓜葛，也就无所谓关联，进而无法倒置冲突。这是先祖哲学中的至纯哲理，但理想的大同总是和现实的生态有着或多或少的差距，人类社会无法避免联系的发生，所以小国寡民的理想成为一种美丽的梦想，不可实现。同样的道理，映射到软件&#8220;社会&#8221;中，也就是软件系统结构中，也预示着不同的层次、模块、类型之间也必然存在着或多或少的联系，这种联系不可避免但可管理。正如人类社会虽然无法实现小国寡民，但是理想的状态下我们推崇和谐社会，把人群的联系由复杂变为简单，由曲折变为统一，同样可以使得这种关联很和谐。所以，软件系统的使命也应该朝着和谐社会的目标前进，对于不同的关系处理，使用一套行之有效的哲学，把复杂问题简单化，把僵化问题柔性化，这种哲学或者说方法，在我看来就是：依赖的哲学，也就是本文所要阐释的中心思想。
    <br />
    因为，&#8220;耦合是不可避免的&#8221;，所以我们首先就从认识依赖和耦合的概念开始，来一步步阐释我们的依赖哲学思想：</p>
    <ul>
        <li>什么是依赖和耦合 </li>
    </ul>
    <p>依赖，就是关系，代表了软件实体之间的联系。软件的实体可能是模块，可能是层次，也可能是具体的类型，不同的实体直接发生依赖，也就意味着发生了耦合。所以，依赖和耦合在我看来是对一个问题的两种表达，依赖阐释了耦合本质，而耦合量化了依赖程度。因此，我们对于关系的描述方式，就可以从两个方面的观点来分析：</p>
    <p>
    <br />
    从依赖的角度而言，可以分类为： </p>
    <ul>
        <ul>
            <li>无依赖，代表没有发生任何联系，所以二者相互独立，互不影响，没有耦合关系。 </li>
            <li>单向依赖，关系双方的依赖是单向的，代表了影响的方向也是单向的，其中一个实体发生改变，会对另外的实体产生影响，反之则不然，耦合度不高。 </li>
            <li>双向依赖，关系双方的依赖是相互的，影响也是相互的，耦合度较高。 </li>
        </ul>
    </ul>
    <br />
    从耦合的角度而言，可以分类为（此处回归到具体的代码级耦合概念，以方便概念的阐释）：
    <ul>
        <ul>
            <li>零耦合，表示两个类没有依赖。 </li>
            <li>具体耦合，如果一个类持有另一个具体类的引用，那么这两个类就发生了具体耦合关系。所以，具体耦合发生在具体类之间的依赖，因此具体类的变更将引起对其关联类的影响。 </li>
            <li>抽象耦合，发生在具体类和抽象类的依赖，其最大的作用就是通过对抽象的依赖，应用面向对象的多态机制，实现了灵活的扩展性和稳定性。 </li>
        </ul>
    </ul>
    <br />
    不同的耦合，代表了依赖程度的差别，我们以&#8220;粒度&#8221;为概念来分析其耦合的程度。引用中间层来分离耦合，可以使设计更加的优雅，架构更加的柔性，但直接的依赖也存在其市场，过度的设计也并非可取之道。因为效率与性能同样是设计需要考量的因素，过多的不必要分离会增加调用的次数，造成效率浪费。在下文分析依赖倒置原则的弊端之一正是对此问题的进一步阐述。
    <ul>
        <li>耦合是如何产生的？ </li>
    </ul>
    <p>那么，软件实体之间的耦合是如何产生呢？回归我们每天挥洒的代码片段，其实我们在重复的创造着耦合，并且得益于对这种耦合带来的数据通信。如果我们将历史的目光回归到软件设计之初，人类以简单的机器语言来实现最简单的逻辑，给一个输入，实现一个输出，可以表达为：</p>
    <p><img src="http://www.cnblogs.com/images/cnblogs_com/anytao/162192/o_anytao_write_design_dependency_06.jpg" alt="" /> </p>
    <p>随着软件世界的革命，业务逻辑的复杂，以上的简单化处理已经不足以实现更复杂的软件产品，在系统内部的复杂度成为一个超越人脑可识别的程度时，例如：</p>
    <p><img src="http://www.cnblogs.com/images/cnblogs_com/anytao/162192/o_anytao_write_design_dependency_07.jpg" alt="" />&nbsp; </p>
    <p>因此，人类开始发挥重组和简单化处理的优势，我们不得不在软件设计上做出平衡。平衡的结果就是通过对复杂的系统模块化，把复杂问题简单处理，从而达到能够被人脑识别的目的。基于这种指导原则，随着复杂度的增加模块的划分更加朝着精细化发展，尤其是面向对象程序设计理论的出现，使得对复杂的处理实现了更科学的理论基础。然而，复杂的问题可以通过划分实现简单的功能模块或者技术单元，但由此应运而生的子单元会越来越多，而且越来越多的子单元必须发生数据的通信才能完成统一的业务处理，所以产生的数据通信管理也越来越多。对于子单元的管理，也就是我们本文关注的核心概念-依赖，成为新的软件设计问题，那么总结前人的经验，提炼今人的智慧，我们对耦合的产生做以如下归纳： </p>
    <ul>
        <ul>
            <li>继承 </li>
            <li>聚合 </li>
            <li>接口 </li>
            <li>方法调用和引用 </li>
            <li>服务调用 </li>
        </ul>
    </ul>
    了解了耦合发生的一般方式，我们就可以进入了核心思想的讨论，那就是在认识依赖和了解依赖的基础上，我们最终追求的目标。
    <ul>
        <li>设计的目标：高内聚（High cohesion）、低耦合（Low coupling） </li>
    </ul>
    讨论了半天，终于是时候对依赖和耦合进行一点儿总结了，也是该进行一点目标诉求了。在软件设计领域，有那么几个至高原则值得我们深刻心中，它们是：
    <ul>
        <ul>
            <li>面向抽象编程 </li>
            <li>低耦合，高内聚 </li>
            <li>封装变化 </li>
            <li>实现重用：代码重用、算法重用 </li>
        </ul>
    </ul>
    <p>对了，就是这些平凡的字眼，汇集了面向对象思想的核心内容，也是本文力求阐释的禅意心经。关于面向抽象编程和封装变化，我们会在后面详细阐释，在此我们需要将注意力关注于&#8220;低耦合，高内聚&#8221;这一目标。</p>
    <p>
    <br />
    <strong>低耦合</strong>，代表了实现最简单的依赖关系，尽可能的减少类与类、模块与模块、层次与层次、系统与系统之间的联系。低耦合，体现了人类追求简单操作的理想状态，按照软件开发的基本实现技巧来追求软件实体之间的关系简单化，正是大部分设计模式力图追求的目标；低耦合，降低了一个类或一个模块发生修改对其他类或模块造成的影响，将影响范围简单化。在我们阐释的依赖关系方式中，实现单向的依赖，实现抽象的耦合，都是实现低耦合的基础条件。</p>
    <p>
    <br />
    <strong>高内聚</strong>，一方面代表了职责的统一管理，一方面体现了关系的有效隔离。例如单一职责原则其实归根结底是对功能性的一种指导性体现，将功能紧密联系的职责封装为一个类（或模块），而判断的准则正是基于引起类变化的原因。所以，封装离不开依赖，而抽象离不开变化，二者的概念和本质都是相对而言的。因此，高内聚的目标体现了以隔离为目标进行统一管理的思想。
    <br />
    那么，为了达到低耦合、高内聚的目标，通常意义上的设计原则和设计模式其实都是朝着这个方向实现的，因此我们仅仅小结并非普遍意义的规则： </p>
    <ul>
        <ul>
            <li>尽可能实现单项依赖 </li>
            <li>不需要进行数据交换的双方，不要实现多此一举的关联，人们将此形象称为，不要向陌生人说话（Don't talk to strangers） </li>
            <li>保持内部的封装性，关联的双方不要深入实现细节进行通信，这是保证高内聚的必须条件。 </li>
        </ul>
    </ul>
    <p><font color="#800000" size="4">2.2 关于抽象和具体</font></p>
    <p>什么是抽象呢？我们首先不必澄清什么是抽象，而从什么算抽象说起，稳定的、高层的则代表了抽象。就像一个公司，最好保证了高层的稳定，才能保证全局的发展。在进行系统设计时，稳定的抽象接口和高层逻辑，也代表了整个系统的稳定与柔性。兵熊熊一窝，将良良一窝，系统的逻辑也正如着代表打仗，良好的设计都是自上而下的。而对具体的编程实践而言，接口和抽象类则代表了语言层次的抽象。
    <br />
    追溯概念的分析，我们一一过招，首先来看依赖于具体：</p>
    <p><img src="http://www.cnblogs.com/images/cnblogs_com/anytao/162192/o_anytao_write_design_dependency_02.jpg" alt="" />&nbsp; </p>
    <p>因此，为了分离这种<strong>紧耦合</strong>，最好的办法就是<strong>隔离</strong>，引入中间层来分离变化，同时确保中间层本身的稳定性，因此抽象的中间层是最佳的选择。</p>
    <p><img src="http://www.cnblogs.com/images/cnblogs_com/anytao/162192/o_anytao_write_design_dependency_03.jpg" alt="" />&nbsp; </p>
    <p>例如：</p>
    <div class="csharpcode">
    <pre class="alt">    <span class="kwrd">public</span> <span class="kwrd">interface</span> IUserService</pre>
    <pre>    {</pre>
    <pre class="alt">    }</pre>
    <pre>&nbsp;</pre>
    <pre class="alt">    <span class="kwrd">public</span> <span class="kwrd">class</span> UserService : IUserService</pre>
    <pre>    {</pre>
    <pre class="alt">    }</pre>
    </div>
    <style type="text/css">
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }</style>
    <p>下面依赖于具体：</p>
    <div class="csharpcode">
    <pre class="alt">    <span class="kwrd">public</span> <span class="kwrd">class</span> UserManager</pre>
    <pre>    {</pre>
    <pre class="alt">        <span class="kwrd">private</span> UserService service = <span class="kwrd">null</span>;</pre>
    <pre>    }</pre>
    </div>
    <style type="text/css">
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }</style>
    <p>下面依赖于抽象：</p>
    <div class="csharpcode">
    <pre class="alt">    <span class="kwrd">public</span> <span class="kwrd">class</span> UserManager</pre>
    <pre>    {</pre>
    <pre class="alt">        <span class="kwrd">private</span> IUserService service = <span class="kwrd">null</span>;</pre>
    <pre>    }</pre>
    </div>
    <style type="text/css">
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }</style>
    <p>二者的区别仅在于引入了接口IUserService，从而使得UserManager对于UserService的依赖由强减弱。这种方式也在我们的<a href="http://www.cndotnet.org/ezsocio">Ezsocio</a>项目中进行service层的设计方式。然而对于依赖的方式并非仅此一种，设计模式中的智慧正是通过各章编程技巧进行依赖关系的设计，值得我们关注和学习，本文也在下文进行相关设计模式的讨论。
    <br />
    对WCF熟悉的读者一定不难看出这种实现方式如此类似于WCF的推荐模式，这是契约编程的基本思想。关于WCF及SOA的相关内容，本文将在后文进行相关的讨论。
    <br />
    总结一番，什么是抽象，什么是具体？在我看来，抽象就是系统中对变化封装的战略逻辑，体现了系统的必然性和稳定性，能够被具体层次复用和覆写；而具体则包含了与具体实现相关的逻辑，体现了系统的动态性和变动性。因此，抽象是稳定的，而具体是变动的。
    <br />
    Bob大叔在《敏捷》一书直言，程序中所有的依赖关系都应终止于抽象类或者接口，就是对面向抽象编程一针见血的回应，其原因归根结底源自于我们对抽象和具体的认知和分解：关联应该终止于抽象，而不是具体，保证了系统依赖关系的稳定。具体类发生的修改，不会影响其他模块或者关系。那么如何做到这种理想的依赖于抽象的设计呢？ </p>
    <ul>
        <li>层次清晰化 </li>
    </ul>
    将复杂的问题简单化，是人类思维的一般智慧，也自然而然是实现软件设计的基本思路。而将复杂的业务需求通过建模过程的抽象化提炼，去粗取精，去伪存真，凡此种种。而抽象的过程，其目标之一就是形成对于复杂问题简单化的处理过程，只有形成层次简单的逻辑才能将复杂需求中的关系梳理清晰，而依赖的本质正如上文所言，不就是处理关系吗？
    <br />
    所以，清晰的层次划分，进而形成的模块化，是实现系统抽象的必经之路。
    <ul>
        <li>分散集中化 </li>
    </ul>
    由需求而设计的过程，就是一个分散集中化的过程，把需求相关的业务通过开发流程的需求分析过程进行整理，逐步形成需求规格说明、概要设计和详细设计等基本流程。分散集中化，是一个梳理需求到形成设计的过程，因此对于把握系统中的抽象和具体而言，是一个重要的分析过程和手段。现代软件工程已经对此形成了科学的标准化流程处理逻辑，例如可以借助UML更加清晰的设计流程、分析设计要素，进行标准化沟通和交流。
    <ul>
        <li>具体抽象化 </li>
    </ul>
    将具体问题抽象化，是本节关注的要点，而处理的方法是什么呢？答案就在设计模式，设计模式是前辈智慧的总结和实践，所以熟悉和学习设计模式，是学习和实践设计问题的必经之路。然而，没有哪个问题是由设计模式全权解决，也没有那个模式能够适应所有的问题，因此我们要努力的是尽量积累更多的模式来应对多变的需求。作为软件设计话题中最重量级的话题，我也会在以后的岁月中对设计模式问题进行一些探讨。
    <ul>
        <li>封装变化点 </li>
    </ul>
    总的来说，抽象和变化就像一对孪生兄弟，将具体的变化点隔离出来以抽象的方式进行封装，在变化的地方寻找抽象是面对抽象最理想的方式。所以，如何去寻找变化是设计要解决的首页问题，例如工厂模式的目标是封装对象创建的变化，桥接模式封装的是对象间的依赖关系变化等等。23个经典的设计模式，从某种角度来看，正是对不同变化点的封装角度提出的不同解决方案。
    <br />
    这一设计原则中我们还将之称为SoC（Separation of Concerns）原则，定义了对于实现理想的高耦合、低内聚目标的统一规则。&nbsp;
    <p><font color="#800000" size="4">2.3 设计的哲学</font></p>
    <p>之所以花如此篇幅来讲述一个看似简单的问题，其实最终理想是回归到软件设计目标这个命题上。如果悉心钻研就可发现，设计的最后就是对关系的处理，正如同生活的意义在于对社会的适应一样。因此，回归到设计的目标上我们就可知，完美的设计过程就是对关系的处理过程，也就是对依赖的梳理过程，并最终形成一种合理的耦合结果。
    <br />
    所以，面向对象并不神秘，我们以生活的现实眼光来看更是如此。把面向对象深度浓缩起来，我觉得可以概括为： </p>
    <ul>
        <li>目标：重用、扩展 </li>
        <li>核心：低耦合、高内聚 </li>
        <li>手段：封装变化 </li>
        <li>思想：面向接口编程、面向抽象编程 </li>
    </ul>
    <p>
    <br />
    其实，就是这么简单。在这种意义上来说，面向对象思想是现代软件架构设计的基础。下面我们以三层架构的设计为例，来进一步感受这种依赖哲学的具体应用。关于依赖的抽象和对变化隔离的基本思路，其实也是实现我们典型三层架构（或者）多层架构的重要基础。只要使各个层次之间依赖于较稳定的接口，才能使得各个层次之间的变化被隔离在本层之内，不会造成对其他层次的影响，这完全符合开放封闭原则追求的优良设计理念。将这种思路表达为设计，可以表示为：<img src="http://www.cnblogs.com/images/cnblogs_com/anytao/162192/o_anytao_write_design_dependency_04.jpg" alt="" /> </p>
    <p>在此，IDataProvider作为隔离业务层和数据层的抽象，IService作为隔离业务层和表现层的抽象，保证了各个层次的相对稳定和封装。而体现在此的设计逻辑，就正是我们对于抽象和耦合基本目标概念的体现，例如作为重用的单元，抽象隔离保证了对外发布接口的单一和稳定，所以达到了最高限度的重用；通过引入中间的稳定的接口，达到了不同层次的有效隔离，层与层之间体现为轻度耦合，业务层只持有IDataProvider就可以获取数据层的所有服务，而表现层也同样如此；最后，这种方式显然也直接实践了面向接口编程，面向抽象编程的经典理念。
    <br />
    同样的道理，对于架构设计的很多概念，放大可以扩展为面向服务设计所借鉴，放小这正是我们反复降调的依赖倒置原则在类设计中的基本思想。因此，牢记对我影响至深的一位大牛的说法：软件设计的任何问题，都可以通过引入中间逻辑了解决。而这个中间逻辑，很多时候被封装为抽象，是最为合理和智慧的解决方案。
    <br />
    让我们再次高颂《老子》的小国寡民论，来回味关于依赖哲学中，我们如何实现更好的和谐统一，如何遵守科学的软件管理思想："邻国相望，鸡犬之声相闻，民至老死，不相往来。" </p>
    <p><font color="#800000" size="5">3 认识依赖倒置原则（DIP）</font></p>
    <p><font color="#800000" size="4">3.1 什么是依赖倒置？</font></p>
    <p>Bob大叔在《Agile Principles, Patterns, and Practices》一书中对依赖倒置原则进行了精辟的总结为： </p>
    <ul>
        <li>高层模块不应该依赖于低层模块，二者都应该依赖于抽象。 </li>
        <li>抽象不应该依赖于具体，细节应该依赖于抽象。 </li>
    </ul>
    我规规矩矩一字不差的把上述真言放在心里，却发现大师的牛论实在有点故作玄虚，就像欣赏Bob在论述DIP时的插画一样费解不讨好：
    <p><img src="http://www.cnblogs.com/images/cnblogs_com/anytao/162192/o_anytao_write_design_dependency_13.jpg" alt="" />&nbsp; </p>
    <p>其实著名的好莱坞原则更形象的阐述了这一思想：你不要调我，我来调你。不管是通俗的还是高尚的，却都不约而同的揭示了依赖倒置原则的最核心思想就是： </p>
    <p><strong><font color="#ff0000">依赖于抽象，对接口编程，对抽象编程！</font></strong></p>
    <p>相较而言，从实际的生活中来看依赖倒置，就像下面这个示例揭示的一样。</p>
    <p><font color="#800000" size="4">3.2 从实例开始</font></p>
    <p>综合对依赖倒置的认识，结合到具体的程序实现而言，依赖倒置预示着程序中的依赖关系不应是具体的类型，而是归咎于抽象类和接口。下面我们通过一个简单的实例来分析符合依赖倒置和违反依赖倒置，对于系统设计的影响和区别。我们的需求是为某个遥控器生产商，实现一个万能遥控器，该遥控器可以对当前市场上的很多电子设备进行&#8220;打开&#8221;和&#8220;关闭&#8221;的操作，例如你可以使用Anytao牌遥控器打开海尔电视、创维电视等等，当然更理想的状态是可以打开电冰箱、电灯还有门窗等等，总之凡是可以互联的设备都是未来万能遥控器的新需求。
    <br />
    那么该遥控器厂商在设计之初，该如何去考虑实现一个可以打开任何设备的遥控器呢？这一重责首先落在了一位年轻气盛的小王设计师身上，因为遥控器厂家当前的直接客户只有海尔电视一家，所以他轻松的实现了下面的设计，并且兴高采烈的进行了大批量生产：</p>
    <p><img src="http://www.cnblogs.com/images/cnblogs_com/anytao/162192/o_anytao_write_design_dependency_08.jpg" alt="" /> </p>
    <p>随后，厂商多了一个重量级客户长虹，所以小王不得不对初试设计进行了改造，勉强适应了新的需求，如下：</p>
    <p><img src="http://www.cnblogs.com/images/cnblogs_com/anytao/162192/o_anytao_write_design_dependency_09.jpg" alt="" /></p>
    <p>虽然小王应付了这次需求变动，但是原本的设计显然已经捉襟见肘。正当小王绞尽脑汁进行改造的同时，新的需求接踵而来：新飞冰箱、飞利浦照明、盼盼防盗门，一个接一个。小王的最终设计变成了这般摸样：</p>
    <p><img src="http://www.cnblogs.com/images/cnblogs_com/anytao/162192/o_anytao_write_design_dependency_10.jpg" alt="" />&nbsp; </p>
    <p>哎，真是太累了。每一次的需求变更都伴随着小王对遥控器Remote的再次摧残，Remote内部不断增加新的引用和操作处理，显然一个if/else式的判断布满了整个Open和Close的操作中，这种设计显然无法满足OCP对扩展开放、对修改封闭的要求。显然，如果想让卖出去的遥控器也适应新的需求，在小王当前的设计实现方案中是根本无法实现的，遥控器厂商总不能召回已经售出所有的遥控器，再拆开进行重新改造吧。
    <br />
    一筹莫展的小王，终于在崩溃之际想起了经验丰富的前设计师老王，并立即请教如何解决当前问题的思路。而老王也毫不含糊，给出了一个初步的实现：</p>
    <p><img src="http://www.cnblogs.com/images/cnblogs_com/anytao/162192/o_anytao_write_design_dependency_11.jpg" alt="" /> </p>
    <p>在当前的设计中，老王的思路是让遥控器厂切断和各个厂家的直接联系，而是寻找所有电视厂商的领导（例如，电视机协会），请电视机协会制定所有电视机厂商必须遵守的打开和关闭等操作的契约，遥控器厂和电视机协会建立直接的联系而不是各个具体的电视厂商，于是便有了上述设计思路。而新的需求来临时，因为各个厂商必须遵守TurnOn和TurnOff的契约，所以轻松的万能遥控器可以应付所有的电视机品牌，实现的具体操作已经由遥控器转移到具体的厂商手上（顺便说说这也是所有权的倒置体现），轻松的小王终于大呼一口气。并且再接再厉修改了更完善的版本：</p>
    <p><img src="http://www.cnblogs.com/images/cnblogs_com/anytao/162192/o_anytao_write_design_dependency_12.jpg" alt="" /></p>
    <p>现在，遥控器基本实现了万能的要求，任何新的需求或者修改都可以轻松胜任。小王终于解决了原本设计的所有问题，带着感激盛情邀请老王吃饭致谢。席间就坐，小王请教老王二次设计的秘诀，老王神秘一笑沾酒在桌子上写了几个大字：依赖倒置。经历此次设计重构洗礼的小王，也在实战中体味了设计的精妙，看着依赖倒置几个字小王也会心的笑了。
    <br />
    万能遥控器的故事，是一个系统实现中经常的事儿。而这些设计在<a href="http://www.codeplex.com/ezsocio">Ezsocio</a>项目中有广泛的应用，例如对于DataProvider和Service的处理方式，正是一种典型的遵循DIP原则的设计思路。 </p>
    <p><font color="#800000" size="4">3.3 为什么依赖倒置？</font></p>
    <p>依赖倒置原则揭示了面向对象思想中一个最基本而最核心的话题，那就是：面向抽象编程。任何对依赖倒置原则的违反都不同程度的偏离了面向对象设计思想的轨道，所以如果你想自己的程序是否足够的OO，透彻的了解依赖倒置是必不可少的。
    <br />
    所以，要问答为什么依赖倒置这个话题，我觉得可以从以下几个方面来阐释：</p>
    <ul>
        <li>依赖倒置是保证开放封闭的前提和基础。 </li>
        <li>依赖倒置是对抽象和依赖的基本原则和基本思想的哲学阐释。 </li>
        <li>依赖倒置是框架设计的核心思想。 </li>
        <li>依赖倒置是控制反转和依赖注入的思想基础。 </li>
    </ul>
    <br />
    综上而言，依赖倒置是对软件实体关系处理的基本思想原则，也是其他设计原则与设计模式的基础之一，因此遵守依赖倒置是实现OO的基本原则，是我们必须了解的基础性原则。下面，我们对此进行详细的说明和举例。
    <p><font color="#800000" size="4">3.4 为什么是倒置？</font></p>
    <p>鲁迅先生有云：其实地上本没有路，走的人多了也便成了路。对依赖倒置原则中的&#8220;倒置&#8221;二字而言，其实也类似于一条被很多人走过的路，因为习惯性的称呼走过的为&#8220;路&#8221;，所以只好把违反习惯的东西称为&#8220;倒置的路&#8221;。这倒置的含义，正基于此。
    <br />
    对于从结构化编程走过的人来说，基于软件复用的考虑，侧重于对具体模块的复用，因为也就习惯了从高层模块出发了构建系统流程的思维模式，所以那时的高手一出手就实现了高层依赖于底层的典型套路，例如：</p>
    <p><img src="http://www.cnblogs.com/images/cnblogs_com/anytao/162192/o_anytao_write_design_dependency_01.jpg" alt="" /></p>
    <p>高层模块通过自上而下的实现来完成系统功能的调用，将这种方式表达为代码就是：</p>
    <div class="csharpcode">
    <pre class="alt">        <span class="rem">// Release : code01, 2008/11/02                    </span></pre>
    <pre>        <span class="rem">// Author  : Anytao, http://www.anytao.com </span></pre>
    <pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">void</span> Main()</pre>
    <pre>        {</pre>
    <pre class="alt">            <span class="kwrd">try</span></pre>
    <pre>            {</pre>
    <pre class="alt">                <span class="rem">//Do something here.</span></pre>
    <pre>            }</pre>
    <pre class="alt">            <span class="kwrd">catch</span></pre>
    <pre>            {</pre>
    <pre class="alt">                Log(<span class="kwrd">true</span>, <span class="str">"XMLLog"</span>);</pre>
    <pre>            }</pre>
    <pre class="alt">        }</pre>
    <pre>&nbsp;</pre>
    <pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">void</span> Log(<span class="kwrd">bool</span> isRead, <span class="kwrd">string</span> logType)</pre>
    <pre>        {</pre>
    <pre class="alt">            <span class="kwrd">if</span> (isRead)</pre>
    <pre>                ReadLog(logType);</pre>
    <pre class="alt">            <span class="kwrd">else</span></pre>
    <pre>                WriteLog(logType);</pre>
    <pre class="alt">        }</pre>
    </div>
    <style type="text/css">
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }</style>
    <p>然而，当软件设计的模式发展到面向对象阶段时，我们发现原来习惯的世界了已经变了。基于高层依赖于底层的弊政，也越来越被可扩展性的系统需求折磨的面目全非，例如如果日志记录的载体发生变化，当前设计中需要同时自上而下的修改实现的逻辑，同时避免出现越来越多的if/else结构。所以当新的依赖关系从传统的方式被完全扭转时，&#8220;倒置&#8221;二字就此诞生了。我们修改Log实现的设计思路，将可能变化的逻辑封装为抽象接口，使得高层依赖发生转换：</p>
    <p>&nbsp;<img src="http://www.cnblogs.com/images/cnblogs_com/anytao/162192/o_anytao_write_design_dependency_05.jpg" alt="" /></p>
    <p>程序实现的逻辑早已被面向对象的设计思想所取代，我们新的实现变成了：</p>
    <div class="csharpcode">
    <pre class="alt">    <span class="rem">// Release : code02, 2008/11/02                    </span></pre>
    <pre>    <span class="rem">// Author  : Anytao, http://www.anytao.com </span></pre>
    <pre class="alt">    <span class="kwrd">public</span> <span class="kwrd">class</span> Client</pre>
    <pre>    {</pre>
    <pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">void</span> Main()</pre>
    <pre>        {</pre>
    <pre class="alt">            ILog myLogger = <span class="kwrd">new</span> XMLLog();</pre>
    <pre>            <span class="kwrd">try</span></pre>
    <pre class="alt">            {</pre>
    <pre>&nbsp;</pre>
    <pre class="alt">            }</pre>
    <pre>            <span class="kwrd">catch</span></pre>
    <pre class="alt">            {</pre>
    <pre>                myLogger.Write();</pre>
    <pre class="alt">            }</pre>
    <pre>        }</pre>
    <pre class="alt">    }</pre>
    <pre>&nbsp;</pre>
    <pre class="alt">    <span class="kwrd">public</span> <span class="kwrd">interface</span> ILog</pre>
    <pre>    {</pre>
    <pre class="alt">        <span class="kwrd">void</span> Read();</pre>
    <pre>        <span class="kwrd">void</span> Write();</pre>
    <pre class="alt">    }</pre>
    <pre>&nbsp;</pre>
    <pre class="alt">    <span class="kwrd">public</span> <span class="kwrd">class</span> XMLLog : ILog</pre>
    <pre>    {</pre>
    <pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">void</span> Read()</pre>
    <pre>        {</pre>
    <pre class="alt">        }</pre>
    <pre>&nbsp;</pre>
    <pre class="alt">        <span class="kwrd">public</span> <span class="kwrd">void</span> Write()</pre>
    <pre>        { </pre>
    <pre class="alt">        }</pre>
    <pre>    }</pre>
    </div>
    <style type="text/css">
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }</style>
    <p>所以，了解了历史才能正视现实，对于软件设计同样如此，只有认清楚依赖倒置产生的历史背景，我们才能更加熟练的驾驭倒置含义本身带来的误解，而将中心思想牢牢的把握在依赖倒置最核心的设计思想上，那还是万变不离其宗的：依赖于抽象，这简单的5个字上。
    <br />
    对于所属权关系的依赖问题上，我们看到，只有倒置的才是面向对象的，没有倒置的还是面向结构的。如果你的系统中存在着不合理的依赖关系，那么依赖倒置将是检查系统设计最好的标尺，这也是我们把握这一原则的实际意义之一。 </p>
    <p><font color="#800000" size="4">3.5 如何依赖倒置？</font></p>
    <p>如何依赖倒置的关键，还是体现在如何对抽象和具体的封装和分离，实践的基本思路就是封装变化。这正如我们在单一职责原则中反复强调，对一个类只有一个引起它变化的原因。我们实践依赖倒置，仍然可以从关注变化开始，详细的分析和预测系统中的变化点，然后针对每个可能的变化抽象出相对稳定的约束，这是我们实践依赖倒置原则最基本的方法步骤。
    <br />
    就原理而言，依赖倒置要求我们的设计： </p>
    <ul>
        <li>少继承，多聚合 </li>
        <li>单向依赖（低耦合，高内聚） </li>
        <li>封装抽象 </li>
        <li>对依赖关系都应该终止于抽象类和接口 </li>
    </ul>
    <br />
    就实践而言，经典的软件设计实践为我们提出了很多值得借鉴的思路，例如每个设计模式就是对一种特定情况的实践总结，在此我们继续列出一些经典的大师忠言，Bob大叔在《Agile Principles, Patterns, and Practices》一书对此进行了3点总结：
    <ul>
        <li>任何变量都不应该持有一个指向具体类的指针或者引用。 </li>
        <li>任何类都不应该从具体类派生。 </li>
        <li>任何方法都不应该覆写它的任何基类中的已经实现的方法。 </li>
    </ul>
    实际上，在实际的设计过程中要完全遵守这几点要求是有难度的，所以如何既能很好的遵守设计原则，又能很好的适应代码情况，是值得权衡的问题，需要我们不断的积累和实践。另外，还有几个经验只谈：
    <ul>
        <li>系统架构应该有清晰的层次定义，层次之间通过接口向外提供内聚服务，正如在三层示例中的举例一样。 </li>
        <li>典型的以new进行的对象创建操作，是对依赖倒置原则的典型违反，我们将在后文进行详细讨论。 </li>
    </ul>
    <br />
    如何依赖倒置，我们阐释了一点原则还有一点方法，算是对实现依赖倒置的一点小结。然而，在实际的开发过程中，并没有一成不变的规则，当前的面向对象语言本身就提供了对抽象和封装的支持，为实现面向对象设计提供了基础机制。回顾软件开发的历史，我们不难看出依赖和封装哲学的发展轨迹，在结构化编程中函数是封装的基本单元；随着面向对象的发展C++/C#高级语言以类为基本单元，第一次将数据和行为有机的组合为一个逻辑单元，于是有了对于不同类之间的关系处理哲学；而SOA中封装的单元上升为service，是一种更高意义的逻辑封装，实现了更优良的逻辑封装和松散耦合关系。同样的道理，也体现在三层架构的分割和通信中，体现在ORM对表现层和领域层的分离中。
    <br />
    因此，依赖倒置是一种高度的智慧和经验总结，如何实现依赖倒置也是一种积累和不断的学习。&nbsp;
    <p><font color="#800000" size="4">3.6 也有弊端</font></p>
    <p>然而，一味的遵守原则，就等于没有原则。重要的是，我们需要把握其平衡，在进行开发中适当的把握其程度。Bob在《敏捷》中也提到这个问题，他总结了依赖倒置的两个弊端，同样需要我们必要的关注： </p>
    <ul>
        <li>对抽象编程，需要增加必要的类和辅助代码进行支持，某种程度上增加了系统复杂度和维护成本； </li>
        <li>当具体类不存在变化时，遵守依赖倒置是多此一举。所以，如果具体或细节没有变化可能时，我们没有必要通过抽象转嫁依赖是没有必要的处理。 </li>
    </ul>
    <p>所以，学习模式或者原则必须把握灵活处理，不能一味强行。</p>
    <div>&nbsp;</div>
    <div>
    <table style="border-collapse: collapse;" border="0">
        <colgroup><col style="width: 590px;"></colgroup>
        <tbody valign="top">
            <tr style="background: #87bfd1 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
                <td style="padding-left: 7px; padding-right: 7px;"><span style="color: white;"><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/anytao/125111/o_icon_your_info.gif" art="Anytao.com" /><span style="color: white;"><font color="#ff0000">下集预告</font></span>&nbsp;</span></td>
            </tr>
            <tr>
                <td style="padding-left: 7px; padding-right: 7px;">
                <p>在下篇中，我们将继续对依赖相关的问题进行讨论，基本的内容还包括：</p>
                <ul>
                    <li>解构控制反转（IoC）和依赖注入（DI） </li>
                    <li>基于契约编程：SOA架构下的依赖 </li>
                    <li>相关的设计模式简析 </li>
                    <li>对象创建的依赖 </li>
                </ul>
                <p>近期发布，敬请期待。
                <br />
                </p>
                <p align="right"><font color="#ff0000"><strong>*Hot:</strong></font><a title="《你必须知道的.NET》" href="http://book.anytao.com/">《你必须知道的.NET》</a></p>
                </td>
            </tr>
        </table>
        </div>
        <p>&nbsp;</p>
        <p><font color="#800000" size="4">参考文献</font></p>
        <ul>
            <li><a href="http://martinfowler.com/">Martin Fowler</a>，<a target="_blank" href="http://martinfowler.com/articles/injection.html">Inversion of Control Containers and the Dependency Injection pattern</a> </li>
            <li><a target="_blank" href="http://ninputer.cnblogs.com/">装配脑袋</a>，<a href="http://ninputer.cnblogs.com/archive/2006/01/12/315890.html">泛型技巧系列：用泛型打造可复用的抽象工厂</a> </li>
        </ul>
        <p>&nbsp;</p>
        <p><font color="#800000" size="4">系列导航</font>
        <br />
        [<a href="http://www.cnblogs.com/anytao/archive/2007/08/15/anytao_design_catalog.html">目录导航</a>]
        <br />
        [<a href="http://www.cnblogs.com/anytao/archive/2007/08/15/anytao_design_01.html">第一回：设计，应该多一点</a>]
        <br />
        [<a href="http://www.cnblogs.com/anytao/archive/2007/09/03/anytao_design_02.html">第二回：对象的旅行---对象和人，两个世界，一样情怀</a>]
        <br />
        [<a href="http://www.cnblogs.com/anytao/archive/2008/03/19/anytao_design_03.html">第三回：设计的分寸</a>]</p>
        <div id="MySignature">
        <p class="class"><a href="http://i.anytao.com/">anytao</a> | <a class="copyright" href="http://www.anytao.com/">&#169; 2008 Anytao.com</a></p>
        <p class="class">2008/12/02 | <a href="http://anytao.cnblogs.com/">http://anytao.cnblogs.com/</a></p>
        <p class="class">本文以&#8220;现状&#8221;提供且没有任何担保，同时也没有授予任何权利。 | This posting is provided "AS IS" with no warranties, and confers no rights.</p>
        <p>本文版权归作者所有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。</p>
        </div><img src ="http://www.cnblogs.com/anytao/aggbug/1345389.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/><a href="http://job.cnblogs.com/offer/302/" target="_blank">盛大招聘.Net开发工程师 </a><br/><a href="http://www.hjbook.net/product/4041/" target="_blank">经典好书：.NET框架程序设计（修订版）</a><br/>新闻：<a href="http://news.cnblogs.com/n/44343/" target="_blank">2009年9大最热门IT技能</a><br/>导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target="_blank">招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>[推荐]思考设计，一本难得的好书《Microsoft .NET: Architecting Applications for the Enterprise》</title><link>http://www.cnblogs.com/anytao/archive/2008/12/01/anytao_recommand_book_aae.html</link><dc:creator>Anytao</dc:creator><author>Anytao</author><pubDate>Sun, 30 Nov 2008 16:33:00 GMT</pubDate><guid>http://www.cnblogs.com/anytao/archive/2008/12/01/anytao_recommand_book_aae.html</guid><wfw:comment>http://www.cnblogs.com/anytao/comments/1344623.html</wfw:comment><comments>http://www.cnblogs.com/anytao/archive/2008/12/01/anytao_recommand_book_aae.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cnblogs.com/anytao/comments/commentRss/1344623.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/anytao/services/trackbacks/1344623.html</trackback:ping><description><![CDATA[<p><strong><a href="http://book.anytao.com/"><strong><font color="#ff0000">《你必须知道的.NET》网站</font></strong></a></strong> | <strong><font color="#0000ff"><a href="http://www.anytao.com/">Anytao技术博客</a>&nbsp; </font></strong></p>
<h2 align="center"><font color="#0000ff" face="微软雅黑" size="6">[推荐]思考设计，一本难得的好书《Microsoft .NET: Architecting Applications for the Enterprise》</font></h2>
<p align="right"><font face="微软雅黑">发布日期：2008.12.01 作者：</font><a href="http://about.anytao.com/"><font face="微软雅黑">Anytao</font></a>
<br />
<font color="#ff0000" face="微软雅黑">&#169; 2008 </font><a href="http://www.anytao.com/"><font color="#ff0000" face="微软雅黑">Anytao.com</font></a><font color="#ff0000" face="微软雅黑"> ，Anytao原创作品，转贴请注明作者和出处。</font></p>
<p>一本好书碰撞一种思想，一部佳作影响一个时代。软件领域同样如此，我不想细枝末节似的讨论佳作对于技术的影响，这一点是毋庸置疑的。作为设计话题，历史上的著述不乏经典之作，GoF的《Design Patterns: Elements of Reusable Object-Oriented Software》、BoB大叔的《敏捷软件开发：原则、模式与实践》以及Martin Fowler的《企业应用架构模式》和《重构》都是经典中的经典。而今天，我想分享的一本好书，同样关注的是关于架构和设计的故事，他的名字是：Microsoft .NET: Architecting Applications for the Enterprise。</p>
<p>所以，本身关注的是基于.NET平台下，对于企业级应用的架构和设计问题。那么，本身的特别之处和值得推荐的理由呢，我想可以小结为以下几点：</p>
<ul>
    <li>一本详细的介绍设计与架构轨迹的著作，包括了从理论到实践的方方面面，你可以从目录中做以大致了解。 </li>
    <li>关注.NET平台下的设计问题，这是以Java为基础来讨论设计架构的大部分著作所没有的特点，当然更适合熟悉.NET开发的工程师了解。 </li>
    <li>语言生动，关注细节。 </li>
</ul>
<p>既然是推荐，首先来一睹本书的皮囊吧： </p>
<p><img src="http://www.cnblogs.com/images/cnblogs_com/anytao/162192/o_book_architectingapplications.jpg" alt="" /> </p>
<p>作者：<a href="http://www.amazon.com/exec/obidos/search-handle-url/ref=ntt_athr_dp_sr_1?%5Fencoding=UTF8&amp;search-type=ss&amp;index=books&amp;field-author=Dino%20Esposito">Dino Esposito</a>, <a href="http://www.amazon.com/exec/obidos/search-handle-url/ref=ntt_athr_dp_sr_2?%5Fencoding=UTF8&amp;search-type=ss&amp;index=books&amp;field-author=Andrea%20Saltarello">Andrea Saltarello</a>，二位都是重量级的Solution Architect，ASP .NET专家、作者和培训师。多年的软件开发经验，使得本书的讨论更加一线色彩，讨论的话题也着重关注于我们平常遇到的问题和开发。 不过，本书预计于12月在全球出版，你可以通过<a target="_blank" href="http://www.amazon.com/Microsoft%C2%AE-NET-Architecting-Applications-PRO-Developer/dp/073562609X">Amazon</a>，了解其相关出版情况，遗憾的是因为刚刚面世，本书还未有中文版本，有兴趣的读者只能猛啃E文了。</p>
<p>介绍大格局，软件设计领域你肯能首先想到的是GoF的设计模式，本书虽然无可避免的涉及对设计模式的阐释，但关注的重点不是什么是模式这样的问题，而是把设计模式寄托在架构和设计的具体实现中，全书分为2个大的部分来论述，基本的目录包括：</p>
<ul>
    <li>Principles，介绍了设计相关的基本内容和必备基础，作者首先对当前软件架构的情况进行了一点讨论，然后提纲挈领式的介绍了两个方面的基础内容：UML和设计原则及模式。尤其称道的是，对于原则和模式的讨论笔墨不多，虽短小而精悍，通过简明扼要的论述能让毫无基础的读者，迅速建立起对基本原则和模式的概念，对于深入的了解OO大有裨益。
    <ul>
        <li>Architects and Architecture Today </li>
        <li>UML Essentials </li>
        <li>Design Principles and Patterns </li>
    </ul>
    </li>
    <li>Disign of the System，第二部分中是本身关注的重点，基于第一部分的设计基础。在第二部分中将理论和思想与应用实践相结合，对于Enterprise级应用的不同层次设计进行讨论，业务层、服务层、数据访问层和表现层进行层层讨论。对于开发人员或设计人员而言，本身以实例的方式和理论讨论结合的方式，对设计最佳实践进行深入浅出的讨论。
    <ul>
        <li>Business Layer </li>
        <li>Service Layer </li>
        <li>Data Access Layer </li>
        <li>Presentation Layer </li>
    </ul>
    </li>
</ul>
<p>另外，本书还提供了很多不错的资源，你可以随着作者的笔墨轨迹来欣赏更多关于相关内容的讨论，算是在收获之外的收获。</p>
<p>诚如本书书名所言，翻起400多页的珠玑之论，我们收获的是如何实现设计优雅、简化复杂的企业级应用方案。翻起400多页的实例剖析，我们将对面向对象、设计原则、设计模式、多层架构、UML建立深刻的理解和实践。</p>
<p>还等什么，如果你有机会看到本书，请不要吝惜时间把它尽快消灭，就像我在地铁上如饥似渴的畅读一样，把它带到你的软件思想中吧。</p>
<p>&nbsp;</p>
<div id="MySignature">
<p class="class"><a href="http://i.anytao.com/">anytao</a> | <a class="copyright" href="http://www.anytao.com/">&#169; 2008 Anytao.com</a></p>
<p class="class">2008/12/01 | <a href="http://anytao.cnblogs.com/">http://anytao.cnblogs.com/</a></p>
<p class="class">本文以&#8220;现状&#8221;提供且没有任何担保，同时也没有授予任何权利。 | This posting is provided "AS IS" with no warranties, and confers no rights.</p>
<p>本文版权归作者所有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。</p>
</div><img src ="http://www.cnblogs.com/anytao/aggbug/1344623.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/><a href="http://job.cnblogs.com/offer/302/" target="_blank">盛大招聘.Net开发工程师 </a><br/><a href="http://www.hjbook.net/product/4041/" target="_blank">经典好书：.NET框架程序设计（修订版）</a><br/>新闻：<a href="http://news.cnblogs.com/n/44342/" target="_blank">北京谷歌被法院判令更名 赔偿谷歌中国10万</a><br/>导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target="_blank">招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>《你必须知道的.NET》第二次印刷，未来与梦想</title><link>http://www.cnblogs.com/anytao/archive/2008/11/20/anytao_insidenet_futureanddream.html</link><dc:creator>Anytao</dc:creator><author>Anytao</author><pubDate>Wed, 19 Nov 2008 16:01:00 GMT</pubDate><guid>http://www.cnblogs.com/anytao/archive/2008/11/20/anytao_insidenet_futureanddream.html</guid><wfw:comment>http://www.cnblogs.com/anytao/comments/1337127.html</wfw:comment><comments>http://www.cnblogs.com/anytao/archive/2008/11/20/anytao_insidenet_futureanddream.html#Feedback</comments><slash:comments>93</slash:comments><wfw:commentRss>http://www.cnblogs.com/anytao/comments/commentRss/1337127.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/anytao/services/trackbacks/1337127.html</trackback:ping><description><![CDATA[<p><strong><a href="http://book.anytao.com/"><strong><font color="#ff0000">《你必须知道的.NET》网站</font></strong></a></strong> | <strong><font color="#0000ff"><a href="http://www.anytao.com/">Anytao技术博客</a>&nbsp; </font></strong></p>
<h2 align="center"><font color="#0000ff" face="微软雅黑" size="6">《你必须知道的.NET》第二次印刷，未来与梦想</font></h2>
<p align="right"><font face="微软雅黑">发布日期：2008.11.20 作者：</font><a href="http://about.anytao.com/"><font face="微软雅黑">Anytao</font></a>
<br />
<font color="#ff0000" face="微软雅黑">&#169; 2008 </font><a href="http://www.anytao.com/"><font color="#ff0000" face="微软雅黑">Anytao.com</font></a><font color="#ff0000" face="微软雅黑"> ，Anytao原创作品，转贴请注明作者和出处。</font></p>
<p>2008年的4月之初，<a target="_blank" href="http://book.anytao.com/">《你必须知道的.NET》</a>一书在历经近1年的耕耘之后上市，2008年9月刚过，<a target="_blank" href="http://book.anytao.com/">《你必须知道的.NET》</a>在国庆之后第二次印刷。历经5月销售第一次印刷的所有5000册，在平淡无奇的技术图书市场，我这个新生算是交了一份合格的答卷。这一切还得感谢园子中的朋友们，一如既往的支持和关注。作为作者，怀揣着技术的梦想来展望技术的未来，是我在重印之际的一点感受，作为习惯性动作，这个小结比以往来得晚一些，但是仍然任重道远。</p>
<p>&nbsp;</p>
<div style="border: 1px dotted teal; text-align: center; width: 95%; color: teal; font-size: 9pt;"><img style="display: inline;" src="http://www.cnblogs.com/images/cnblogs_com/anytao/125111/o_InsideDotNetBook_Logo.jpg" alt="" />
<br />
<a title="《你必须知道的.NET》" href="http://book.anytao.com/">《你必须知道的.NET》</a></div>
<p>既然是一点点小结，那么首先要做的是感谢。最应感谢的是园子中所有关心和关注<a target="_blank" href="http://i.anytao.com/">anytao</a>和<a target="_blank" href="http://book.anytao.com/">《你必须知道的.NET》</a>的所有朋友，你们的建议、你们的批评还有你们的捧场，让我坚持不懈的完善自己，继续写作更多更好的技术文章。感谢<a target="_blank" href="http://www.cnblogs.com/dudu">dudu</a>和<a target="_blank" href="http://www.cnblogs.com/">博客园</a>，是这个平台成就了这一切，所有的记忆都在<a target="_blank" href="http://www.baidu.com/">百度</a>的搜索中导航到博客园，还有<a target="_blank" href="http://www.cnblogs.com/dudu">dudu</a>老大的无限支持。感谢给我指导和支持的圈中好友：<a target="_blank" href="http://www.cnblogs.com/artech">Artech</a>、<a target="_blank" href="http://www.cnblogs.com/Jillzhang">Jillzhang</a>、<a target="_blank" href="http://www.cnblogs.com/xiaoyin_net/">高阳</a>、<a target="_blank" href="http://www.cnblogs.com/guaiguai">怪怪</a>、<a target="_blank" href="http://www.cnblogs.com/ninputer">装配脑袋</a>、<a target="_blank" href="http://www.cnblogs.com/zhouyinhui">周银辉</a>、<a target="_blank" href="http://www.cnblogs.com/volnet">大V</a>、<a target="_blank" href="http://www.cnblogs.com/andersliu">AndersLiu</a>、<a target="_blank" href="http://www.cnblogs.com/JeffreyZhao">JeffreyZhao</a>、<a target="_blank" href="http://www.cnblogs.com/Justinw">Justin</a>、<a target="_blank" href="http://www.cnblogs.com/JimmyZhang">JimmyZhang</a>、<a target="_blank" href="http://www.cnblogs.com/zjneter">戏水</a>、<a target="_blank" href="http://www.cnblogs.com/fanweixiao">维生素C.NET</a>；感谢提出勘误和问题讨论的所有朋友，路西菲尔、<a target="_blank" href="http://www.cnblogs.com/hanxianlong">韩现龙</a>、AGPSky、<a target="_blank" href="http://www.cnblogs.com/jyk">金色海洋</a>、彭渊、孟维然；感谢在公司战斗的同壕战友<a target="_blank" href="http://www.cnblogs.com/terrylee">TerryLee</a>、<a target="_blank" href="http://www.cnblogs.com/dingxue">丁丁</a>和<a target="_blank" href="http://www.cnblogs.com/jessequ">曲老师</a>；感谢为本身付出辛勤劳动的编辑<a target="_blank" href="http://www.cnblogs.com/designbook/">孙老师</a>；无法一并列出所有让我感激流涕的朋友，千言万语以一声代之：谢了，我继续努力。</p>
<p>既然是未来和梦想，那么关于<a target="_blank" href="http://book.anytao.com/">《你必须知道的.NET》</a>我心中的未来是何样呢？对我而言，写书既不求飞黄腾达，也不图显富门庭，而且显然写书本身就实现不了这两个现实而现世的目标，所以不管图名还是图利，这并不是我对未来的梦想。其实，写书没有那么复杂的目标，也没有复杂的过程，写书就像博客，娱乐大家的同时也娱乐了自己。很多时候，在反复重复的工作生活中，只有洋洋洒洒写篇博文共享心情，才能让平淡的人生倍添几分激情。所以，简单的说，就是图个高兴，这就是所有的梦想的开端，而且发自肺腑。如果你是博客园的忠实粉丝，如果你每天能把打开cnblogs.com作为上网的必经之路，如果你每发文章就痛苦淋漓，我想我的这点心里话，并非虚伪而是真言。有幸的是，<a target="_blank" href="http://book.anytao.com/">《你必须知道的.NET》</a>从开始到现在，一直被大家认可和关注，让我谆谆不安的心情变得稍加平静。毕竟，我这丑媳妇，在公婆面前还是有着一丝的紧张。</p>
<p>既然是未来和梦想，那么回顾开始是必要而必须的过程。在提笔开始这个系列开始，我就想力图通过自己的努力，让更多技术之路上盲目奔走的朋友，能放下浮躁回归本源，在四处撞钟寻找技术真谛的同时，把其中一部分的经历回归到对技术基础和底层的关注上，一遍打好一个好的基础来提高理解应用层面的效率。如果你是一个精明的商人，这点旧账是很好清算的，所以作为一个倡导者我希望通过自己的微薄之力能掀起一点关注的热度。所以《你必须知道的.NET》一书所追求的目标和我自己在博客中所追求的理想，都是朝着这个方向前行的。不管是组织CLR团队的技术共享，还是在坚持在这里记录技术点滴；不管是参加各种各样的技术活动，还是和terry同志开发开源项目，我都把提高基础认知作为导向技术的重要开始来关注。在《<a href="http://www.cnblogs.com/anytao/archive/2008/05/28/must_net_20.html">[你必须知道的.NET]第二十回：学习方法论</a>》一文我有过类似的记录，也会坚持曾经的记录。同时，也希望这个梦想在<a target="_blank" href="http://book.anytao.com/">《你必须知道的.NET》</a>的未来能够带来更多。</p>
<p>既然是未来和梦想，那么必须对未来和梦想，做一点小计划。从<a target="_blank" href="http://book.anytao.com/">《你必须知道的.NET》</a>上市至今，我几乎每天都能受到各种各样的反馈和建议，这些读者呼声给我带来很多的思考和方向，也为指导自己未来的路子起到重要的参考作用。所以，走在当下，怀揣未来。我想把<a target="_blank" href="http://book.anytao.com/">《你必须知道的.NET》</a>很多尚未涉及的技术基础做以必要的补充，例如反射、P/Invoke、程序域等等（还有很多，已经有了一个基本的目录），需要在接下来的版本完善；我想把<a target="_blank" href="http://book.anytao.com/">《你必须知道的.NET》</a>中很多内容重新做以梳理，查漏补缺，整理更完善的思路和技术观点，因为自己也在发展，观点也在进步；在读者的反馈中，对于面向对象和设计问题的关注是呼声最高的关注点，虽然软件设计并非.NET技术基础，但确是软件技术的重要基础，所以以更多的笔墨和精力来晚上对于设计问题的讨论，将是下一步骤的重中之重，不管是整合在<a target="_blank" href="http://book.anytao.com/">《你必须知道的.NET》</a>，还是以新的形式呈现，这都是未来的目标；技术发展的速度实在是太快、太精彩，.NET 4.0也在明年的某个时候登台献艺，那么对于新技术的关注和探讨，也将是未来的必要补充，因为新鲜事物总是代表生产力的方向，对于技术学习也必不可少。</p>
<p>我想，这些就是我的一点点思考，废话不少，良言不多，只是我的习惯性总结。</p>
<div>
<table style="border-collapse: collapse;" border="0">
    <colgroup><col style="width: 590px;"></colgroup>
    <tbody valign="top">
        <tr style="background: #87bfd1 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
            <td style="padding-left: 7px; padding-right: 7px;"><span style="color: white;"><img src="http://www.cnblogs.com/images/cnblogs_com/anytao/125111/o_icon_your_info.gif" art="Anytao.com" alt="" /><a target="_blank" href="http://book.anytao.com/">《你必须知道的.NET》</a>相关链接</span></td>
        </tr>
        <tr>
            <td style="padding-left: 7px; padding-right: 7px;">支持中心：<a href="http://www.cnblogs.com/anytao/archive/2008/04/09/anytao_insidenet_center.html">《你必须知道的.NET》支持中心</a>
            <br />
            博客园专题：<a title="http://insidedotnet.cnblogs.com/" href="http://insidedotnet.cnblogs.com/">http://insidedotnet.cnblogs.com/</a>
            <br />
            网店导航：<a href="http://www.hjbook.net/product/1717/">博客园网店</a> | <a href="http://www.china-pub.com/39383">china-pub</a> | <a href="http://product.dangdang.com/product.aspx?product_id=20185392">当当网</a> | <a href="http://www.amazon.cn/mn/detailApp?qid=1207927277&amp;ref=SR&amp;sr=1-1&amp;uid=168-7679412-7549038&amp;prodid=bkbk823569">卓越</a> | <a href="http://www.dearbook.com.cn/book/247897">第二书店</a></td>
        </tr>
    </table>
    </div>
    <p>最后，作为汇报的一部分，把这几个月来大家对《你必须知道的.NET》一书的看法做以汇总，有褒有贬，褒多于贬（幸甚幸甚），算是对自己的提醒和对读者的反馈：</p>
    <p><font size="5"><font color="#800000">博客园评论（<a href="http://www.cnblogs.com/anytao/">http://www.cnblogs.com/anytao/</a>）</font></font></p>
    <p><a href="http://www.cnblogs.com/cnxcfeng/">A.feng..</a>，上个星期去上海书城，看见了这本书，然后翻看了一部分，实在是太精彩了，内容正如其名《你必须知道的.NET》，让我们可以更深入的了解一些原理，谢谢涛哥的无私奉献！虽然现在生活比较忙，但是我会仔细得读完她，有不懂之处到时还望多多指教：）<strong></strong></p>
    <p><a href="http://www.cnblogs.com/yuanhuaming/">疯流成性</a>，这本书我看了第1，2章。写的非常好啊。特别是那个万能加载器小生体会颇深。感谢作者写出这么好的一本书<strong></strong></p>
    <p><a href="http://www.cnblogs.com/yubao-master/">阿豹</a>，语言柔和,看上去到不像一本技术类的书籍有点像朋友之间的调侃,我很喜欢这种表达方式!我刚买了一本不到4天就跟随我的电脑包(包括笔记本)一起被小偷给偷了,郁闷之及,回来后又买了一本!正在学习中!!<strong></strong></p>
    <p>顾同学：你好，前几天本人刚刚买了《你必须知道的.NET》，几天下来，已经浏览了一遍，确实是本相当不错的.Net书籍。作者不仅技术高超，而且文笔幽默流畅，把原本有些苦涩的底层技术用通俗易懂，甚至带有非常幽默的手法写出来，实在难能可贵，在市面上几乎没发现类似风格的技术书籍。使得读者读起来不仅感觉生动有趣，而且很快就能掌握技术。另一方面，你必须知道的.NET，所讲的技术要点真的是名副其实，应该是每个.Net初学者或提升者都必须掌握的内容。在此，非常感谢作者王涛先生能在繁忙的工作之余带给广大.Net爱好者这样一份精美大餐。</p>
    <p>另外，本人对C#，Asp.Net开发，设计模式等方面的书感兴趣。呵呵，《你必须知道的.NET》本人已经买过，所以除了这本书，其它.Net相关的书籍都可以寄过来，谢谢。^_^</p>
    <p><font color="#ff0000">还有很多，限于邮件，不便登出</font></p>
    <p><font color="#ff0000"></font></p>
    <p><font color="#800000" size="5">China-pub评论</font></p>
    <p><a href="http://www.china-pub.com/39383">http://www.china-pub.com/39383</a></p>
    <p><a href="http://www.china-pub.com/member/bookpinglun/viewpinglun.asp?id=39383">http://www.china-pub.com/member/bookpinglun/viewpinglun.asp?id=39383</a></p>
    <p>&nbsp;</p>
    <p><a href="http://www.china-pub.com/member/bookpinglun/memberpl.asp?membername=wenyangaiping">wenyangaiping</a>，我被抽奖抽到了，这个出版社还是很守信的，没有欺骗我们读者，我继续支持你们。</p>
    <p><a href="http://www.china-pub.com/member/bookpinglun/memberpl.asp?membername=%E5%A4%A9%E7%94%9F%E8%83%86%E5%B0%8F">天生胆小</a>，读了三分之一，感觉还是不错的，就是作者在写例程的时候有些变量名最好可以分清楚些。就比如一个例程当中 到处是&#8220;File&#8221;&#8220;Files&#8221; &#8220;file&#8221;&#8220;files&#8221;变量 看起来很吃力。
    <br />
    个人看法 欢迎拍砖</p>
    <p><a href="http://www.china-pub.com/member/bookpinglun/memberpl.asp?membername=skyonsky">skyonsky</a>，.NET核心还是推荐读Jeffrey Richter那本CLR via C#，本书差了点，
    <br />
    不过的确值得鼓励，国内能写出如此好书。</p>
    <p><a href="http://www.china-pub.com/member/bookpinglun/memberpl.asp?membername=hap0129">hap0129</a>，不仅书的内容好，而且可以参加抽奖。大大的诱惑哎</p>
    <p><a href="http://www.china-pub.com/member/bookpinglun/memberpl.asp?membername=Fomalhaut">Fomalhaut</a>，书中代码是用C#的吗？</p>
    <p><a href="http://www.china-pub.com/member/bookpinglun/memberpl.asp?membername=onshoulders">onshoulders</a>，从目录来看，此书还是很有特点的，与一般技术书不同，讲解一些点，不求全。国内有人写这种书，值得支持。</p>
    <p><a href="http://www.china-pub.com/member/bookpinglun/memberpl.asp?membername=snowerlee">snowerlee</a>，easyyjb，早看过这页了。当时看的时候就没拿那边的当class1，这个错误不算什么，但应该引起重视。同样的还是一眼就可以纠正过来的还有几个，我忘了是什么了，反正一眼能看出来，所以也没在意。读者可以大度的接受这些小错误，但对于出版者就一定要谨小慎微。这本书总的来说还是相当有深度的，如果完全没学过面向对象的朋友或者只懂得用visual stidio的重复劳动者，可以仔细研读，确实会有收获，而且此书结构清晰，篇幅短，老手也可以跳跃阅读，这本书对有.net项目经验的人会更有效。</p>
    <p><a href="http://www.china-pub.com/member/bookpinglun/memberpl.asp?membername=easyyjb">easyyjb</a>，这书有个明显错误你们没看出来吗？奇怪了
    <br />
    17页，最下面的图，两个都是class1是错误的，
    <br />
    右边那个应该是class2才对，这个简单错误都发生，
    <br />
    校对的人该打屁股！！！</p>
    <p><a href="http://www.china-pub.com/member/bookpinglun/memberpl.asp?membername=bailinlin2008">bailinlin2008</a>，此书简单易懂,形象生动,有我许多不知道的知识,是一本好书</p>
    <p><a href="http://www.china-pub.com/member/bookpinglun/memberpl.asp?membername=onshoulders">onshoulders</a>，看过这本书和Jeffrey Richter那本CLR via C#书的同学，能否比较一下？</p>
    <p><a href="http://www.china-pub.com/member/bookpinglun/memberpl.asp?membername=happy115">happy115</a>，微软MVP,原来就是，用些简单的语言表达复杂的东西啊呀，~~~~~</p>
    <p><a href="http://www.china-pub.com/member/bookpinglun/memberpl.asp?membername=atpjc">atpjc</a>，书的内容不是讨论基本的语法，也不是讨论什么什么好 而是真正的设计，美中不足的是装帧有点差，其他的都非常不错</p>
    <p><a href="http://www.china-pub.com/member/bookpinglun/memberpl.asp?membername=zx02601091">zx02601091</a> ，书已多完过半，感觉写的挺好，语言生动，比喻形象。 但有的章节看完后总有意犹未尽的感觉，吊在半空中，希望作者有机会在对其中的某些内容做更深入的探讨，如反射，序列化，特性等内容。
    <br />
    并希望作者以后出书能附带上程序的直接结果，下班后躺在床上看书的时候实在是懒得打开电脑运行程序了。
    <br />
    总的来说是本好书，值得一看</p>
    <p><a href="http://www.china-pub.com/member/bookpinglun/memberpl.asp?membername=aiyaaiya">aiyaaiya</a>，内容凑合，视频的宣传实在没有分量，这几位基本上不是.NET专家</p>
    <p><a href="http://www.china-pub.com/member/bookpinglun/memberpl.asp?membername=yoyo_">yoyo_</a>，买了，刚看完前3章，如内容介绍所说，这本书定位在对.NET基础重点内容的深度分析上，内容扎实不虚浮，行文流畅风趣，在技术书籍中并不多见，个人认为读起来很有收获，一定仔细拜读全书。</p>
    <p><a href="http://www.china-pub.com/member/bookpinglun/memberpl.asp?membername=CoolJie2001">CoolJie2001</a>，本来说不回帖了，但是作者都出来说话了，我还是再说一下，今天看到本书的样张出来了，我就预览了这几章，对比了那本.NET 3.0的书发现，内容确实有重复的地方，毕竟那本书很厚，但是本书的优势在于很多知识点在讲解了基础使用上后，再进行一定程度的深入，对于打基础的读者来讲(或者说是喜欢刨根问底的读者)是必要的，但是书的目录中反应出来的内容比较少，而且本书的篇幅不多，也不可能事无巨细的每个知识点都能一一的照顾到，我最后要收回我以前的错误的观点，这本书无论如何是值得阅读的一本书，但是还是由于书的厚度不够，可能最后会意犹未尽，作者的行文比较幽默风趣，阅读体验还是比较畅快，希望作者继续保持这种势头，再推出一些深度更高，质量更高的书籍。</p>
    <p><a href="http://www.china-pub.com/member/bookpinglun/memberpl.asp?membername=lsbattack">lsbattack</a>，一句话，读书不一定看书的厚度，</p>
    <p><a href="http://www.china-pub.com/member/bookpinglun/memberpl.asp?membername=CoolJie2001">CoolJie2001</a>，这本书出版的不是时候,如果在《C#与.NET 3.0高级程序设计(特别版)》这书之前出版，那这本书的价值会很高。但是在《C#与.NET 3.0高级程序设计(特别版)》出版后还没有出版，意义已经不大。基本上本书的内容是《C#与.NET 3.0高级程序设计(特别版)》的子集。鉴于国内出版社的装帧越来越差，纸张越来越差，本书装帧给2分，不报任何期望。</p>
    <p><a href="http://www.china-pub.com/member/bookpinglun/memberpl.asp?membername=chiney">chiney</a> ，还是很期待这本国人写的书的，博客园的anytao，用心写书的人，bless~~</p>
    <p>&nbsp;</p>
    <p><font color="#800000" size="5">当当评论</font></p>
    <p><a href="http://product.dangdang.com/product.aspx?product_id=20185392">http://product.dangdang.com/product.aspx?product_id=20185392</a></p>
    <p>http://comm.dangdang.com/reviewlist/20185392/</p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=7060438446905">belief9...</a>，good</p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=6122732564374">chpz1980</a>，付款一周内就收到了书，书不错，在看的时候发现有轻微的铅笔写字的痕迹，应该是借给其他人看过的缘故，希望借出回收以后能够检查一下。不要让买家感觉买的是二手书。</p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=7111062034452">sikezx</a>，看了这本书，让自己对之前秣陵两可的答案都有了比较清晰的理解，解释也浅显易懂，很适合想在。net方面发展的同事们一看，但到了后期就有些生涩了，不像一开始那么的浅显易懂，不过还是一本很好的书，呵呵！希望作者能更进一步，百尺竿头！</p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=5121424411957">mymou</a>，拿到书先看了下序，前面写的那些褒扬之词，简直肉麻地让人毛骨悚然。
    <br />
    书里的内容是作者的技术风格，我想目录以前的，应该是作者的生活风格了。</p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=7051692334571">kitty70...</a>，不错的一本书，很适合我</p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=1953397643449">yuhanbo...</a>，好书。。 当当的速度也很快，支持先！</p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=5100470484915">my_mahu...</a>，不错，又帮同事订了本</p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=5123140938313">ChaiYun...</a>，这本书写得比较核心和实质，接触到了技术的底层 深入下去才是王道</p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=7011111423587">jester1...</a>，<strong>jester1984</strong><strong>，</strong>我用了4个形容词来形容我对本书的感受，我个人认为是恰如其分的。
    <br />
    很全面：作者所讲到的知识点，是学习和开发.NET技术必须要求的，而且是必须掌握的。
    <br />
    很具体：形容书的内容和一些概念的定义很平易近人，不抽象。
    <br />
    很独到：读了几章，就感觉到作者的语言功底深厚，可以用一些通俗的语言，生动的例子，来讲解那些抽象的.NET技术，这是一种创新，同时也更贴近生活。
    <br />
    很特别：本书并不是专业讲解如何使用.NET技术去开发我们的现有程序，而是一本真实的解决困惑的良书，书中不仅教会了如何用.NET技术，理解.NET技术的常用概念，更重要的是教会我一个普通的读者，用心去贴近生活，感受生活，从而用.NET技术促进我们今后的生活。
    <br />
    我想用.NET技术促使我飞的更高，但是首先要学会什么才是你必须知道的.NET。</p>
    <p><a href="http://comm.dangdang.com/member/5100470484915/home/"><strong>my_mahua</strong></a><strong> ，</strong>我已经看完了。通俗易懂，特别是里面对知识点总结，的确很精辟！值得一看</p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=6276866831662">zongyaj...</a>，是你面向对象有了进一步的理解,好书! 建议再买本&lt;&lt;大话设计模式&gt;&gt;搭配看.</p>
    <p><strong>zeroxenof </strong><strong>，</strong>值得一看</p>
    <p><strong>alextsln</strong><strong>，</strong>如果是.net framework 1.0/1.1，有jeffier richter的那本就够了，但《CLR Via C# 2.0》感觉翻译得烂掉了，好在有这本书补上。 目前看来，市面上光介绍.net framework的书大概无出其右，但总有些遗憾，本来这本书应该成为不朽的。</p>
    <p><strong>DarrenQian </strong><strong>，</strong>还可以吧 但是排版实在太松散，一张纸上字没几个 博客园该有博客园的精神 别被人说成是奸商</p>
    <p><strong>chinabrle </strong><strong>，</strong>看了4章了，感觉这本书真的不错</p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=9075995068065">edhn</a>，该有的东西都有，解释的也很好。觉得.net知识看这个书基本够了</p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=7121382067351">矜枫</a>，非常精彩的书，需要配合大话设计模式一起看，很多不懂的都可以搞懂了。</p>
    <p><strong>davidlaurence </strong><strong>，</strong>一本好书。覆盖面比较广。从书中能知道自己缺什么。但真正要补自己的缺陷，还是得找一些更专业的书。</p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=3605357495247">首席村支部书记</a>，深入浅出 很不错</p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=8204887021304">ydalbj</a>，不错，值得一看</p>
    <p><strong>werwolf0906 </strong><strong>，</strong>这本书真的是文如其名的,里面的内容确实是应该要知道的东东. 看这本书的时候,要多注意将内容的深入化,里面的很多内容都会是因为篇幅的限制点到即止的. 我的观点,这本书就像一本很好的索引集一样,作为一点然后将自己的.Net知识辐射出去,那样收获会更大! </p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=2825313384806">aito</a>，看了前两章,觉得不错,语言通俗易懂,值得一看!</p>
    <p><strong>xiaodongapollo </strong><strong>，</strong>不错</p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=5100540259597">ainex</a>，写的不错。慢慢读中！</p>
    <p><strong>silenfir </strong><strong>，</strong>不错</p>
    <p><strong>mack-show </strong><strong>，</strong>比较失望,毕竟是国人,认识水平也非常有限.简单的东西偏偏用复杂的来描述,远没有开始的期望好.</p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=5041692855902">lsxqw</a>，看了不少国外引进过来的技术图书，总感觉不如国人自己写的书亲切易读，这本书绝对是书中精品值得一读</p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=8333017555600">飞无痕落无声</a>，我每次都舍不得一口气看玩，总觉得怕漏到了其中的某个知识点，顶这本书，实在是很受益。</p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=5767157331684">鬼魅胡笳</a>，本书集合了IL详细讲解了所有的关于基础的东西，简直就是我想要的。谢谢CNBLOGS能出这么好的书。。坚持学习中。</p>
    <p><strong>chenkepeng3130 </strong><strong>，</strong>降就降了，还邀请我评论，呵呵。没考虑我的感受啊！ 书不错。但是错误也不少。不过都是笔误（除了中间有一段介绍stack的，图和内容都不对，勘误表对此也表述得有问题），无伤大雅！</p>
    <p><strong>easyyjb </strong><strong>，</strong>开始讲class 与 class依赖的时候，文字上是说class1和class2 但是图片上都是class1</p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=7101012912698">净幻小乖</a>，感觉还是不错的...尽管才看了70多页... 支持原创作者...看的出作者在用心写书...只是书太重了些躺在床上翻看有些不方便....</p>
    <p><strong>zhy8403 </strong><strong>，</strong>很好，写的都很有用</p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=7092662759917">saga922</a>，好书，爱不释手！ 书好，难以忘怀！</p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=7012480880981">最初体验</a>，举例讲解，浅显易懂，受益匪浅</p>
    <p><strong>jiangnan </strong><strong>，</strong>还不错，知道了基本的IL,对.net的一些原理有了深入的认识！但创建对象过程，如何实现多态感觉讲得还不够特别清晰。这些东西IL上也看不出来，比较难理解</p>
    <p><strong>chenj </strong><strong>，</strong>感觉说了很多,其实什么也没说.该深入的没深入,该简单的不简单.</p>
    <p><strong>purple520 </strong><strong>，</strong>因为是新手,正在学习中,并不敢妄加断论,感觉挺好的 有疑问的是,送货上门具体怎么定的? 我写的是我宿舍,送货的只到学校门口,要我自己过去取...</p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=7051224931961">墨竹公羽</a>，虽然看过其他书 要嘛泛泛而谈 要不就是太深了 一时接受不了 这本书很适合自己 受益匪浅</p>
    <p><a href="http://comm.dangdang.com/comment/default.aspx?username=7031367530620">dongb</a>，很好的书,有的自以为很厉害的程序员应该看看,看看有多少你必须知道的而你却不知道</p>
    <p><strong>edwindong </strong><strong>，</strong>前段时间在博客园看到这本书，大家对这本书的评价还不错，所以就买来看一下，希望对自己能有所帮助吧。因为刚买到的原因，才看了还不到100页，但是里面作者的文采和对技术的理解，我感觉都很好。感觉这应该是一本不错的书吧。</p>
    <p>&nbsp;</p>
    <p><font color="#800000" size="5">第二书店评论</font></p>
    <p><a href="http://www.dearbook.com.cn/book/247897">http://www.dearbook.com.cn/book/247897</a></p>
    <p>&nbsp;</p>
    <p><a href="http://club.book.csdn.net/people/fish_lingo.html"><strong>fish_lingo</strong></a><strong> </strong><strong>说：</strong><strong></strong> </p>
    <p>这本书和《.NET框架程序设计（修订版）——微软.NET程序员系列》比较，哪本好？～～</p>
    <p><strong></strong><strong></strong></p>
    <a href="http://club.book.csdn.net/people/c4218186.html"><strong>c4218186</strong></a><strong> </strong><strong>说：</strong>
    <p>这本书很深了，对于刚接触oo思想的朋友来说，还是先了解下JAVA，在来看这个比较好！</p>
    <p><a href="http://club.book.csdn.net/people/dengsf2007.html"><strong>dengsf2007</strong></a><strong> </strong><strong>说：</strong><strong></strong> </p>
    <p><strong>觉得还是不够深入</strong><strong>,</strong><strong>少了点什么</strong><strong>?</strong><strong>不过</strong><strong>,</strong><strong>正打算买一本呢</strong><strong>??</strong></p>
    <p><a href="http://club.book.csdn.net/people/ibanezman.html"><strong>ibanezman</strong></a><strong> </strong><strong>说：</strong><strong></strong> </p>
    <p><strong>c</strong><strong>＃这方面的书籍几乎是空白吧，关于</strong><strong>oo</strong><strong>的概念多是从</strong><strong>c</strong><strong>＋＋或者</strong><strong>java</strong><strong>方面的书籍了解的。顶一下</strong><strong></strong></p>
    <p><a href="http://club.book.csdn.net/people/dz08039.html"><strong>dz08039</strong></a><strong> </strong><strong>说：</strong><strong></strong> </p>
    <p><strong>不知道是系统的讲的呢还是选取了几个重点讲的</strong></p>
    <p>&nbsp;</p>
    <p><font color="#800000" size="5">卓越评论</font></p>
    <p><a href="http://www.amazon.cn/mn/detailApp?qid=1207927277&amp;ref=SR&amp;sr=1-1&amp;uid=168-7679412-7549038&amp;prodid=bkbk823569">http://www.amazon.cn/mn/detailApp?qid=1207927277&amp;ref=SR&amp;sr=1-1&amp;uid=168-7679412-7549038&amp;prodid=bkbk823569</a></p>
    <p>&nbsp;</p>
    <p><a href="http://www.amazon.cn/mn/myspace?class=Author&amp;uid=168-6029264-9965016&amp;customerid=1174373118">迪子</a> 对于想学好.NET语言的学生来说，该书是一部比较好的入门工具，它对.NET的历史演变及其发展与未来发展趋势作了较好的描述。</p>
    <p><a href="http://www.amazon.cn/mn/myspace?class=Author&amp;uid=168-6029264-9965016&amp;customerid=1003798568">cescshen</a> 偏贵了点</p>
    <p><a href="http://www.amazon.cn/mn/myspace?class=Author&amp;uid=168-6029264-9965016&amp;customerid=1184945958">whj-416</a> 本书内容基本全面，很喜欢，对一些疑难点，做了很好的解释，值得收藏。但还是有一些知识点没有有写进去，希望看到下一版会加强</p>
    <p><a href="http://www.amazon.cn/mn/myspace?class=Author&amp;uid=168-6029264-9965016&amp;customerid=1219309898">张签（zhangq1an</a> 好贵!!!</p>
    <p><a href="http://www.amazon.cn/mn/myspace?class=Author&amp;uid=168-6029264-9965016&amp;customerid=1145002478">zhaoshuhong456</a> 质量挺好的</p>
    <p><a href="http://www.amazon.cn/mn/myspace?class=Author&amp;uid=168-6029264-9965016&amp;customerid=1039283558">huangkehuangyan</a> 怎么说也是国人写的，支持下。即使是稍微有点贵。</p>
    <p><a href="http://www.amazon.cn/mn/myspace?class=Author&amp;uid=168-6029264-9965016&amp;customerid=1017806668">老嘎嗒</a>，<a href="http://www.amazon.cn/mn/reviewDetailApp?reviewid=992407&amp;uid=168-6029264-9965016"><strong>.net</strong><strong>中的九阴真经</strong></a> 很喜欢，一本修炼内功的好书！ </p>
    <p>&nbsp;</p>
    <div id="MySignature">
    <p class="class"><a href="http://i.anytao.com/">anytao</a> | <a class="copyright" href="http://www.anytao.com/">&#169; 2008 Anytao.com</a></p>
    <p class="class">2008/11/20 | 非荣誉出品：<a href="http://anytao.cnblogs.com/">http://anytao.cnblogs.com/</a></p>
    <p class="class">本文以&#8220;现状&#8221;提供且没有任何担保，同时也没有授予任何权利。 | This posting is provided "AS IS" with no warranties, and confers no rights.</p>
    <p>本文版权归作者所有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。 </p>
    </div><img src ="http://www.cnblogs.com/anytao/aggbug/1337127.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/><a href="http://job.cnblogs.com/offer/302/" target="_blank">盛大招聘.Net开发工程师 </a><br/><a href="http://www.hjbook.net/product/4041/" target="_blank">经典好书：.NET框架程序设计（修订版）</a><br/>新闻：<a href="http://news.cnblogs.com/n/44341/" target="_blank">搜狐董事局主席张朝阳：今年不会买公司</a><br/>导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target="_blank">招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>[漫步云端，Azure Services Platform]第二回：我的第一个云端应用：Hello，Cloud！</title><link>http://www.cnblogs.com/anytao/archive/2008/11/19/anytao_azure_01_hellocloud.html</link><dc:creator>Anytao</dc:creator><author>Anytao</author><pubDate>Tue, 18 Nov 2008 16:03:00 GMT</pubDate><guid>http://www.cnblogs.com/anytao/archive/2008/11/19/anytao_azure_01_hellocloud.html</guid><wfw:comment>http://www.cnblogs.com/anytao/comments/1336316.html</wfw:comment><comments>http://www.cnblogs.com/anytao/archive/2008/11/19/anytao_azure_01_hellocloud.html#Feedback</comments><slash:comments>48</slash:comments><wfw:commentRss>http://www.cnblogs.com/anytao/comments/commentRss/1336316.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/anytao/services/trackbacks/1336316.html</trackback:ping><description><![CDATA[<p><strong><a href="http://book.anytao.com/"><strong><font color="#ff0000">《你必须知道的.NET》网站</font></strong></a></strong> | <strong><font color="#0000ff"><a href="http://www.anytao.com/">Anytao技术博客</a>&nbsp; </font></strong></p>
<h2 align="center"><font color="#0000ff" face="微软雅黑" size="6">[漫步云端，Azure Services Platform]第二回：我的第一个云端应用：Hello，Cloud！</font></h2>
<p align="right"><font face="微软雅黑">发布日期：2008.11.19 作者：</font><a href="http://about.anytao.com/"><font face="微软雅黑">Anytao</font></a>
<br />
<font color="#ff0000" face="微软雅黑">&#169; 2008 </font><a href="http://www.anytao.com/"><font color="#ff0000" face="微软雅黑">Anytao.com</font></a><font color="#ff0000" face="微软雅黑"> ，Anytao原创作品，转贴请注明作者和出处。</font></p>
<div>
<table style="border-collapse: collapse;" border="0">
    <colgroup><col style="width: 590px;"></colgroup>
    <tbody valign="top">
        <tr style="background: #87bfd1 none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
            <td style="padding-left: 7px; padding-right: 7px;"><span style="color: white;"><img src="http://www.cnblogs.com/images/cnblogs_com/anytao/125111/o_icon_your_info.gif" art="Anytao.com" alt="" />说在，开篇之前</span></td>
        </tr>
        <tr>
            <td style="padding-left: 7px; padding-right: 7px;">哈哈，我的第一个云端应用诞生了，这就是Hello，Cloud。不信，你可以访问<a title="http://anytao.cloudapp.net/" href="http://anytao.cloudapp.net/">http://anytao.cloudapp.net/</a>来一窥究竟。
            <br />
            现在，我们可以大声的欢呼：Hello，Cloud！云计算时代，果然是来了。还等什么，赶快试试吧:-)</td>
        </tr>
    </table>
    </div>
    <p><font color="#800000" size="5">1 引言</font></p>
    <p>在上篇《<a href="http://www.cnblogs.com/anytao/archive/2008/11/06/anytao_azure_01_getknowazureservices.html">第一回：认识Azure Services Platform</a>》一文中，我带着TechEd的兴奋之情将Azure Service做了一个概要性的介绍，因为没有申请到Invitation Token，所以只能掩饰饥渴的冲动，把完成第一个云端应用的重任留到了第二回。就是历史上所有讲述编程语言的著作以Hello，world开篇一样，本文也不例外的从Hello，Cloud！这一传统开始，实现一个运行在云端服务的Web应用。让我们品尝一下，漫步云端的快感吧:-)</p>
    <p><font color="#800000" size="5">2&nbsp; 必要的准备</font></p>
    <p>实现一个简单的云端应用，如果没有数据库服务支持或者其他服务支持，我们仍然需要一些必要的准备，对于Azure应用而言以下铺垫是必不可少的：</p>
    <ul>
        <li>注册有效的Azure Services账号，详情可以访问<a target="_blank" href="http://www.microsoft.com/azure/register.mspx">这里</a>。 </li>
        <li>申请Invitation Token，以便可以访问Azure Services Developer Portal中的相关服务，例如Windows Azure，Live Service，.NET Services等。 </li>
        <li>安装Azure Service SDK等必要支持，一遍可以使用我们熟悉的Visual Studio 2008来开发Cloud Application。详细的说明请参考《<a href="http://www.cnblogs.com/anytao/archive/2008/11/06/anytao_azure_01_getknowazureservices.html">第一回：认识Azure Services Platform</a>》中的阐述。 </li>
    </ul>
    <p><font color="#ff0000">注意</font>：因为当前仍处于CTP版，所以Resource Token并不能简单获取，大家耐心等等:-)</p>
    <p>好了，万事具备只欠东风，我们开始Step By Step式的构建我们的Hello，Cloud。在下文的实现过程中，我们假设你已经完成上述所有步骤的准备，成功申请了Invitation Token，成功安装了相关的SDK和工具支持。如果还有疑问，可参考《<a href="http://www.cnblogs.com/anytao/archive/2008/11/06/anytao_azure_01_getknowazureservices.html">第一回：认识Azure Services Platform</a>》的详细分析，或者留言讨论:-)</p>
    <p><font color="#800000" size="5">3&nbsp; 实现我的Hello，Cloud！</font></p>
    <ul>
        <li>Step1，使用Visual Studio 2008创建新的 应用，我们新建一个Project，在项目模板中选择&#8220;Cloud Service&#8221;—&gt;&#8221;Web Cloud Service&#8221;： </li>
    </ul>
    <p><img src="http://www.cnblogs.com/images/cnblogs_com/anytao/162192/o_anytao_azure_02_01.jpg" alt="" height="436" width="600" /> </p>
    <p>在该项目模板中，我们还可以选择例如&#8220;Web And Worker Cloud Service&#8221;、&#8220;Worker Cloud Service&#8221;、&#8220;Cloud WorkFlow&#8221;项目模板，我们将在以后的系列中逐步了解相应的内容，敬请期待。</p>
    <ul>
        <li>Step2，创建项目之后，Visual Studio将自动生成两个项目：Anytao.AzureServices.HelloCloud和Anytao.AzureServices.HelloCloud_WebRole， </li>
    </ul>
    <p><img src="http://www.cnblogs.com/images/cnblogs_com/anytao/162192/o_anytao_azure_02_02.jpg" alt="" height="416" width="600" /> </p>
    <p>其中Anytao.AzureServices.HelloCloud_WebRole是一个普通的ASP .NET Web项目，而另一个Anytao.AzureServices.HelloCloud则是一个Web Cloud Service项目，其中包含了Roles文件夹中包含了我们将发布的Web项目程序集Anytao.AzureServices.HelloCloud_WebRole.dll，而ServiceConfiguration.cscfg文件描述了部署的相关配置信息：</p>
    <div class="csharpcode">
    <pre class="alt">&lt;?xml version=<span class="str">"1.0"</span>?&gt;</pre>
    <pre>&lt;ServiceConfiguration serviceName=<span class="str">"Anytao.AzureServices.HelloCloud"</span> xmlns=<span class="str">"http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration"</span>&gt;</pre>
    <pre class="alt">  &lt;Role name=<span class="str">"WebRole"</span>&gt;</pre>
    <pre>    &lt;Instances count=<span class="str">"1"</span>/&gt;</pre>
    <pre class="alt">    &lt;ConfigurationSettings&gt;</pre>
    <pre>    &lt;/ConfigurationSettings&gt;</pre>
    <pre class="alt">  &lt;/Role&gt;</pre>
    <pre>&lt;/ServiceConfiguration&gt;</pre>
    </div>
    <style type="text/css">
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }</style>
    <p>而ServiceDefinition.csdef描述了InputEndpoints，LocalStorage等配置映射信息：</p>
    <div class="csharpcode">
    <pre class="alt">&lt;?xml version=<span class="str">"1.0"</span> encoding=<span class="str">"utf-8"</span>?&gt;</pre>
    <pre>&lt;ServiceDefinition name=<span class="str">"Anytao.AzureServices.HelloCloud"</span> xmlns=<span class="str">"http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition"</span>&gt;</pre>
    <pre class="alt">  &lt;WebRole name=<span class="str">"WebRole"</span>&gt;</pre>
    <pre>    &lt;InputEndpoints&gt;</pre>
    <pre class="alt">      &lt;!-- Must use port 80 <span class="kwrd">for</span> http and port 443 <span class="kwrd">for</span> https when running <span class="kwrd">in</span> the cloud --&gt;</pre>
    <pre>      &lt;InputEndpoint name=<span class="str">"HttpIn"</span> protocol=<span class="str">"http"</span> port=<span class="str">"80"</span> /&gt;</pre>
    <pre class="alt">    &lt;/InputEndpoints&gt;</pre>
    <pre>  &lt;/WebRole&gt;</pre>
    <pre class="alt">&lt;/ServiceDefinition&gt;</pre>
    </div>
    <p>我们无需关注更多文件的结构信息，接着我们的Hello，Cloud实现。</p>
    <ul>
        <li>Step3，完成Web项目Anytao.AzureServices.HelloCloud_WebRole，在Default页面中实现简单的输出Hello，World！，此过程完全等同于在传统ASP .NET Web Application中创建一个Html输出一样，当然你也可以添加一个Button并实现一个简单的事件，编译运行将打开Azure模拟器来托管本地应用，而不是Web服务器。 </li>
        <li>Step4，在Cloud项目上右键选择&#8220;Publis&#8230;&#8221;，将登陆Azure Services Developer Portal准备部署应用，同时打开编辑生成的Publish本地文件夹，其中包含了Anytao.AzureServices.HelloCloud程序包和ServiceConfiguration配置文件，用于在后续步骤中发布Cloud应用。 </li>
        <li>Step5，登陆打开的Azure Services Developer Portal，点击&#8220;New Project&#8221;，创建新的Azure Services项目，在Service组件面板中选择&#8220;Windows Azure&#8221;下的&#8220;Hosted Services&#8221;选项： </li>
    </ul>
    <p>&nbsp;<img src="http://www.cnblogs.com/images/cnblogs_com/anytao/162192/o_anytao_azure_02_03.jpg" alt="" height="211" width="600" /> </p>
    <p>在随后的创建向导步骤中，将包括</p>
    <ul>
        <ul>
            <li>同意Team of Use条款 </li>
            <li>输入项目属性（也就是创建项目便签和描述信息） </li>
            <li>选择输入Hosted Services名称，同时必须保证选择名称的唯一性。该Name也将随后用于发布你的Cloud应用时的访问域名，例如输入anytao作为该名称，将通过<a title="http://anytao.cloudapp.net/" href="http://anytao.cloudapp.net/">http://anytao.cloudapp.net/</a>访问我的Hello，Cloud应用了。 </li>
        </ul>
        <li>Step6，导入程序包和配置文件。选择&#8220;Staging&#8221;的&#8220;Deploying&#8221;按钮，打开部署对话框，分别选择本地Publish文件中的Anytao.AzureServices.HelloCloud程序包和ServiceConfiguration配置文件， </li>
    </ul>
    <p>&nbsp;<img src="http://www.cnblogs.com/images/cnblogs_com/anytao/162192/o_anytao_azure_02_04.jpg" alt="" height="309" width="600" /> </p>
    <p>选择正确的程序包和配置文件，输入部署信息，点击&#8220;Deploy&#8221;，程序包和配置文件将