﻿<?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>博客园-TerryLee's Tech Space</title><link>http://www.cnblogs.com/Terrylee/</link><description>TerryLee技术专栏</description><language>zh-cn</language><lastBuildDate>Wed, 10 Feb 2010 09:04:08 GMT</lastBuildDate><pubDate>Wed, 10 Feb 2010 09:04:08 GMT</pubDate><ttl>60</ttl><item><title>不得不推荐的一本好书《观止》</title><link>http://www.cnblogs.com/Terrylee/archive/2009/08/05/1539588.html</link><dc:creator>TerryLee</dc:creator><author>TerryLee</author><pubDate>Wed, 05 Aug 2009 06:52:00 GMT</pubDate><guid>http://www.cnblogs.com/Terrylee/archive/2009/08/05/1539588.html</guid><description><![CDATA[<p>阅读: 14399 评论: 94 作者: <a href="http://www.cnblogs.com/Terrylee/" target="_blank">TerryLee</a> 发表于 2009-08-05 14:52 <a href="http://www.cnblogs.com/Terrylee/archive/2009/08/05/1539588.html" target="_blank">原文链接</a></p><p>昨天收到了华章寄来的新书《<a href="http://www.china-pub.com/195452">观止：微软创建NT和未来的夺命狂奔</a>》，其实这本已经算不上是新书了，15年前英文版已经上市，而在15年之后终于有机会看到中文版。本来对这样一本书我是没有多大兴趣的，我一直认为这是一本歌颂微软有多么伟大、微软是多么有远见的书，但是当我读完前面几页的时候，发现我错了，这真的是一本绝佳的好书。微软NT从最初的计划的18个月，到实际的5年时间，这期间经历了怎样的故事？在NT团队中的大牛到底是些什么样的人物？我们无从知道，《观止：创建创建NT和未来的夺命狂奔》这本书详细记录了NT开发的全过程，从团队的组建到最终NT问世。</p>  <p>作者是一位《华尔街杂志》的著名记者，文笔犀利，用词泼辣，豪放不羁，微软NT团队的几十个人物，在作者的笔下栩栩如生，作者直言不讳写出的他们的缺点，甚至于相貌、家庭、婚恋、事业，大卫·卡特勒是其中的灵魂人物，他是一位计算机的天才，汇编高手，但他的性格很暴躁，脾气倔犟，这也许就是我们传说中的鬼才吧，看看书中对大卫·卡特勒的一段描述：</p>  <blockquote>   <p>卡特勒骂人的功夫也炉火纯青。反复无常而且脾气倔犟，他可能根本不顾及脸面，大喊大叫，根本不顾及丧失最起码的礼貌。他发脾气时，嘴里动不动就冒出一连串污言秽语。每次新的爆发都把他的形象又磨砺一番。陌生人是最受不了的。有一次，一位女工程师在放满打印机的房间里第一次遇到卡特勒，卡特勒正在那里把卡在打印机里的碎纸往外抠。这位女工程师以期待的眼神看了卡特勒一眼，这时正好卡特勒也抬眼看见了她。于是，卡特勒咆哮起来了：“你就是那个把打印机搞垮的混蛋么？”</p> </blockquote>  <p>在昨天刚拿到书时，我并没有立即去看这本书，随手放在了桌边，晚上躺在床上顺手翻了一下，结果一发不可收拾，一直看到早晨5点多才睡觉，要不是顾及今天上班，估计我还会继续看下去。有人说在本书中仅看对卡特勒的描述就很值了，建议大家有空时也读读这本书，看看那些个性鲜明的人物他们的传奇故事，也许我们应该从中学到点什么。</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/3efe62374c8d_A27A/shupi_2.jpg"><img title="shupi" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="480" alt="shupi" src="http://images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/3efe62374c8d_A27A/shupi_thumb.jpg" width="336" border="0" /></a></p><img src="http://www.cnblogs.com/Terrylee/aggbug/1539588.html?type=1" width="1" height="1" alt=""/><p>评论: 94　<a href="http://www.cnblogs.com/Terrylee/archive/2009/08/05/1539588.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/Terrylee/archive/2009/08/05/1539588.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56857/" target="_blank">Facebook与美国在线合作 整合AIM动态功能</a><span style="color:gray">(2010-02-10 16:41)</span><br/>· <a href="http://news.cnblogs.com/n/56855/" target="_blank">NDepend 3.0已与Visual Studio集成</a><span style="color:gray">(2010-02-10 16:17)</span><br/>· <a href="http://news.cnblogs.com/n/56854/" target="_blank">Ruby in Steel 1.5发布，去除IronRuby支持</a><span style="color:gray">(2010-02-10 16:14)</span><br/>· <a href="http://news.cnblogs.com/n/56852/" target="_blank">淘宝网通过索引模式涉足网络文学</a><span style="color:gray">(2010-02-10 15:59)</span><br/>· <a href="http://news.cnblogs.com/n/56851/" target="_blank">苹果发布 iPhone/iPad SDK 3.2 beta2 开发包</a><span style="color:gray">(2010-02-10 15:37)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/news/tag/Buzz/" target="_blank">Google Buzz相关新闻</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>ASP.NET MVC Performance Tips(1)：RenderPartial性能优化</title><link>http://www.cnblogs.com/Terrylee/archive/2009/05/08/ASPNET-MVC-Performance-Tips-Part1.html</link><dc:creator>TerryLee</dc:creator><author>TerryLee</author><pubDate>Thu, 07 May 2009 18:11:00 GMT</pubDate><guid>http://www.cnblogs.com/Terrylee/archive/2009/05/08/ASPNET-MVC-Performance-Tips-Part1.html</guid><description><![CDATA[<p>阅读: 11640 评论: 106 作者: <a href="http://www.cnblogs.com/Terrylee/" target="_blank">TerryLee</a> 发表于 2009-05-08 02:11 <a href="http://www.cnblogs.com/Terrylee/archive/2009/05/08/ASPNET-MVC-Performance-Tips-Part1.html" target="_blank">原文链接</a></p><h2>背景</h2>  <p>在ASP.NET MVC中，HtmlHelper的扩展方法RenderPartial为我们使用UserControl带来了极大的方便，当我们指定一个UserControl时，RenderPartial会在当前View文件夹下查找相应的UserControl，如果没有找到则会到Shared文件夹下查找。然后在使用RenderPartial方法有一些性能方面的考虑，值得我们去关注。</p>  <p>设想有这样一个场景，一篇文章有很多个评论，在页面中我们需要呈现出一个评论列表，自然我们会定义一个评论的UserControl，如下代码所示：</p>  <p>Code 1:</p>  <pre class="code"><span style="background: #ffee62">&lt;%</span><span style="color: blue">@ </span><span style="color: #a31515">Control </span><span style="color: red">Language</span><span style="color: blue">=&quot;C#&quot; </span><span style="color: red">Inherits</span><span style="color: blue">=&quot;System.Web.Mvc.ViewUserControl&lt;Comment&gt;&quot; </span><span style="background: #ffee62">%&gt;
&lt;%</span><span style="color: blue">@ </span><span style="color: #a31515">Import </span><span style="color: red">Namespace</span><span style="color: blue">=&quot;TerryLee.MvcPerformance01.Models&quot; </span><span style="background: #ffee62">%&gt;
</span><span style="color: blue">&lt;</span><span style="color: #a31515">p</span><span style="color: blue">&gt;
    </span>ID: <span style="background: #ffee62">&lt;%</span><span style="color: blue">=</span>Model.ID <span style="background: #ffee62">%&gt;</span> <span style="color: blue">&lt;</span><span style="color: #a31515">br </span><span style="color: blue">/&gt;
    </span>Author: <span style="background: #ffee62">&lt;%</span><span style="color: blue">=</span>Model.Author <span style="background: #ffee62">%&gt;</span> <span style="color: blue">&lt;</span><span style="color: #a31515">br </span><span style="color: blue">/&gt;
    </span>Description: <span style="background: #ffee62">&lt;%</span><span style="color: blue">= </span>Model.Description <span style="background: #ffee62">%&gt;
</span><span style="color: blue">&lt;/</span><span style="color: #a31515">p</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">hr </span><span style="color: blue">/&gt;</span></pre>
<a href="http://11011.net/software/vspaste"></a>

<p>在页面中呈现评论列表，代码非常简单，仅仅是遍历所有的评论而已：</p>

<p>Code 2:</p>

<pre class="code"><span style="color: blue">&lt;</span><span style="color: #a31515">div</span><span style="color: blue">&gt;
   </span><span style="background: #ffee62">&lt;%
</span>     <span style="color: blue">foreach </span>(<span style="color: blue">var </span>comment <span style="color: blue">in </span>Model.Comments)
     {
         <strong>Html.RenderPartial(<span style="color: #a31515">&quot;CommentsItem&quot;</span>, comment);</strong>
     }
  <span style="background: #ffee62">%&gt;</span> 
<span style="color: blue">&lt;/</span><span style="color: #a31515">div</span><span style="color: blue">&gt;</span></pre>
<a href="http://11011.net/software/vspaste"></a>

<p>运行后效果如下，可以看到正确的输出了评论：</p>

<p><a href="http://images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/ASP.NETPerformanceTips1_120F8/aspnetmvc_performance_tips_001_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="aspnetmvc_performance_tips_001" border="0" alt="aspnetmvc_performance_tips_001" src="http://images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/ASP.NETPerformanceTips1_120F8/aspnetmvc_performance_tips_001_thumb.png" width="700" height="443" /></a>&#160; </p>

<h2>性能优化1</h2>

<p>然而当我们同时输出200条评论的时候， 却要花费大量的时间，用Stopwatch来测量一下会发现，输出200条评论花费的时间基本在210ms左右，也就是说平均每条评论的输出花费了1ms。我们不妨看一下ASP.NET MVC的源代码，在WebFormViewEngine中当查找UserControl时，遵循如下查找模式：</p>

<p>Code 3:</p>

<pre class="code"><span style="color: blue">public </span>WebFormViewEngine() {
    MasterLocationFormats = <span style="color: blue">new</span>[] {
        <span style="color: #a31515">&quot;~/Views/{1}/{0}.master&quot;</span>,
        <span style="color: #a31515">&quot;~/Views/Shared/{0}.master&quot;
    </span>};

    ViewLocationFormats = <span style="color: blue">new</span>[] {
        <span style="color: #a31515">&quot;~/Views/{1}/{0}.aspx&quot;</span>,
        <span style="color: #a31515">&quot;~/Views/{1}/{0}.ascx&quot;</span>,
        <span style="color: #a31515">&quot;~/Views/Shared/{0}.aspx&quot;</span>,
        <span style="color: #a31515">&quot;~/Views/Shared/{0}.ascx&quot;
    </span>};

    PartialViewLocationFormats = ViewLocationFormats;
}</pre>
<a href="http://11011.net/software/vspaste"></a>

<p>所以如果我们在RenderPartial方法中，指定了UserControl的完全路径，是不是可以避免这个查找过程呢？修改Code 2代码如下所示：</p>

<p>Code 4:</p>
<a href="http://11011.net/software/vspaste"></a>

<pre class="code"><span style="color: blue">&lt;</span><span style="color: #a31515">div</span><span style="color: blue">&gt;
   </span><span style="background: #ffee62">&lt;%
</span>       <span style="color: blue">foreach </span>(<span style="color: blue">var </span>comment <span style="color: blue">in </span>Model.Comments)
       {
           <strong>Html.RenderPartial(<span style="color: #a31515">&quot;~/Views/Shared/CommentsItem.ascx&quot;</span>, comment);</strong>
       }
     <span style="background: #ffee62">%&gt;</span> 
<span style="color: blue">&lt;/</span><span style="color: #a31515">div</span><span style="color: blue">&gt;</span></pre>

<p>现在再测试一下会发现呈现200条评论的时间平均值保持在10ms左右，比前面的方式提升了近200ms。然而我们是否真的找到了解决问题的方法？ASP.NET MVC难道不对查找的View路径进行缓存？带着这样的疑问，我们在ASP.NET MVC源代码VirtualPathProviderViewEngine的构造函数中，找到这样一段代码：</p>

<p>Code 5:</p>

<pre class="code"><span style="color: blue">protected </span>VirtualPathProviderViewEngine() {
    <span style="color: blue">if </span>(<span style="color: #2b91af">HttpContext</span>.Current == <span style="color: blue">null </span>|| <strong><span style="color: #2b91af">HttpContext</span>.Current.IsDebuggingEnabled</strong>) {
        ViewLocationCache = <span style="color: #2b91af">DefaultViewLocationCache</span>.Null;
    }
    <span style="color: blue">else </span>{
        ViewLocationCache = <span style="color: blue">new </span><span style="color: #2b91af">DefaultViewLocationCache</span>();
    }
}</pre>
<a href="http://11011.net/software/vspaste"></a>

<p>这里的判断说明如果启用了Debug模式，将会使用NullViewLocationCache，即不进行缓存，否则会使用DefaultViewLocationCache对View路径进行缓存。所以上面的测试结果都是基于Debug模式：</p>

<p>Code 6:</p>

<pre class="code"><span style="color: blue">&lt;</span><span style="color: #a31515">compilation </span><span style="color: red">debug</span><span style="color: blue">=</span>&quot;<span style="color: blue">true</span>&quot;<span style="color: blue">&gt;</span></pre>
<a href="http://11011.net/software/vspaste"></a>

<p>如果关闭了Debug模式，测试结果又该如何呢？使用下面代码关闭Debug模式：</p>

<p>Code 7:</p>

<pre class="code"><span style="color: blue">&lt;</span><span style="color: #a31515">compilation </span><span style="color: red">debug</span><span style="color: blue">=</span>&quot;<span style="color: blue">false</span>&quot;<span style="color: blue">&gt;</span></pre>
<a href="http://11011.net/software/vspaste"></a>

<p>再次进行测试，会发现使用Code 2代码呈现200条评论时，花费的时间平均值也是在10ms左右。所以在使用RenderPartial方法时，大可不必为了提升性能而指定UserControl的完全路径，ASP.NET MVC已经为我们做好了这一切，我们要做的仅仅是在发布到生产环境时，<font color="#ff0000">别忘了关闭Debug模式</font>！在本示例中，开启Debug和关闭Debug模式在一次调用时的性能差距如下图所示：</p>

<p><a href="http://images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/ASP.NETPerformanceTips1_120F8/aspnetmvc_performance_tips_002_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="aspnetmvc_performance_tips_002" border="0" alt="aspnetmvc_performance_tips_002" src="http://images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/ASP.NETPerformanceTips1_120F8/aspnetmvc_performance_tips_002_thumb.png" width="495" height="301" /></a>&#160;</p>

<h2>性能优化2</h2>

<p>现在回过头来看前面的代码，其实并没有做什么性能优化，仅仅时给大家提个醒而已。在Code 2中，我们的遍历代码放在了主页面中，即在每一次迭代中调用RenderPartial方法，尽管ASP.NET MVC在RenderPartial时，对于UserControl路径做了缓存，但是200次的调用仍然有不小的开销。如果我们的遍历代码放在UserControl中，而在主页面中只进行一次调用RenderPartial方法，结果又将如何呢？修改UserControl为下代码所示：</p>

<p>Code 8:</p>

<pre class="code"><span style="background: #ffee62">&lt;%</span><span style="color: blue">@ </span><span style="color: #a31515">Control </span><span style="color: red">Language</span><span style="color: blue">=&quot;C#&quot; </span><span style="color: red">Inherits</span><span style="color: blue">=&quot;<strong>System.Web.Mvc.ViewUserControl&lt;IList&lt;Comment&gt;&gt;</strong>&quot; </span><span style="background: #ffee62">%&gt;
&lt;%</span><span style="color: blue">@ </span><span style="color: #a31515">Import </span><span style="color: red">Namespace</span><span style="color: blue">=&quot;TerryLee.MvcPerformance01.Models&quot; </span><span style="background: #ffee62">%&gt;
&lt;%
</span>    <span style="color: blue">foreach</span>(<span style="color: #2b91af">Comment </span>comment <span style="color: blue">in </span>Model)
    {
 <span style="background: #ffee62">%&gt;
</span><span style="color: blue">&lt;</span><span style="color: #a31515">p</span><span style="color: blue">&gt;
    </span>ID:<span style="color: blue"> </span><span style="background: #ffee62">&lt;%</span><span style="color: blue">= </span>comment.ID<span style="background: #ffee62">%&gt;</span> <span style="color: blue">&lt;</span><span style="color: #a31515">br </span><span style="color: blue">/&gt;
    </span>Author:<span style="color: blue"> </span><span style="background: #ffee62">&lt;%</span><span style="color: blue">= </span>comment.Author<span style="background: #ffee62">%&gt;</span> <span style="color: blue">&lt;</span><span style="color: #a31515">br </span><span style="color: blue">/&gt;
    </span>Description:<span style="color: blue"> </span><span style="background: #ffee62">&lt;%</span><span style="color: blue">= </span>comment.Description<span style="background: #ffee62">%&gt;
</span><span style="color: blue">&lt;/</span><span style="color: #a31515">p</span><span style="color: blue">&gt;
</span><span style="background: #ffee62">&lt;%</span>} <span style="background: #ffee62">%&gt;
</span><span style="color: blue">&lt;</span><span style="color: #a31515">hr </span><span style="color: blue">/&gt;</span></pre>
<a href="http://11011.net/software/vspaste"></a>

<p>这样在主页面中，只进行一次RenderPartial调用，如下代码所示：</p>

<pre class="code"><span style="color: blue">&lt;</span><span style="color: #a31515">div</span><span style="color: blue">&gt;
   </span><span style="background: #ffee62">&lt;%
</span>     Html.RenderPartial(<span style="color: #a31515">&quot;CommentsItem&quot;</span>, <strong>Model.Comments</strong>);
   <span style="background: #ffee62">%&gt;</span> 
<span style="color: blue">&lt;/</span><span style="color: #a31515">div</span><span style="color: blue">&gt;</span></pre>
<a href="http://11011.net/software/vspaste"></a>

<p>此时再次测试，可以看到呈现200条评论所花费的时间不足1ms！为了直观期间，我们仍然使用图形表示如下：</p>

<p><a href="http://images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/ASP.NETPerformanceTips1_120F8/aspnetmvc_performance_tips_003_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="aspnetmvc_performance_tips_003" border="0" alt="aspnetmvc_performance_tips_003" src="http://images.cnblogs.com/cnblogs_com/Terrylee/WindowsLiveWriter/ASP.NETPerformanceTips1_120F8/aspnetmvc_performance_tips_003_thumb.png" width="495" height="301" /></a>&#160;</p>

<p>从上图中可以看到，通过在UserControl中进行遍历，减少RenderPartial方法调用，带来的性能提升还是非常可观的。</p>

<h2>总结</h2>

<p></p>

<p></p>

<p>本文主要讨论在ASP.NET MVC中使用RenderPartial方法时的一些性能问题，记住两点：一是在ASP.NET MVC应用程序发布到生产服务器时，别忘了关闭Debug模式（对于ASP.NET WebForm应用程序也是一样）；二时尽可能的减少调用RenderPartial方法的次数，如通过在UserControl中进行遍历等方法。希望对大家有用。</p><img src="http://www.cnblogs.com/Terrylee/aggbug/1452324.html?type=1" width="1" height="1" alt=""/><p>评论: 106　<a href="http://www.cnblogs.com/Terrylee/archive/2009/05/08/ASPNET-MVC-Performance-Tips-Part1.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/Terrylee/archive/2009/05/08/ASPNET-MVC-Performance-Tips-Part1.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56857/" target="_blank">Facebook与美国在线合作 整合AIM动态功能</a><span style="color:gray">(2010-02-10 16:41)</span><br/>· <a href="http://news.cnblogs.com/n/56855/" target="_blank">NDepend 3.0已与Visual Studio集成</a><span style="color:gray">(2010-02-10 16:17)</span><br/>· <a href="http://news.cnblogs.com/n/56854/" target="_blank">Ruby in Steel 1.5发布，去除IronRuby支持</a><span style="color:gray">(2010-02-10 16:14)</span><br/>· <a href="http://news.cnblogs.com/n/56852/" target="_blank">淘宝网通过索引模式涉足网络文学</a><span style="color:gray">(2010-02-10 15:59)</span><br/>· <a href="http://news.cnblogs.com/n/56851/" target="_blank">苹果发布 iPhone/iPad SDK 3.2 beta2 开发包</a><span style="color:gray">(2010-02-10 15:37)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/news/tag/Buzz/" target="_blank">Google Buzz相关新闻</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>《Silverlight 2完美征程》：推荐序</title><link>http://www.cnblogs.com/Terrylee/archive/2009/04/23/1442450.html</link><dc:creator>TerryLee</dc:creator><author>TerryLee</author><pubDate>Thu, 23 Apr 2009 13:52:00 GMT</pubDate><guid>http://www.cnblogs.com/Terrylee/archive/2009/04/23/1442450.html</guid><description><![CDATA[<p>阅读: 12745 评论: 82 作者: <a href="http://www.cnblogs.com/Terrylee/" target="_blank">TerryLee</a> 发表于 2009-04-23 21:52 <a href="http://www.cnblogs.com/Terrylee/archive/2009/04/23/1442450.html" target="_blank">原文链接</a></p><h2>推荐序一</h2>  <p>Silverlight是微软公司推出的新一代RIA技术，是一种跨浏览器、跨平台的.Net Framework的实现，用来构建和发布下一代的媒体体验和Web交互应用，它统一了服务器、Web和桌面的功能。作为一种新的Web内容载体，它可被以Web的方式来发布，在客户浏览器端运行时，它不但可以灵活地和各种服务器端应用交互，更具有和桌面体验一样的、丰富的图形渲染及用户交互控制能力。</p>  <p>Silverlight的意义还远不止于此。试想若干年前服务器端的情形，只有Raw HTML的发布功能，后来出现CGI，开始以构造程序的方式来处理Web请求发放响应，各种应用服务器支撑的编程模型逐步发展起来，直到现在像ASP.NET/WCF、J2EE这样的成熟框架，足以支撑起大规模的Web应用，其中最本质的一条发展线索就是编程模型在服务端的演进。现在，在Internet应用的客户端，具有类似的编程模型本质的线索，即将发展到一个新的阶段。从HTML的渲染、Form Data的原始回发，到Web2.0中对JavaScript、DOM技术的接近极致的应用，再到近一两年各种像Google Earth/FaceBook这类Web API的出现，似乎仍无法满足人们对Web应用用户体验的追求，开发者中的先锋们仍在寻求更先进的编程模型来支撑下一代Web应用的前端。RIA技术应用重新得到重视，借助新的内容类型来补充和突破HTML-Based的局限。然而，在Silverlight 之前，与其类似的技术均无法保证前台开发中“艺术”+“编程”这个Pair中“编程”的匹配度。前台编程模型，仍停留在“脚本”阶段，开发人员的先进思想及技巧、经验均无法“复用”过来，而且无法在保证客户端浏览器运行性能的前提下支撑复杂的桌面级别的UI逻辑和用户体验。现在Silverlight 2来了，它在UI渲染、艺术创作，以及UI逻辑、编程模型，双方面上带来了全新程度的提升。开发人员可以以面向对象面向组件的方式来开发、完整地复用以前的知识和经验。这是Silverlight在Web前台开发编程模型演进上所能带来的巨大变化，从这一点上，我们完全可以看到这项全新的RIA技术的前景。</p>  <p>那么，作为开发人员，我们如何尽可能快而又全面、准确地掌握Silverlight开发技术的方方面面呢？权威准确、翔实全面的资料，加以自己的学习与实践，以及先行者的分享与经验，这些都是不可缺少的。即使是一个非常有经验的.Net开发人员，在转入Silverlight开发时，有时也会由于对其中的异步操作、线程上下文理解不够深入而被莫名的问题弄得焦头烂额。所以，要在学习和实践中避免误区，少走弯路，学习先行者的经验是非常重要而有益的。</p>  <p>本书的作者TerryLee就是这样一位在Silverlight开发领域极富经验的先行者。</p>  <p>初识Terry，是读他博客园上的文章。他给我最深的印象是他的勤奋和才识。后来有缘成为同事，在公司的项目中一起工作，在几个开源项目中，他留给我最深的印象是他对软件技术的天赋。每当我向朋友介绍他时，总爱加上这样一句话：他是我遇到的仅有的几个在技术上最信得过的人之一，无论是系统架构设计方面还是代码实施动手能力方面。</p>  <p>Terry是一个热爱分享的人，这一点从他的博客上可以看出，更可以从与他日常的交流中感受到。这半年多来，Terry主要参与一个重量级应用Silverlight技术的项目，这个大型Web应用项目的页面全部采用Silverlight技术来实现。于是这段时间里与Terry聊到的技术话题中，Silverlight所占的比例就多出许多，经常会就一个可能的最佳实践进行“严正磋商”，或就Silverlight的一个Bug一起来“指点江山”；下面的场景更是常见：“ScottGu已经把我俩的那个问题转给Silverlight小组的Stefan了，估计马上会有答复了！”“Stefan的回复中提到这个问题可能与IAccessible接口有关，要不我来谈谈这个接口？”经常可以从他与Microsoft Silverlight小组的大量往来邮件中，得知一些来自“内部”的信息。不是每个人都能够像Terry这样与Silverlight有如此亲密接触的，即使你是这个方向上的MVP，我想，这与他的求知热情、热爱分享是分不开的。当然，每当回忆起这样的场景，我总会叮嘱他，一定不要忘记把这些都写入他的书中去！</p>  <p>《Silverlight 2完美征程》就是这样的一本书！在Silverlight 2 Beta1期间就已经成稿，在Silverlight 2 RTW版出来后，Terry又投入了大量的精力来重写和校正。书的内容覆盖了Silverlight 2开发的各个方面并被整理得井井有条，多年的技术写作功底在这里又一次得到了体现：图文并茂、讲解透彻，一如博客园中的TerryLee。</p>  <p>读过本书之后，我对Terry的第一句话就是，怎么还有这么多我们之前没有谈到的内容？</p>  <p>我相信，大家读后的收获，一定会比我更多！</p>  <p align="right">曲春雨</p>  <p align="right">资深架构师</p>  <p align="right">2009年2月于北京</p>  <h2>推荐序二</h2>  <p>互联网，自从20世纪70年代进入人们的视线以来，经历了翻天覆地的变化。从保密的军事项目延伸到每个人都能享用的丰富服务，从简单的文字发布渠道发展到易于交互的富媒体媒介，从只能在工程师之间交流的复杂科技扩展到每个人都能触及的大众媒体，互联网的服务日益丰富，互联网的覆盖领域逐步扩大，互联网的使用人数迅猛增长。截至2009年1月，全球的网民人数已经达到了15亿，其中中国网民人数居全球第一，达到了2.98亿。</p>  <p>随着网民人数的不断增长，以及人们对互联网服务的巨大需求，互联网技术也在不断推陈出新，从而更好地满足人们的需求。微软的Silverlight技术自发布以来，受到了业内广泛的关注，Silverlight技术作为一种跨平台、跨浏览器的技术在丰富的媒体体验及丰富的交互式应用领域奉献给大家一个值得信赖的平台。</p>  <p>随着国内互联网领域对Silverlight技术应用的不断扩展，越来越多的开发者、设计师开始使用Silverlight技术来实现各种各样的Web应用，这里不乏国内知名的网站，如百度、腾讯、淘宝，等等。</p>  <p>作为一本国内互联网技术社区一直期待的的中文图书，《Silverlight 2完美征程》是一本不可多得的教材、工具书及参考书。本书分为4篇，它们分别为基础篇、进阶篇、高级篇及案例篇。作为一本源于实践的技术博客笔记，一本原汁原味的中文图书，《Silverlight 2完美征程》由浅入深，结合了大量的案例、注释及经验技巧，相信无论您是一个Silverlight技术的初学者还是已经将Silverlight应用于生产环境的开发者，在阅读本书的时候一定会受益良多。</p>  <p>最后，我强烈建议您经常访问本书作者——微软.NET及Web领域最有价值的专家李会军的技术博客<a href="http://www.cnblogs.com/TerryLee">http://www.cnblogs.com/TerryLee</a>，相信从他的博客中您可以获得第一手的实战案例及开发技巧和经验。</p>  <p align="right">黄继佳</p>  <p align="right">微软（中国）有限公司 开发及平台合作部技术经理</p>  <p align="right">2009年2月于北京</p>  <p>详情敬请访问《Silverlight 2完美征程》官方网站：<a href="http://www.dotneteye.cn/silverlight">http://www.dotneteye.cn/silverlight</a></p><img src="http://www.cnblogs.com/Terrylee/aggbug/1442450.html?type=1" width="1" height="1" alt=""/><p>评论: 82　<a href="http://www.cnblogs.com/Terrylee/archive/2009/04/23/1442450.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/Terrylee/archive/2009/04/23/1442450.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56857/" target="_blank">Facebook与美国在线合作 整合AIM动态功能</a><span style="color:gray">(2010-02-10 16:41)</span><br/>· <a href="http://news.cnblogs.com/n/56855/" target="_blank">NDepend 3.0已与Visual Studio集成</a><span style="color:gray">(2010-02-10 16:17)</span><br/>· <a href="http://news.cnblogs.com/n/56854/" target="_blank">Ruby in Steel 1.5发布，去除IronRuby支持</a><span style="color:gray">(2010-02-10 16:14)</span><br/>· <a href="http://news.cnblogs.com/n/56852/" target="_blank">淘宝网通过索引模式涉足网络文学</a><span style="color:gray">(2010-02-10 15:59)</span><br/>· <a href="http://news.cnblogs.com/n/56851/" target="_blank">苹果发布 iPhone/iPad SDK 3.2 beta2 开发包</a><span style="color:gray">(2010-02-10 15:37)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/news/tag/Buzz/" target="_blank">Google Buzz相关新闻</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>《Silverlight 2完美征程》：书稿目录</title><link>http://www.cnblogs.com/Terrylee/archive/2009/04/22/silverlight-travelling-index.html</link><dc:creator>TerryLee</dc:creator><author>TerryLee</author><pubDate>Tue, 21 Apr 2009 19:19:00 GMT</pubDate><guid>http://www.cnblogs.com/Terrylee/archive/2009/04/22/silverlight-travelling-index.html</guid><description><![CDATA[<p>阅读: 11113 评论: 64 作者: <a href="http://www.cnblogs.com/Terrylee/" target="_blank">TerryLee</a> 发表于 2009-04-22 03:19 <a href="http://www.cnblogs.com/Terrylee/archive/2009/04/22/silverlight-travelling-index.html" target="_blank">原文链接</a></p><h2>内容简介</h2>  <p>本书详细介绍了微软下一代富互联网开发技术Silverlight，分为基础篇、进阶篇、高级篇和案例篇四个部分，共22个章节，以Silverlight 2为主要版本从不同的层面进行了阐释，第一部分介绍Silverlight 中的基础知识、控件模型以及它在绘图方面的能力；第二部分介绍了Silverlight中丰富的网络通信功能、托管代码与浏览器之间的互操作性以及数据绑定等；第三部分对Silverlight应用程序的生命周期进行剖析，并介绍了一些调试技巧；最后一部分开发了Deep Zoom应用程序和图表应用程序两个案例。全书对每个知识点都通过示例进行讲解，一步一步带您进入Silverlight世界。</p>  <p>详情敬请访问《Silverlight 2完美征程》官方网站：<a href="http://www.dotneteye.cn/silverlight">http://www.dotneteye.cn/silverlight</a></p>  <h2>第一章 进入Silverlight世界</h2>  <p>1.1 Silverlight概述</p>  <p>1.2 创建基本的Silverlight应用</p>  <p>1.3 开发工具简介</p>  <p>1.4 认识XAML</p>  <p>1.5 应用案例</p>  <p>1.6 本章小结</p>  <h2>第二章 基本控件</h2>  <p>2.1 控件模型概述</p>  <p>2.2 命令控件</p>  <p>2.3 文本编辑控件</p>  <p>2.4 选择控件</p>  <p>2.5 列表控件</p>  <p>2.6 日期控件</p>  <p>2.7 信息显示控件</p>  <p>2.8 数据显示控件</p>  <p>2.9 多媒体控件</p>  <p>2.10 布局控件</p>  <p>2.11 本章小结</p>  <h2>第三章 界面布局</h2>  <p>3.1 界面布局概览</p>  <p>3.2 使用Canvas绝对布局</p>  <p>3.3 使用StackPanel局部布局</p>  <p>3.4 使用Grid相对布局</p>  <p>3.5 使用边距</p>  <p>3.6 使用边框控件</p>  <p>3.7自定义布局面板</p>  <p>3.8 全屏支持</p>  <p>3.9 实例开发</p>  <p>3.10本章小结</p>  <h2>第四章 封装控件观感</h2>  <p>4.1 控件观感概览</p>  <p>4.2 使用样式</p>  <p>4.3 使用控件模板</p>  <p>4.4 视觉状态管理</p>  <p>4.5 本章小结</p>  <h2>第五章 事件处理</h2>  <p>5.1 事件概述</p>  <p>5.2 鼠标事件处理</p>  <p>5.3 键盘事件处理</p>  <p>5.4 焦点支持</p>  <p>5.5 实例开发</p>  <p>5.6 本章小结</p>  <h2>第六章 绘图应用</h2>  <p>6.1 绘图概览</p>  <p>6.2 直线Line </p>  <p>6.3 矩形Rectangle </p>  <p>6.4 椭圆形Ellipse </p>  <p>6.5 多边形Polygon </p>  <p>6.6 多线形Polyline </p>  <p>6.7 路径Path </p>  <p>6.8 实例开发</p>  <p>6.9 本章小结</p>  <h2>第七章 画刷应用</h2>  <p>7.1 画刷简介</p>  <p>7.2 单色实心画刷SolidColorBrush</p>  <p>7.3 线性渐变画刷LinearGradientBrush</p>  <p>7.4 放射性渐变画刷RadialGradientBrush</p>  <p>7.5 图像画刷ImageBrush</p>  <p>7.6 视频画刷VideoBrush</p>  <p>7.7 实例开发</p>  <p>7.8 本章小结</p>  <h2>第八章 图像处理</h2>  <p>8.1 图像处理简介</p>  <p>8.2 创建图像</p>  <p>8.3 图像拉伸</p>  <p>8.4 图像裁剪</p>  <p>8.5 半透明遮罩</p>  <p>8.6 实例开发</p>  <p>8.7 本章小结</p>  <h2>第九章几何图形</h2>  <p>9.1 几何图形介绍</p>  <p>9.2 几何图形的使用</p>  <p>9.3 简单几何图形</p>  <p>9.4 复杂几何图形</p>  <p>9.5 组合几何图形</p>  <p>9.6 本章小结</p>  <h2>第十章 变形效果应用</h2>  <p>10.1 变换对象简介</p>  <p>10.2 RotateTransform旋转变换</p>  <p>10.3 ScaleTransform缩放变换</p>  <p>10.4 SkewTransform倾斜变换</p>  <p>10.5 TranslateTransform移动变换</p>  <p>10.6 TransformGroup变换组</p>  <p>10.7 MatrixTransform矩阵变换</p>  <p>10.8 实现动画变换</p>  <p>10.9 动态添加变换</p>  <p>10.10 实例开发</p>  <p>10.11 本章小结</p>  <h2>第十一章 数据绑定</h2>  <p>11.1 数据绑定简介</p>  <p>11.2 绑定数据对象</p>  <p>11.3 数据绑定模式</p>  <p>11.4 绑定对象集合</p>  <p>11.5 构建数据服务</p>  <p>11.6 使用数据模板</p>  <p>11.7 DataGrid控件</p>  <p>11.8 数据转换</p>  <p>11.9 数据验证</p>  <p>11.10 实例开发</p>  <p>11.11 本章小结</p>  <h2>第十二章 网络与通信</h2>  <p>12.1 数据与通信概述</p>  <p>12.2 调用Web Service</p>  <p>12.3 调用WCF服务</p>  <p>12.4 使用WebClient通信</p>  <p>12.5 访问RESTful服务</p>  <p>12.6 使用HttpWebRequest通信</p>  <p>12.7 数据操作格式</p>  <p>12.8 访问ADO.NET Data Service</p>  <p>12.9 跨域通信策略</p>  <p>12.10 本章小结</p>  <h2>第十三章 与浏览器交互</h2>  <p>13.1 浏览器交互简介</p>  <p>13.2 访问文档对象模型</p>  <p>13.3 使用托管代码调用JavaScript</p>  <p>13.4 使用JavaScript调用托管代码</p>  <p>13.5 使用托管代码处理DOM元素事件</p>  <p>13.6 使用JavaScript处理托管事件</p>  <p>13.7 混合HTML和Silverlight</p>  <p>13.8 与浏览器交互相关辅助方法</p>  <p>13.9 安全设置</p>  <p>13.10 实例开发</p>  <p>13.11 本章小结</p>  <h2>第十四章 影音播放</h2>  <p>14.1 影音播放概述</p>  <p>14.2 MediaElement对象</p>  <p>14.3 媒体状态控制</p>  <p>14.4 VideoBrush和MediaElement</p>  <p>14.5 本章小结</p>  <h2>第十五章 制作动画</h2>  <p>15.1 动画概述</p>  <p>15.2 时间线</p>  <p>15.3 故事板</p>  <p>15.4 From/To/By动画</p>  <p>15.5 关键帧动画</p>  <p>15.6 编程方式控制动画</p>  <p>15.7 实例开发</p>  <p>15.8 本章小结</p>  <h2>第十六章 自定义控件</h2>  <p>16.1 控件模型</p>  <p>16.2 自定义简单按钮控件</p>  <p>16.3 本章小结</p>  <h2>第十七章 独立存储</h2>  <p>17.1 独立存储概述</p>  <p>17.2 使用独立存储</p>  <p>17.3 管理存储空间</p>  <p>17.4 读写应用程序配置</p>  <p>17.5 进一步认识独立存储</p>  <p>17.6 本章小结</p>  <h2>第十八章 墨迹标注使用</h2>  <p>18.1 InkPresenter控件使用</p>  <p>18.2 收集显示数据</p>  <p>18.3 笔画设计</p>  <p>18.4 美化InkPresenter</p>  <p>18.5 标注存储</p>  <p>18.6 本章小结</p>  <h2>第十九章 应用程序剖析</h2>  <p>19.1 应用程序概述</p>  <p>19.2 应用程序生命周期</p>  <p>19.3 应用程序宿主</p>  <p>19.4 应用程序包揭秘</p>  <p>19.5 应用程序部署</p>  <p>19.6 本章小结</p>  <h2>第二十章 异常处理与调试</h2>  <p>20.1 异常处理</p>  <p>20.2 使用Visual Studio基本调试</p>  <p>20.3 使用Windbg高级调试</p>  <p>20.4 本章小结</p>  <h2>第二十一章 开发Deep Zoom应用程序</h2>  <p>21.1 Deep Zoom概述</p>  <p>21.2 Deep Zoom示例</p>  <p>21.3 本章小结</p>  <h2>第二十二章 开发图表应用程序</h2>  <p>22.1 Silverlight Toolkit概述</p>  <p>22.2 开发图表示例</p>  <p>22.3 本章小结</p>  <p>详情敬请访问《Silverlight 2完美征程》官方网站：<a href="http://www.dotneteye.cn/silverlight">http://www.dotneteye.cn/silverlight</a></p><img src="http://www.cnblogs.com/Terrylee/aggbug/1440904.html?type=1" width="1" height="1" alt=""/><p>评论: 64　<a href="http://www.cnblogs.com/Terrylee/archive/2009/04/22/silverlight-travelling-index.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/Terrylee/archive/2009/04/22/silverlight-travelling-index.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56857/" target="_blank">Facebook与美国在线合作 整合AIM动态功能</a><span style="color:gray">(2010-02-10 16:41)</span><br/>· <a href="http://news.cnblogs.com/n/56855/" target="_blank">NDepend 3.0已与Visual Studio集成</a><span style="color:gray">(2010-02-10 16:17)</span><br/>· <a href="http://news.cnblogs.com/n/56854/" target="_blank">Ruby in Steel 1.5发布，去除IronRuby支持</a><span style="color:gray">(2010-02-10 16:14)</span><br/>· <a href="http://news.cnblogs.com/n/56852/" target="_blank">淘宝网通过索引模式涉足网络文学</a><span style="color:gray">(2010-02-10 15:59)</span><br/>· <a href="http://news.cnblogs.com/n/56851/" target="_blank">苹果发布 iPhone/iPad SDK 3.2 beta2 开发包</a><span style="color:gray">(2010-02-10 15:37)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/news/tag/Buzz/" target="_blank">Google Buzz相关新闻</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>技巧：使用可扩展对象模式扩展HttpApplication</title><link>http://www.cnblogs.com/Terrylee/archive/2009/04/20/Using-Extensible-Object-Pattern-to-Extend-HttpApplication.html</link><dc:creator>TerryLee</dc:creator><author>TerryLee</author><pubDate>Sun, 19 Apr 2009 18:28:00 GMT</pubDate><guid>http://www.cnblogs.com/Terrylee/archive/2009/04/20/Using-Extensible-Object-Pattern-to-Extend-HttpApplication.html</guid><description><![CDATA[<p>阅读: 17874 评论: 52 作者: <a href="http://www.cnblogs.com/Terrylee/" target="_blank">TerryLee</a> 发表于 2009-04-20 02:28 <a href="http://www.cnblogs.com/Terrylee/archive/2009/04/20/Using-Extensible-Object-Pattern-to-Extend-HttpApplication.html" target="_blank">原文链接</a></p><h2>概述</h2>  <p>HttpApplication对象对于做ASP.NET开发的朋友，我想没有人不熟悉它。在ASP.NET开发中，经常避免不了要在HttpApplication中执行一些操作，如使用了ASP.NET MVC框架，就会在Application_Start 事件中避免不了这样的路由规则配置代码：</p>  <pre class="code"><span style="color: blue">protected void </span>Application_Start()
{
    <span style="color: #2b91af">RouteTable</span>.Routes.IgnoreRoute(<span style="color: #a31515">&quot;{resource}.axd/{*pathInfo}&quot;</span>);

    <span style="color: #2b91af">RouteTable</span>.Routes.MapRoute(
        <span style="color: #a31515">&quot;Default&quot;</span>,                                              <span style="color: green">// Route name
        </span><span style="color: #a31515">&quot;{controller}/{action}/{id}&quot;</span>,                           <span style="color: green">// URL with parameters
        </span><span style="color: blue">new </span>{ controller = <span style="color: #a31515">&quot;Home&quot;</span>, action = <span style="color: #a31515">&quot;Index&quot;</span>, id = <span style="color: #a31515">&quot;&quot; </span>}  <span style="color: green">// Parameter defaults
    </span>);
}</pre>
<a href="http://11011.net/software/vspaste"></a><a href="http://11011.net/software/vspaste"></a>

<p>如果仅仅是这一条，看起来倒不觉的有什么问题，但如果同时在应用程序中使用了工作流，又避免不了在Application_Start出现启动工作流运行时的代码：</p>

<pre class="code"><span style="color: blue">protected void </span>Application_Start()
{
    <span style="color: green">// 注册路由规则
    </span><span style="color: #2b91af">RouteTable</span>.Routes.IgnoreRoute(<span style="color: #a31515">&quot;{resource}.axd/{*pathInfo}&quot;</span>);
    <span style="color: #2b91af">RouteTable</span>.Routes.MapRoute(
        <span style="color: #a31515">&quot;Default&quot;</span>,                                              <span style="color: green">// Route name
        </span><span style="color: #a31515">&quot;{controller}/{action}/{id}&quot;</span>,                           <span style="color: green">// URL with parameters
        </span><span style="color: blue">new </span>{ controller = <span style="color: #a31515">&quot;Home&quot;</span>, action = <span style="color: #a31515">&quot;Index&quot;</span>, id = <span style="color: #a31515">&quot;&quot; </span>}  <span style="color: green">// Parameter defaults
    </span>);

    <span style="color: green">// 启动工作流
    </span><span style="color: #2b91af">WorkflowRuntime </span>workflowRuntime = <span style="color: blue">new </span><span style="color: #2b91af">WorkflowRuntime</span>(<span style="color: #a31515">&quot;workflowServicesConfig&quot;</span>);
    <span style="color: #2b91af">ExternalDataExchangeService </span>externalDataExchangeService = <span style="color: blue">new </span><span style="color: #2b91af">ExternalDataExchangeService</span>();
    workflowRuntime.AddService(externalDataExchangeService);
    workflowRuntime.StartRuntime();
}</pre>
<a href="http://11011.net/software/vspaste"></a><a href="http://11011.net/software/vspaste"></a>

<p>试想一下，现在我们仅仅是有了ASP.NET MVC路由规则的配置、WF运行时的启动，如果在应用程序中使用某种DI框架，如微软的Unity，是不是又避免不了要出现这样的容器初始化代码呢？</p>

<pre class="code"><span style="color: blue">protected void </span>Application_Start()
{
    <span style="color: green">// 注册路由规则
    </span><span style="color: #2b91af">RouteTable</span>.Routes.IgnoreRoute(<span style="color: #a31515">&quot;{resource}.axd/{*pathInfo}&quot;</span>);
    <span style="color: #2b91af">RouteTable</span>.Routes.MapRoute(
        <span style="color: #a31515">&quot;Default&quot;</span>,                                              <span style="color: green">// Route name
        </span><span style="color: #a31515">&quot;{controller}/{action}/{id}&quot;</span>,                           <span style="color: green">// URL with parameters
        </span><span style="color: blue">new </span>{ controller = <span style="color: #a31515">&quot;Home&quot;</span>, action = <span style="color: #a31515">&quot;Index&quot;</span>, id = <span style="color: #a31515">&quot;&quot; </span>}  <span style="color: green">// Parameter defaults
    </span>);

    <span style="color: green">// 启动工作流
    </span><span style="color: #2b91af">WorkflowRuntime </span>workflowRuntime = <span style="color: blue">new </span><span style="color: #2b91af">WorkflowRuntime</span>(<span style="color: #a31515">&quot;workflowServicesConfig&quot;</span>);
    <span style="color: #2b91af">ExternalDataExchangeService </span>externalDataExchangeService = <span style="color: blue">new </span><span style="color: #2b91af">ExternalDataExchangeService</span>();
    workflowRuntime.AddService(externalDataExchangeService);
    workflowRuntime.StartRuntime();

    <span style="color: green">// 初始化DI容器
    </span>IContainerContext repositoryContainer = ContainerManager.GetContainer(<span style="color: #a31515">&quot;repositoryContainer&quot;</span>);
    repositoryContainer.Initialize();
}</pre>
<a href="http://11011.net/software/vspaste"></a><a href="http://11011.net/software/vspaste"></a>

<p>再看看Application_Start事件中的代码，有ASP.NET MVC的工作，有WF的工作，也有Unity的工作，不知道将来还会有什么？这些原本互相之间没有任何联系的代码，现在却同时堆在了一起，当每一部分（或者说每一个框架）变化的时候，都会涉及到Application_Start中代码的修改，显然违反了OCP原则。那么有没有一种机制，让这些互不相干的模块之间互相独立，各自发生变化时不影响对HttpApplication？此时我们就需要对HttpApplication进行扩展，提供一个扩展点，让其他模块的程序附加到HttpApplication上面。</p>

<h2>可扩展对象模式</h2>

<p>我们知道WCF提供了非常完美的扩展机制，几乎在服务执行过程中的每一个环节上都提供有扩展点，如ServiceHostBase、OperationContext、InstanceContext、IContextChannel，这些对象都属于可扩展对象，它们都通过Extensions属性获取用于所有扩展的集合。我们能不能使用这种方式对HttpApplication也进行扩展呢，答案自然是肯定的。查阅一下MSDN就会知道在System.ServiceModel命名空间下面提供了这样的一组接口：IExtensibleObject、IExtension和IExtensionCollection，这是可扩展对象模式中最重要的三个接口，也只有这三个接口。</p>

<p>IExtensibleObject自然是定义了可扩展对象，即我们要对谁进行扩展，它的定义非常简单，仅仅是提供了一个只读的属性Extensions，用来提供所有扩展对象的集合，如下代码所示：</p>

<pre class="code"><span style="color: blue">public interface </span><span style="color: #2b91af">IExtensibleObject</span>&lt;T&gt; <span style="color: blue">where </span>T : <span style="color: #2b91af">IExtensibleObject</span>&lt;T&gt;
{
    <span style="color: #2b91af">IExtensionCollection</span>&lt;T&gt; Extensions { <span style="color: blue">get</span>; }
}</pre>
<a href="http://11011.net/software/vspaste"></a>

<p>IExtension定义了扩展对象的契约，使对象可以通过聚合扩展另一个对象（此处的另一个对象，就是指上面所讲的扩展宿主IExtensibleObject），在IExtension中定义了两个非常重要的方法Attach和Detach方法，分别用来提供聚合或解聚的通知。</p>

<pre class="code"><span style="color: blue">public interface </span><span style="color: #2b91af">IExtension</span>&lt;T&gt; <span style="color: blue">where </span>T : <span style="color: #2b91af">IExtensibleObject</span>&lt;T&gt;
{
    <span style="color: blue">void </span>Attach(T owner);
    <span style="color: blue">void </span>Detach(T owner);
}</pre>

<p>当一个扩展对象IExtension附加到可扩展对象的扩展集合中时，它的Attach方法将会被调用；反之如果从集合中移除一个扩展对象时，它的Detach方法会被调用。这一点我们可以通过Reflector来得到验证，如下代码所示：</p>

<pre class="code"><span style="color: blue">protected override void </span>InsertItem(<span style="color: blue">int </span>index, IExtension&lt;T&gt; item)
{
    <span style="color: blue">lock </span>(<span style="color: blue">base</span>.SyncRoot)
    {
        item.Attach(<span style="color: blue">this</span>.owner);
        <span style="color: blue">base</span>.InsertItem(index, item);
    }
}

<span style="color: blue">protected override void </span>RemoveItem(<span style="color: blue">int </span>index)
{
    <span style="color: blue">lock </span>(<span style="color: blue">base</span>.SyncRoot)
    {
        <span style="color: blue">base</span>.Items[index].Detach(<span style="color: blue">this</span>.owner);
        <span style="color: blue">base</span>.RemoveItem(index);
    }
}</pre>

<p>最后一个接口是IExtensionCollection，它是IExtension对象的集合。</p>

<h2>对HttpApplication进行扩展</h2>

<p>下面我们就看一下如何使用可扩展对象模式对HttpApplication进行扩展，首先定义可扩展对象，让ExtensibleHttpApplication派生于HttpApplication，并实现了IExtensibleObject接口，泛型的参数类型就是它自身，如下代码所示：</p>

<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">ExtensibleHttpApplication </span>: <span style="color: #2b91af">HttpApplication</span>,
    <span style="color: #2b91af">IExtensibleObject</span>&lt;<span style="color: #2b91af">ExtensibleHttpApplication</span>&gt;
{
    <span style="color: blue">private </span><span style="color: #2b91af">IExtensionCollection</span>&lt;<span style="color: #2b91af">ExtensibleHttpApplication</span>&gt; _extensions;
    
    <span style="color: blue">public </span>ExtensibleHttpApplication()
    {
        <span style="color: blue">this</span>._extensions = <span style="color: blue">new </span><span style="color: #2b91af">ExtensionCollection</span>&lt;<span style="color: #2b91af">ExtensibleHttpApplication</span>&gt;(<span style="color: blue">this</span>);
    }

    <span style="color: blue">public </span><span style="color: #2b91af">IExtensionCollection</span>&lt;<span style="color: #2b91af">ExtensibleHttpApplication</span>&gt; Extensions
    {
        <span style="color: blue">get
        </span>{
            <span style="color: blue">return this</span>._extensions;
        }
    }
}</pre>
<a href="http://11011.net/software/vspaste"></a>

<p>有了可扩展的HttpApplication之后，需要在HttpApplication中实现任何功能，都可以作为一个扩展附加到ExtensibleHttpApplication上去，如实现ASP.NET MVC路由，可以定义一个如下代码所示的扩展对象：</p>

<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">MvcHttpApplication </span>: <span style="color: #2b91af">IExtension</span>&lt;<span style="color: #2b91af">ExtensibleHttpApplication</span>&gt;
{
    <span style="color: blue">public void </span>Attach(<span style="color: #2b91af">ExtensibleHttpApplication </span>owner)
    {
        <span style="color: #2b91af">RouteTable</span>.Routes.IgnoreRoute(<span style="color: #a31515">&quot;{resource}.axd/{*pathInfo}&quot;</span>);

        <span style="color: #2b91af">RouteTable</span>.Routes.MapRoute(
            <span style="color: #a31515">&quot;Default&quot;</span>,                                              <span style="color: green">// Route name
            </span><span style="color: #a31515">&quot;{controller}/{action}/{id}&quot;</span>,                           <span style="color: green">// URL with parameters
            </span><span style="color: blue">new </span>{ controller = <span style="color: #a31515">&quot;Home&quot;</span>, action = <span style="color: #a31515">&quot;Index&quot;</span>, id = <span style="color: #a31515">&quot;&quot; </span>}  <span style="color: green">// Parameter defaults
        </span>);
    }

    <span style="color: blue">public void </span>Detach(<span style="color: #2b91af">ExtensibleHttpApplication </span>owner)
    {
        <span style="color: green">//nothing
    </span>}
}</pre>

<p><a href="http://11011.net/software/vspaste"></a>同样如果要在HttpApplication中启动Workflow，可以再针对Workflow定义一个扩展对象，如下示例代码所示：</p>

<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">WorkflowHttpApplication </span>: <span style="color: #2b91af">IExtension</span>&lt;<span style="color: #2b91af">ExtensibleHttpApplication</span>&gt;
{
    <span style="color: blue">private </span><span style="color: #2b91af">WorkflowRuntime </span>workflowRuntime;
    <span style="color: blue">public void </span>Attach(<span style="color: #2b91af">ExtensibleHttpApplication </span>owner)
    {
        workflowRuntime = <span style="color: blue">new </span><span style="color: #2b91af">WorkflowRuntime</span>(<span style="color: #a31515">&quot;workflowServicesConfig&quot;</span>);
        <span style="color: #2b91af">ExternalDataExchangeService </span>externalDataExchangeService = <span style="color: blue">new </span><span style="color: #2b91af">ExternalDataExchangeService</span>();
        workflowRuntime.AddService(externalDataExchangeService);
        workflowRuntime.StartRuntime();
    }

    <span style="color: blue">public void </span>Detach(<span style="color: #2b91af">ExtensibleHttpApplication </span>owner)
    {
        workflowRuntime.StopRuntime();
    }
}</pre>
<a href="http://11011.net/software/vspaste"></a>

<p>我们已经定义好了相应的扩展对象，只需要在相应的HttpApplication把扩展对象附加到ExtensibleHttpApplication上即可，修改Global.asax中的代码如下所示：</p>

<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">MvcApplication </span>: <span style="color: #2b91af">ExtensibleHttpApplication
</span>{
    <span style="color: blue">protected void </span>Application_Start()
    {
        <span style="color: blue">this</span>.Extensions.Add(<span style="color: blue">new </span><span style="color: #2b91af">MvcHttpApplication</span>());
        <span style="color: blue">this</span>.Extensions.Add(<span style="color: blue">new </span><span style="color: #2b91af">WorkflowHttpApplication</span>());
    }
}</pre>
<a href="http://11011.net/software/vspaste"></a>

<p>现在代码是不是看起来优雅多了？现在如果要在Application_Start中，添加另外一些执行代码，只需要编写相应的扩展对象，并将其添加到Extension集合中即可。也许有朋友会问，这样每添加一些新的代码，还是要修改Application_Start中的代码啊？别忘了，可以通过配置可以解决这个问题，WCF中的扩展不也是可以采用配置方式实现，不是吗？同样，如果我们需要在Application_End事件中释放某些对象，可以直接从扩展集合中移除它，此时将会调用它的Detach方法。</p>

<h2>总结</h2>

<p>本文介绍了如何使用WCF中提供的可扩展对象模式扩展HttpApplication，事实上可扩展对象模式的作用远不在此，它可以扩展.NET类库中任何我们想对其进行扩展的对象，或者是一个自定义的类型，都可以使用可扩展对象模式对其进行扩展。</p>

<p>特别鸣谢：<a href="http://www.cnblogs.com/jessequ">Jesse Qu</a></p>

<p>注1：由于TerryLee最近一段时间忙于别的事务，无暇顾及Blog，所以有大量的评论和E-mail都没能回复，请大家见谅。</p>

<p>注2：由TerryLee撰写的《Silverlight 2完美征程》一书，即将于本月底上市，敬请期待，详情大家可以访问本书官方网站<a href="http://www.dotneteye.cn/silverlight">http://www.dotneteye.cn/silverlight</a>了解。</p><img src="http://www.cnblogs.com/Terrylee/aggbug/1439394.html?type=1" width="1" height="1" alt=""/><p>评论: 52　<a href="http://www.cnblogs.com/Terrylee/archive/2009/04/20/Using-Extensible-Object-Pattern-to-Extend-HttpApplication.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/Terrylee/archive/2009/04/20/Using-Extensible-Object-Pattern-to-Extend-HttpApplication.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56857/" target="_blank">Facebook与美国在线合作 整合AIM动态功能</a><span style="color:gray">(2010-02-10 16:41)</span><br/>· <a href="http://news.cnblogs.com/n/56855/" target="_blank">NDepend 3.0已与Visual Studio集成</a><span style="color:gray">(2010-02-10 16:17)</span><br/>· <a href="http://news.cnblogs.com/n/56854/" target="_blank">Ruby in Steel 1.5发布，去除IronRuby支持</a><span style="color:gray">(2010-02-10 16:14)</span><br/>· <a href="http://news.cnblogs.com/n/56852/" target="_blank">淘宝网通过索引模式涉足网络文学</a><span style="color:gray">(2010-02-10 15:59)</span><br/>· <a href="http://news.cnblogs.com/n/56851/" target="_blank">苹果发布 iPhone/iPad SDK 3.2 beta2 开发包</a><span style="color:gray">(2010-02-10 15:37)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/news/tag/Buzz/" target="_blank">Google Buzz相关新闻</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>代友招聘：软件测试工程师</title><link>http://www.cnblogs.com/Terrylee/archive/2009/01/13/1374557.html</link><dc:creator>TerryLee</dc:creator><author>TerryLee</author><pubDate>Mon, 12 Jan 2009 16:35:00 GMT</pubDate><guid>http://www.cnblogs.com/Terrylee/archive/2009/01/13/1374557.html</guid><description><![CDATA[<p>阅读: 16536 评论: 33 作者: <a href="http://www.cnblogs.com/Terrylee/" target="_blank">TerryLee</a> 发表于 2009-01-13 00:35 <a href="http://www.cnblogs.com/Terrylee/archive/2009/01/13/1374557.html" target="_blank">原文链接</a></p><p>继上次在园子里帮朋友发了一则<a href="http://www.cnblogs.com/Terrylee/archive/2008/12/30/1365314.html">招聘启事</a>之后，还是原来的那个项目，朋友还需要一位测试工程师，全职兼职均可，不知道园子里有没有高手愿意加入？要求如下：</p>  <p>1.熟悉软件测试流程，至少2年以上的全职软件测试经验；    <br />2.具备测试环境的搭建和维护能力；     <br />3.具备独立完成测试工作的能力，编写测试计划、测试用例等；     <br />4.具备熟练使用QTP、LoadRunner、VSTS等测试工具的能力；    <br />5.具有良好的团队合作精神和敬业精神，热爱测试工作；    <br />6.能够指导初级测试工程师的工作；    <br />7.09年2、3月份具有充足的时间参与该项目    <br />8.全职兼职均可    <br />9.薪水：全职参与薪水应不低于8000元/月，兼职根据参与时间面谈。</p>  <p>有意者请将简历发至<font color="#ff0000"><strong>lovenets@sina.com</strong></font>或者<strong><font color="#ff0000">lovenets@hotmail.com</font></strong></p><img src="http://www.cnblogs.com/Terrylee/aggbug/1374557.html?type=1" width="1" height="1" alt=""/><p>评论: 33　<a href="http://www.cnblogs.com/Terrylee/archive/2009/01/13/1374557.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/Terrylee/archive/2009/01/13/1374557.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56857/" target="_blank">Facebook与美国在线合作 整合AIM动态功能</a><span style="color:gray">(2010-02-10 16:41)</span><br/>· <a href="http://news.cnblogs.com/n/56855/" target="_blank">NDepend 3.0已与Visual Studio集成</a><span style="color:gray">(2010-02-10 16:17)</span><br/>· <a href="http://news.cnblogs.com/n/56854/" target="_blank">Ruby in Steel 1.5发布，去除IronRuby支持</a><span style="color:gray">(2010-02-10 16:14)</span><br/>· <a href="http://news.cnblogs.com/n/56852/" target="_blank">淘宝网通过索引模式涉足网络文学</a><span style="color:gray">(2010-02-10 15:59)</span><br/>· <a href="http://news.cnblogs.com/n/56851/" target="_blank">苹果发布 iPhone/iPad SDK 3.2 beta2 开发包</a><span style="color:gray">(2010-02-10 15:37)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/news/tag/Buzz/" target="_blank">Google Buzz相关新闻</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>不得不为LINQ说几句话，驳“LINQ已死”论</title><link>http://www.cnblogs.com/Terrylee/archive/2009/01/05/LINQ-and-LINQ-to-SQL.html</link><dc:creator>TerryLee</dc:creator><author>TerryLee</author><pubDate>Sun, 04 Jan 2009 17:31:00 GMT</pubDate><guid>http://www.cnblogs.com/Terrylee/archive/2009/01/05/LINQ-and-LINQ-to-SQL.html</guid><description><![CDATA[<p>阅读: 22181 评论: 318 作者: <a href="http://www.cnblogs.com/Terrylee/" target="_blank">TerryLee</a> 发表于 2009-01-05 01:31 <a href="http://www.cnblogs.com/Terrylee/archive/2009/01/05/LINQ-and-LINQ-to-SQL.html" target="_blank">原文链接</a></p><h2>起因</h2>  <p>近日不断看到有关“LINQ已死”，“LINQ玩完了吧”的言论，甚至于更有牛人说出“程序开发最终会回到本机代码上”，暂不说这些言论是否正确，且先来看看各位的惊人言论，下面仅摘录部分：</p>  <p><strong>言论1</strong></p>  <div class="code">   <p>我看园子里还有蛮多人学习和用Linq to SQL 还写了一系列文章      <br />哎~~ 程序员的悲哀呢       <br />被他们牵着鼻子走</p> </div>  <p><strong>言论2</strong></p>  <div class="code">   <p>玩LINQ的人傻了吧</p> </div>  <p><strong>言论3</strong></p>  <div class="code">   <p>又是一次证明跟着微软是浪费青春的,小心C#喔,各位,      <br />我发现程序开发最终会回到本机代码上来,而不是托管的</p> </div>  <p><strong>言论4</strong></p>  <div class="code">   <p>Linq 是 Anders 最失败的一个作品， 看来当年的牛人真的老了。      <br />linq将程序的复杂性提高了一个数量级，强迫程序员在两个语法体系间跳跃，却本质性提高开发效率       <br />linq is dead!</p> </div>  <p><strong>言论5</strong></p>  <div class="code">   <p>废弃了好 这样的垃圾不该存活，搞得程序员劳命伤财的学习！      <br />垃圾啊！       <br />幸亏我拒绝LINQ</p> </div>  <p>以上言论，我仅摘取了部分，其实通过这些，我只想说几个问题：</p>  <h2>请认清事实真相</h2>  <p>首先根本没有“LINQ已死”的说法，也没有“LINQ to SQL已死”的说法，关于“LINQ已死”的言论完全来自于社区，而起因则是ADO.NET团队的一篇《<a href="http://blogs.msdn.com/adonet/archive/2008/10/29/update-on-linq-to-sql-and-linq-to-entities-roadmap.aspx">Update on LINQ to SQL and LINQ to Entities Roadmap</a>》，文章最后说到</p>  <div class="code">   <p>作为.NET 4.0的一部分，实体框架是我们推荐的在关系场景中针对LINQ的数据访问解决方案，我们聆听了客户关于LINQ to SQL的反馈，并将整合在社区收到的反馈，继续开发和改善该产品。</p> </div>  <p>于是社区中就猜测微软将会放弃LINQ to SQL，请注意，ADO.NET团队只是说推荐使用ADO.NET Entity Framework，将会加大对它的投入，而并没有没有什么“废弃”言论，“已死”更无从谈起！退一步讲，就算微软不再开发LINQ to SQL，这跟LINQ又有何关系呢？LINQ to SQL只是LINQ家族中众多Providers中的一个而已，没了LINQ to SQL，不是还有LINQ to Object、LINQ to XML、LINQ to Entities的吗？况且LINQ to SQL还没死，它也不会死，作为一个轻量级的ORM框架，LINQ to SQL在中小项目以及快速开发中的优势还是非常明显的，这一点，如果你没有用过LINQ to SQL，就不要再说它是多么多么的垃圾！</p>  <p>投入小不等于放弃，就算微软不再开发LINQ to SQL，LINQ to SQL现在的功能已经能够大部分开发的需要，再加上它灵活的可扩展性，完全可以通过自定义一些扩展来满足自己开发的需要。</p>  <p>再强调一遍：请停止“LINQ已死”或者“LINQ to SQL已死”的荒谬言论吧！</p>  <h2>请区分清概念</h2>  <p>作为“专业的开发人员”，请在了解了某个技术之后，再对其发表见解吧，最起码你得知道这个技术是怎么回事吧？如别人说“LINQ to SQL已死”，然后就有人跟着说“幸好我没用LINQ”，这又关LINQ啥事了。博客园老赵曾经在6月份写过一篇文章《<a href="http://www.cnblogs.com/JeffreyZhao/archive/2008/06/04/ajax-linq-lambda-expression.html">觉得有必要来澄清几组重要概念</a>》，其中介绍了LINQ以及LINQ to SQL的区别，但是很遗憾，社区中不能正确区分LINQ和LINQ to SQL的朋友太多了，看到这些言论，让我们为老赵这篇文章默哀一分钟吧。</p>  <p>再强调一遍：LINQ to SQL只是LINQ家族中众多Providers中的一个而已，这是真的，请不要怀疑，不要把LINQ等同于LINQ to SQL，如果觉的LINQ to SQL字母太多了，可以使用L2S来代替，但请不要使用LINQ来代替LINQ to SQL。</p>  <h2>请收起LINQ无用论</h2>  <p>“LINQ很垃圾”，“拒绝LINQ”，看到这些，真的有些悲哀，LINQ仅仅是一个语言特性，它能够让我们在编写代码时使用内置的查询语法对于数据集合进行操作，提高我们的开发效率，仅此而已。当然如果你的数据集合来源不同，会对应不同的Providers。既然拒绝LINQ，为何不干脆连泛型、数组以及.NET Framework中内置的基础类库等等一起拒绝，甚至于拒绝C#语言，而回到所谓的“本机代码”上去呢，直接编写二进制的“01101100”程序是不是比C#语言更方便，更快速？如果是，请原谅，我错了，我道歉。</p>  <p>再强调一遍：LINQ仅仅是一个语言特性而已，请收起LINQ无用论。</p>  <h2>后记</h2>  <p>写下本篇文章，其实不是想针对某个人，只是看到大家都在误解LINQ，甚至有些初学者因为看到“LINQ已死”的谬论，都不敢去学习，去使用了。所以忍不住站出来说几句话，如有得罪您的地方，请见谅！</p>  <p>相关文章：</p>  <p><a href="http://www.cnblogs.com/A-Z/archive/2009/01/04/1367864.html">微软决定废弃两个框架</a></p><img src="http://www.cnblogs.com/Terrylee/aggbug/1368628.html?type=1" width="1" height="1" alt=""/><p>评论: 318　<a href="http://www.cnblogs.com/Terrylee/archive/2009/01/05/LINQ-and-LINQ-to-SQL.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/Terrylee/archive/2009/01/05/LINQ-and-LINQ-to-SQL.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56857/" target="_blank">Facebook与美国在线合作 整合AIM动态功能</a><span style="color:gray">(2010-02-10 16:41)</span><br/>· <a href="http://news.cnblogs.com/n/56855/" target="_blank">NDepend 3.0已与Visual Studio集成</a><span style="color:gray">(2010-02-10 16:17)</span><br/>· <a href="http://news.cnblogs.com/n/56854/" target="_blank">Ruby in Steel 1.5发布，去除IronRuby支持</a><span style="color:gray">(2010-02-10 16:14)</span><br/>· <a href="http://news.cnblogs.com/n/56852/" target="_blank">淘宝网通过索引模式涉足网络文学</a><span style="color:gray">(2010-02-10 15:59)</span><br/>· <a href="http://news.cnblogs.com/n/56851/" target="_blank">苹果发布 iPhone/iPad SDK 3.2 beta2 开发包</a><span style="color:gray">(2010-02-10 15:37)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/news/tag/Buzz/" target="_blank">Google Buzz相关新闻</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>代友招聘：ASP.NET开发人员</title><link>http://www.cnblogs.com/Terrylee/archive/2008/12/30/1365314.html</link><dc:creator>TerryLee</dc:creator><author>TerryLee</author><pubDate>Tue, 30 Dec 2008 07:21:00 GMT</pubDate><guid>http://www.cnblogs.com/Terrylee/archive/2008/12/30/1365314.html</guid><description><![CDATA[<p>阅读: 24672 评论: 59 作者: <a href="http://www.cnblogs.com/Terrylee/" target="_blank">TerryLee</a> 发表于 2008-12-30 15:21 <a href="http://www.cnblogs.com/Terrylee/archive/2008/12/30/1365314.html" target="_blank">原文链接</a></p><p>最近有朋友接到一个项目，是为杂志社开发一套内部办公系统，09年3月底交活，准备用ASP.NET MVC + WF开发，想从咱们园子里找2-3名高手加盟开发，待遇每人月应不会低于8,000元，要求如下：   <br />1. 09年2、3月份有充足的时间参与开发，最好这两个月能专职于本项目；    <br />2. 对待分配给自己的工作认真负责；    <br />3. 有2年以上ASP.NET开发经验，熟悉ASP.NET3.5+SP1的新特性；    <br />4. 已熟练掌握ASP.NET MVC的开发；    <br />5. 熟悉LINQ，以及ADO.NET Entity Framework；    <br />6. 最好具有WF的开发经验；    <br />7. 09年2、3月份人在北京；    <br />8. 有时需要加班工作。</p>  <p>   <br />有意者请将简历发至<strong>lovenets@sina.com</strong>或者<strong>lovenets@hotmail.com</strong></p><img src="http://www.cnblogs.com/Terrylee/aggbug/1365314.html?type=1" width="1" height="1" alt=""/><p>评论: 59　<a href="http://www.cnblogs.com/Terrylee/archive/2008/12/30/1365314.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/Terrylee/archive/2008/12/30/1365314.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56857/" target="_blank">Facebook与美国在线合作 整合AIM动态功能</a><span style="color:gray">(2010-02-10 16:41)</span><br/>· <a href="http://news.cnblogs.com/n/56855/" target="_blank">NDepend 3.0已与Visual Studio集成</a><span style="color:gray">(2010-02-10 16:17)</span><br/>· <a href="http://news.cnblogs.com/n/56854/" target="_blank">Ruby in Steel 1.5发布，去除IronRuby支持</a><span style="color:gray">(2010-02-10 16:14)</span><br/>· <a href="http://news.cnblogs.com/n/56852/" target="_blank">淘宝网通过索引模式涉足网络文学</a><span style="color:gray">(2010-02-10 15:59)</span><br/>· <a href="http://news.cnblogs.com/n/56851/" target="_blank">苹果发布 iPhone/iPad SDK 3.2 beta2 开发包</a><span style="color:gray">(2010-02-10 15:37)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/news/tag/Buzz/" target="_blank">Google Buzz相关新闻</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>[推荐]2008年第四季度开发者Top 100 Blogs</title><link>http://www.cnblogs.com/Terrylee/archive/2008/12/22/top-100-blogs-for-developers-q4-2008.html</link><dc:creator>TerryLee</dc:creator><author>TerryLee</author><pubDate>Mon, 22 Dec 2008 11:15:00 GMT</pubDate><guid>http://www.cnblogs.com/Terrylee/archive/2008/12/22/top-100-blogs-for-developers-q4-2008.html</guid><description><![CDATA[<p>阅读: 13318 评论: 39 作者: <a href="http://www.cnblogs.com/Terrylee/" target="_blank">TerryLee</a> 发表于 2008-12-22 19:15 <a href="http://www.cnblogs.com/Terrylee/archive/2008/12/22/top-100-blogs-for-developers-q4-2008.html" target="_blank">原文链接</a></p><p>在10月份<a href="http://www.cnblogs.com/anytao/archive/2008/10/14/recommand_top100_blogs.html">Anytao同学推荐</a>了<a href="http://nooperation.typepad.com/about.html">Jurgen Appelo</a>整理的Top 100 Blogs 第三季度版本，现在<a href="http://nooperation.typepad.com/about.html">Jurgen Appelo</a>又整理出了第四季度开发者的Top 100 Blogs，其中有些Blogger的排名发生了变化，退出了前100名，而又很多新的Blogger当选，再次推荐给大家。</p>  
 <table cellspacing="0" cellpadding="2" border="0"><tbody>       <tr style="height: 12.75pt" height="17">         <td align="center" width="100"><strong>TT</strong></td>          <td align="center" width="100"><strong>LT</strong></td>          <td><strong>Blog</strong></td>          <td><strong>Author</strong></td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>1</strong></td>          <td align="center">1</td>          <td><a href="http://www.joelonsoftware.com/">Joel on Software</a></td>          <td>Joel Spolsky</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>2</strong></td>          <td align="center">4</td>          <td><a href="http://www.paulgraham.com/">Paul Graham: Essays</a></td>          <td>Paul Graham</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>3</strong></td>          <td align="center">2</td>          <td><a href="http://www.codinghorror.com/">Coding Horror</a></td>          <td>Jeff Atwood</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>4</strong></td>          <td align="center">6</td>          <td><a href="http://www.roughtype.com/">Rough Type</a></td>          <td>Nicholas Carr</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>5</strong></td>          <td align="center">7</td>          <td><a href="http://www.hanselman.com/blog/">Scott Hanselman's Computer Zen</a></td>          <td>Scott Hanselman</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>6</strong></td>          <td align="center">8</td>          <td><a href="http://martinfowler.com/bliki/">Martin Fowler's Bliki</a></td>          <td>Martin Fowler</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>7</strong></td>          <td align="center">11</td>          <td><a href="http://bokardo.com/">Bokardo: Social Design</a></td>          <td>Joshua Porter</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>8</strong></td>          <td align="center">10</td>          <td><a href="http://steve-yegge.blogspot.com/">Stevey's Blog Rants</a></td>          <td>Steve Yegge</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>9</strong></td>          <td align="center">13</td>          <td><a href="http://lambda-the-ultimate.org/">Lambda the Ultimate</a></td>          <td>(various)</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>10</strong></td>          <td align="center">9</td>          <td><a href="http://www.randsinrepose.com/">Rands in Repose</a></td>          <td>Michael Lopp</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>11</strong></td>          <td align="center">--</td>          <td><a href="http://thedailywtf.com/">The Daily WTF</a></td>          <td>(various)</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>12</strong></td>          <td align="center">12</td>          <td><a href="http://www.ericsink.com/">Eric.Weblog()</a></td>          <td>Eric Sink</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>13</strong></td>          <td align="center">--</td>          <td><a href="http://raibledesigns.com/">Raible Designs</a></td>          <td>Matt Raible</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>14</strong></td>          <td align="center">--</td>          <td><a href="http://www.25hoursaday.com/weblog/">Dare Obasanjo aka Carnage4Life</a></td>          <td>Dare Obasanjo</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>15</strong></td>          <td align="center">18</td>          <td><a href="http://www.uie.com/brainsparks/">UIE Brain Sparks</a></td>          <td>Jared Spool</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>16</strong></td>          <td align="center">15</td>          <td><a href="http://pragdave.pragprog.com/">PragDave</a></td>          <td>Dave Thomas</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>17</strong></td>          <td align="center">--</td>          <td><a href="http://blog.jonudell.net/">Jon Udell</a></td>          <td>Jon Udell</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>18</strong></td>          <td align="center">17</td>          <td><a href="http://www.scottberkun.com/blog/">The Berkun Blog</a></td>          <td>Scott Berkun</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>19</strong></td>          <td align="center">21</td>          <td><a href="http://blog.stackoverflow.com/">Stack Overflow</a></td>          <td>Jeff Atwood</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>20</strong></td>          <td align="center">34</td>          <td><a href="http://www.artima.com/weblogs/">Artima Weblogs</a></td>          <td>(various)</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>21</strong></td>          <td align="center">14</td>          <td><a href="http://beust.com/weblog/">Otaku, Cedric's Weblog</a></td>          <td>Cedric</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>22</strong></td>          <td align="center">20</td>          <td><a href="http://blogs.msdn.com/jmeier/">J.D. Meier's Blog</a></td>          <td>J.D. Meier</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>23</strong></td>          <td align="center">--</td>          <td><a href="http://blogs.thoughtworks.com/">ThoughtBlogs</a></td>          <td>(various)</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>24</strong></td>          <td align="center">--</td>          <td><a href="http://www.shahine.com/omar/">Shanine.com / omar /</a></td>          <td>Omar Shanine</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>25</strong></td>          <td align="center">16</td>          <td><a href="http://highscalability.com/">High Scalability</a></td>          <td>(various)</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>26</strong></td>          <td align="center">77</td>          <td><a href="http://forums.construx.com/blogs/stevemcc/default.aspx">10x Software Development</a></td>          <td>Steve McConnell</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>27</strong></td>          <td align="center">24</td>          <td><a href="http://codebetter.com/">CodeBetter.Com</a></td>          <td>(various)</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>28</strong></td>          <td align="center">28</td>          <td><a href="http://blog.objectmentor.com/">Object Mentor Blog</a></td>          <td>(various)</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>29</strong></td>          <td align="center">23</td>          <td><a href="http://secretgeek.net/">secretGeek</a></td>          <td>Leon Bambrick</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>30</strong></td>          <td align="center">37</td>          <td><a href="http://dobbscodetalk.com/">Dr. Dobb's CodeTalk</a></td>          <td>(various)</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>31</strong></td>          <td align="center">--</td>          <td><a href="http://phpimpact.wordpress.com/">PHP::Impact ( [str Blog] )</a></td>          <td>Federico Cargnelutti</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>32</strong></td>          <td align="center">41</td>          <td><a href="http://management.curiouscatblog.net/">Curious Cat</a></td>          <td>John Hunter</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>33</strong></td>          <td align="center">31</td>          <td><a href="http://googletesting.blogspot.com/">Google Testing Blog</a></td>          <td>(various)</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>34</strong></td>          <td align="center">--</td>          <td><a href="http://duckdown.blogspot.com/">Enterprise Architecture: From Incite comes Insight...</a></td>          <td>James McGovern</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>35</strong></td>          <td align="center">26</td>          <td><a href="http://graysmatter.codivation.com/">Gray's Matter</a></td>          <td>Justice Gray</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>36</strong></td>          <td align="center">32</td>          <td><a href="http://alistair.cockburn.us/Blog">Alistair Cockburn</a></td>          <td>Alistair Cockburn</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>37</strong></td>          <td align="center">65</td>          <td><a href="http://www.noop.nl/">NOOP.NL: Managing Software Development</a></td>          <td>Jurgen Appelo</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>38</strong></td>          <td align="center">--</td>          <td><a href="http://www.catonmat.net/">Good coders code, great reuse</a></td>          <td>Peteris Krumins</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>39</strong></td>          <td align="center">30</td>          <td><a href="http://jrothman.com/blog/mpd/">Managing Product Development</a></td>          <td>Johanna Rothman</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>40</strong></td>          <td align="center">35</td>          <td><a href="http://stuffthathappens.com/blog/">It's Just a Bunch of Stuff That Happens</a></td>          <td>Eric Burke</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>41</strong></td>          <td align="center">--</td>          <td><a href="http://regulargeek.com/">Regular Geek</a></td>          <td>Rob Diana</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>42</strong></td>          <td align="center">46</td>          <td><a href="http://jeffsutherland.com/">Object Technology</a></td>          <td>Jeff Sutherland</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>43</strong></td>          <td align="center">57</td>          <td><a href="http://blog.softwareprojects.org/">Project Shrink</a></td>          <td>Bas de Baar</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>44</strong></td>          <td align="center">25</td>          <td><a href="http://blogs.tedneward.com/">Interoperability Happens</a></td>          <td>Ted Neward</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>45</strong></td>          <td align="center">--</td>          <td><a href="http://stevenharman.net/blog/">StevenHarman.net</a></td>          <td>Steven Harman</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>46</strong></td>          <td align="center">45</td>          <td><a href="http://jamesshore.com/Blog/">James Shore: The Art of Agile</a></td>          <td>James Shore</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>47</strong></td>          <td align="center">27</td>          <td><a href="http://blog.mountaingoatsoftware.com/">Mike Cohn's Blog: Succeeding with Agile</a></td>          <td>Mike Cohn</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>48</strong></td>          <td align="center">52</td>          <td><a href="http://tech.puredanger.com/">Pure Danger Tech</a></td>          <td>Alex Miller</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>49</strong></td>          <td align="center">--</td>          <td><a href="http://www.reformingprojectmanagement.com/">Reforming Project Management</a></td>          <td>Hal Macomber</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>50</strong></td>          <td align="center">47</td>          <td><a href="http://www.betterprojects.net/">Better Projects</a></td>          <td>Craig Brown</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>51</strong></td>          <td align="center">39</td>          <td><a href="http://www.codesqueeze.com/">{Codesqueeze}</a></td>          <td>Max Pool</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>52</strong></td>          <td align="center">43</td>          <td><a href="http://www.agilemanagement.net/Articles/Weblog/blog.html">Agile Management Blog</a></td>          <td>David Anderson</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>53</strong></td>          <td align="center">55</td>          <td><a href="http://blogs.msdn.com/micahel/">The Braidy Tester</a></td>          <td>Micahel</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>54</strong></td>          <td align="center">36</td>          <td><a href="http://onestepback.org/">{ |one, step, back| }</a></td>          <td>Jim Weirich</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>55</strong></td>          <td align="center">74</td>          <td><a href="http://www.implementingscrum.com/">Implementing Scrum</a></td>          <td>Mike Vizdos</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>56</strong></td>          <td align="center">33</td>          <td><a href="http://tynerblain.com/blog/">Tyner Blain</a></td>          <td>Scott Sehlhorst</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>57</strong></td>          <td align="center">--</td>          <td><a href="http://agiletesting.blogspot.com/">Agile Testing</a></td>          <td>Grig Gheorghiu</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>58</strong></td>          <td align="center">--</td>          <td><a href="http://www.codingthearchitecture.com/">Coding the Architecture</a></td>          <td>(various)</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>59</strong></td>          <td align="center">42</td>          <td><a href="http://www.knowing.net/">Knowing.NET</a></td>          <td>Larry O'Brien</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>60</strong></td>          <td align="center">38</td>          <td><a href="http://www.charlespetzold.com/blog/blog.xml">Petzold Book Blog</a></td>          <td>Charles Petzold</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>61</strong></td>          <td align="center">29</td>          <td><a href="http://www.satisfice.com/blog/">James Bach&#8217;s Blog</a></td>          <td>James Bach</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>62</strong></td>          <td align="center">73</td>          <td><a href="http://pyre.third-bit.com/blog/">The Third Bit</a></td>          <td>Esan</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>63</strong></td>          <td align="center">59</td>          <td><a href="http://www.agileadvice.com/">Agile Advice</a></td>          <td>(various)</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>64</strong></td>          <td align="center">53</td>          <td><a href="http://elegantcode.com/">Elegant Code</a></td>          <td>(various)</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>65</strong></td>          <td align="center">48</td>          <td><a href="http://ourfounder.typepad.com/">Evolving Web</a></td>          <td>Jim Benson</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>66</strong></td>          <td align="center">--</td>          <td><a href="http://www.softwarebyrob.com/">Software by Rob</a></td>          <td>Rob Walling</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>67</strong></td>          <td align="center">40</td>          <td><a href="http://blogcabin.37signals.com/">Signal vs. Noise</a></td>          <td>(various)</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>68</strong></td>          <td align="center">44</td>          <td><a href="http://blog.toolshed.com/">/\ndy</a></td>          <td>Andy Hunt</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>69</strong></td>          <td align="center">81</td>          <td><a href="http://www.agile-software-development.com/">All About Agile</a></td>          <td>Kelly Waters</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>70</strong></td>          <td align="center">--</td>          <td><a href="http://crazeegeekchick.com/">Crazeegeekchick.com</a></td>          <td>Dana Coffey</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>71</strong></td>          <td align="center">49</td>          <td><a href="http://memeagora.blogspot.com/">Meme Agora</a></td>          <td>Neal Ford</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>72</strong></td>          <td align="center">70</td>          <td><a href="http://herdingcats.typepad.com/">Herding Cats</a></td>          <td>Glen Alleman</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>73</strong></td>          <td align="center">--</td>          <td><a href="http://www.codeodor.com/">My Secret Life as a Spaghetti Coder</a></td>          <td>Sammy Larbi</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>74</strong></td>          <td align="center">--</td>          <td><a href="http://jeffreypalermo.com/">Jeffrey Palermo (.com)</a></td>          <td>Jeffrey Palermo</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>75</strong></td>          <td align="center">68</td>          <td><a href="http://leansoftwareengineering.com/">Lean Software Engineering</a></td>          <td>Corey Ladas</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>76</strong></td>          <td align="center">50</td>          <td><a href="http://www.ibm.com/developerworks/blogs/page/ambler">Agility@Scale</a></td>          <td>Scott W. Ambler</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>77</strong></td>          <td align="center">87</td>          <td><a href="http://agilesoftwaredevelopment.com/">Agile Software Development</a></td>          <td>(various)</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>78</strong></td>          <td align="center">--</td>          <td><a href="http://debasishg.blogspot.com/">Ruminations of a Programmer</a></td>          <td>Debasish Ghosh</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>79</strong></td>          <td align="center">51</td>          <td><a href="http://blog.davidchelimsky.net/">David Chelimsky</a></td>          <td>David Chelimsky</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>80</strong></td>          <td align="center">--</td>          <td><a href="http://www.pmthink.com/">PMThink!</a></td>          <td>(various)</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>81</strong></td>          <td align="center">60</td>          <td><a href="http://leadinganswers.typepad.com/">LeadingAnswers</a></td>          <td>Mike Griffiths</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>82</strong></td>          <td align="center">86</td>          <td><a href="http://ericbrown.com/">Aligning Technology, Strategy, People &amp; Projects</a></td>          <td>Eric Brown</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>83</strong></td>          <td align="center">92</td>          <td><a href="http://www.focusedperformance.com/blogger.html">Focused Performance</a></td>          <td>Frank Patrick</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>84</strong></td>          <td align="center">85</td>          <td><a href="http://www.chrisspagnuolo.com/">Chris Spagnuolo's EdgeHopper</a></td>          <td>Chris Spagnuolo</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>85</strong></td>          <td align="center">63</td>          <td><a href="http://wordaligned.org/">Word Aligned</a></td>          <td>Thomas Guest</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>86</strong></td>          <td align="center">84</td>          <td><a href="http://blog.cutter.com/">The Cutter Blog</a></td>          <td>(various)</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>87</strong></td>          <td align="center">72</td>          <td><a href="http://www.agiledeveloper.com/blog/">Agile Developer Venkat's Blog</a></td>          <td>Venkat Subramaniam</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>88</strong></td>          <td align="center">75</td>          <td><a href="http://www.kohl.ca/blog/">Collaborative Software Testing</a></td>          <td>Jonathan Kohl</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>89</strong></td>          <td align="center">64</td>          <td><a href="http://www.io.com/%7Ewazmo/blog/">Testing Hotlist Update</a></td>          <td>Bret Pettichord</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>90</strong></td>          <td align="center">--</td>          <td><a href="http://agileproductdesign.com/blog/">Jeff Patton's Holistic Product Design &amp; Development</a></td>          <td>Jeff Patton</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>91</strong></td>          <td align="center">83</td>          <td><a href="http://agilecommons.org/pages/home">Agile Commons</a></td>          <td>(various)</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>92</strong></td>          <td align="center">88</td>          <td><a href="http://www.clarkeching.com/">Clarke Ching - More Chilli Please</a></td>          <td>Clarke Ching</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>93</strong></td>          <td align="center">76</td>          <td><a href="http://testobsessed.com/">Test Obsessed</a></td>          <td>Elisabeth Hendrickson</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>94</strong></td>          <td align="center">--</td>          <td><a href="http://littletutorials.com/">Little Tutorials</a></td>          <td>Daniel Pietraru</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>95</strong></td>          <td align="center">79</td>          <td><a href="http://xndev.blogspot.com/">Creative Chaos</a></td>          <td>Matthew Heusser</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>96</strong></td>          <td align="center">62</td>          <td><a href="http://bit-player.org/">Bit-Player</a></td>          <td>Brian Hayes</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>97</strong></td>          <td align="center">69</td>          <td><a href="http://www.exampler.com/blog/">Exploration Through Example</a></td>          <td>Brian Marick</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>98</strong></td>          <td align="center">--</td>          <td><a href="http://www.ytechie.com/">Ytechie</a></td>          <td>Jason Young</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>99</strong></td>          <td align="center">91</td>          <td><a href="http://silkandspinach.net/">Silk and Spinach</a></td>          <td>Kevin Rutherford</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center"><strong>100</strong></td>          <td align="center">82</td>          <td><a href="http://www.wrike.com/projectmanagement.htm">Project Management 2.0</a></td>          <td>Andrew Filev</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td style="text-align: left" colspan="4">           <p><strong>Legend                <br />TT =</strong>&#160; 本次排名(Q4 2008)<strong>                <br />LT =</strong> 上次排名 (Q3 2008)               <br /><strong>--</strong> = 新入选               <br />除此之外，作者还给出了另外25个值的一读的Blog：</p>         </td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://www.notesfromatooluser.com/">Notes from a Tool User</a></td>          <td>Mark Levison</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://mendicantbug.com/">The Mendicant Bug</a></td>          <td>Jason Adams</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://www.ravensbrain.com/">Raven's Brain</a></td>          <td>Raven Young</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://www.htmlist.com/">HTMList.com</a></td>          <td>(various)</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://www.caffeinatedcoder.com/">Caffeinated Coder</a></td>          <td>Russell Ball</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://testertested.blogspot.com/">Tester Tested!</a></td>          <td>Pradeep Soundararajan</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://jchyip.blogspot.com/">You'd think with all my video game experience...</a></td>          <td>Jason Yip</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://dnicolet1.tripod.com/agile/">Effective Software Development</a></td>          <td>Dave Nicolette</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://blog.versionone.net/">Agile Chronicles</a></td>          <td>(various)</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://www.agilecmmi.com/">Agile CMMI Blog</a></td>          <td>Hillel Glazer</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://agilethinking.net/blog/">Agile Thoughts</a></td>          <td>Tobias Mayer</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://www.estherderby.com/weblog/blogger.html">Insights You Can Use</a></td>          <td>Esther Derby</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://stephan.reposita.org/">Stephans Blog</a></td>          <td>Stephan Schmidt</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://edgibbs.com/">Musings of a Software Development Manager</a></td>          <td>Ed Gibbs</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://www.leadingagile.com/">Leading Agile</a></td>          <td>Mike Cottmeyer</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://www.danappleman.com/">Kibitzing and Commentary</a></td>          <td>Dan Appleman</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://blog.brodzinski.com/">Software Project Management</a></td>          <td>Pawel Brodzinski</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://enterprisearchitect.typepad.com/ea/">Technology Architecture &amp; Projects</a></td>          <td>Robert McIlree</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://swizec.com/">Cthulhu and Other Crazies</a></td>          <td>Swizec</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://aspadvice.com/blogs/elandes/default.aspx">Corporate Coder</a></td>          <td>Eric Landes</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://www.yuwantitwhen.com/">You Want IT When?</a></td>          <td>Bill Miller</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://scalingsoftwareagility.wordpress.com/">Scaling Software Agility</a></td>          <td>Dean Leffingwell</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://pierg.wordpress.com/">PierG</a></td>          <td>Piergiorgio Grossi</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://availagility.wordpress.com/">AvailAgility</a></td>          <td>Karl Scotland</td>       </tr>        <tr style="height: 12.75pt" height="17">         <td align="center">           <br /></td>          <td align="center">&#160;</td>          <td><a href="http://adam.goucher.ca/">Quality through Innovation</a></td>          <td>Adam Goucher</td>       </tr>     </tbody></table> <br/>  <p>大家可以从这里<a href="http://nooperation.typepad.com/files/top100developmentblogsq42008.xml">下载OPML文件</a>，直接导入自己的RSS阅读器。</p>  <p>原文链接：<a href="http://www.noop.nl/2008/12/top-100-blogs-for-developers-q4-2008.html">Top 100 Blogs for Developers (Q4 2008)</a></p><img src="http://www.cnblogs.com/Terrylee/aggbug/1360040.html?type=1" width="1" height="1" alt=""/><p>评论: 39　<a href="http://www.cnblogs.com/Terrylee/archive/2008/12/22/top-100-blogs-for-developers-q4-2008.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/Terrylee/archive/2008/12/22/top-100-blogs-for-developers-q4-2008.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56857/" target="_blank">Facebook与美国在线合作 整合AIM动态功能</a><span style="color:gray">(2010-02-10 16:41)</span><br/>· <a href="http://news.cnblogs.com/n/56855/" target="_blank">NDepend 3.0已与Visual Studio集成</a><span style="color:gray">(2010-02-10 16:17)</span><br/>· <a href="http://news.cnblogs.com/n/56854/" target="_blank">Ruby in Steel 1.5发布，去除IronRuby支持</a><span style="color:gray">(2010-02-10 16:14)</span><br/>· <a href="http://news.cnblogs.com/n/56852/" target="_blank">淘宝网通过索引模式涉足网络文学</a><span style="color:gray">(2010-02-10 15:59)</span><br/>· <a href="http://news.cnblogs.com/n/56851/" target="_blank">苹果发布 iPhone/iPad SDK 3.2 beta2 开发包</a><span style="color:gray">(2010-02-10 15:37)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/news/tag/Buzz/" target="_blank">Google Buzz相关新闻</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>应用程序架构指导袖珍版</title><link>http://www.cnblogs.com/Terrylee/archive/2008/12/08/Application-Architecture-Pocket-Guides.html</link><dc:creator>TerryLee</dc:creator><author>TerryLee</author><pubDate>Sun, 07 Dec 2008 16:33:00 GMT</pubDate><guid>http://www.cnblogs.com/Terrylee/archive/2008/12/08/Application-Architecture-Pocket-Guides.html</guid><description><![CDATA[<p>阅读: 14545 评论: 35 作者: <a href="http://www.cnblogs.com/Terrylee/" target="_blank">TerryLee</a> 发表于 2008-12-08 00:33 <a href="http://www.cnblogs.com/Terrylee/archive/2008/12/08/Application-Architecture-Pocket-Guides.html" target="_blank">原文链接</a></p><p>微软模式与实践小组最近发布了应用程序架构指导袖珍版本，总共有6本，分别介绍了不同类型应用程序的架构指导，包括敏捷架构方法、Mobile应用程序、RIA应用程序、富客户端应用程序、Web应用程序以及Service架构等，非常值得一看。</p> <h2>1. 敏捷架构方法</h2> <p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="195" alt="App_Guide_Agile" src="http://www.cnblogs.com/images/cnblogs_com/Terrylee/WindowsLiveWriter/edfad4bab8ac_14753/App_Guide_Agile_3.png" width="150" border="0"> </p> <p><a href="http://www.codeplex.com/AppArch/Release/ProjectReleases.aspx?ReleaseId=19797">下载指导</a></p> <h2>2. Web引用架构</h2> <p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="195" alt="App_Guide_Web" src="http://www.cnblogs.com/images/cnblogs_com/Terrylee/WindowsLiveWriter/edfad4bab8ac_14753/App_Guide_Web_3.png" width="150" border="0"> </p> <p><a href="http://www.codeplex.com/AppArch/Release/ProjectReleases.aspx?ReleaseId=19802">下载指导</a></p> <h2>3. 移动应用架构</h2> <p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="194" alt="App_Guide_Mobile" src="http://www.cnblogs.com/images/cnblogs_com/Terrylee/WindowsLiveWriter/edfad4bab8ac_14753/App_Guide_Mobile_3.png" width="150" border="0"> </p> <p><a href="http://www.codeplex.com/AppArch/Release/ProjectReleases.aspx?ReleaseId=19798">下载指导</a></p> <h2>4. RIA架构</h2> <p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="194" alt="App_Guide_RIA" src="http://www.cnblogs.com/images/cnblogs_com/Terrylee/WindowsLiveWriter/edfad4bab8ac_14753/App_Guide_RIA_3.png" width="150" border="0"> </p> <p><a href="http://www.codeplex.com/AppArch/Release/ProjectReleases.aspx?ReleaseId=19799">下载指导</a></p> <h2>5. 富客户端架构</h2> <p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="195" alt="App_Guide_RCA" src="http://www.cnblogs.com/images/cnblogs_com/Terrylee/WindowsLiveWriter/edfad4bab8ac_14753/App_Guide_RCA_3.png" width="150" border="0"> </p> <p><a href="http://www.codeplex.com/AppArch/Release/ProjectReleases.aspx?ReleaseId=19800">下载指导</a></p> <h2>6. 服务架构</h2> <p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="194" alt="App_Guide_Service" src="http://www.cnblogs.com/images/cnblogs_com/Terrylee/WindowsLiveWriter/edfad4bab8ac_14753/App_Guide_Service_3.png" width="150" border="0"> </p> <p><a href="http://www.codeplex.com/AppArch/Release/ProjectReleases.aspx?ReleaseId=19801">下载指导</a></p><img src="http://www.cnblogs.com/Terrylee/aggbug/1349845.html?type=1" width="1" height="1" alt=""/><p>评论: 35　<a href="http://www.cnblogs.com/Terrylee/archive/2008/12/08/Application-Architecture-Pocket-Guides.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/Terrylee/archive/2008/12/08/Application-Architecture-Pocket-Guides.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56857/" target="_blank">Facebook与美国在线合作 整合AIM动态功能</a><span style="color:gray">(2010-02-10 16:41)</span><br/>· <a href="http://news.cnblogs.com/n/56855/" target="_blank">NDepend 3.0已与Visual Studio集成</a><span style="color:gray">(2010-02-10 16:17)</span><br/>· <a href="http://news.cnblogs.com/n/56854/" target="_blank">Ruby in Steel 1.5发布，去除IronRuby支持</a><span style="color:gray">(2010-02-10 16:14)</span><br/>· <a href="http://news.cnblogs.com/n/56852/" target="_blank">淘宝网通过索引模式涉足网络文学</a><span style="color:gray">(2010-02-10 15:59)</span><br/>· <a href="http://news.cnblogs.com/n/56851/" target="_blank">苹果发布 iPhone/iPad SDK 3.2 beta2 开发包</a><span style="color:gray">(2010-02-10 15:37)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/news/tag/Buzz/" target="_blank">Google Buzz相关新闻</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item></channel></rss>