﻿<?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>博客园-精华区</title><link>http://www.cnblogs.com/pick/</link><description>专注于.NET技术</description><language>zh-cn</language><lastBuildDate>Sat, 26 Jul 2008 02:44:03 GMT</lastBuildDate><pubDate>Sat, 26 Jul 2008 02:44:03 GMT</pubDate><ttl>60</ttl><item><title>如何提高IT团队的执行力？</title><link>http://www.cnblogs.com/invinboy/archive/2008/07/15/1243078.html</link><dc:creator>Goumh</dc:creator><author>Goumh</author><pubDate>Tue, 15 Jul 2008 00:45:00 GMT</pubDate><guid>http://www.cnblogs.com/invinboy/archive/2008/07/15/1243078.html</guid><wfw:comment>http://www.cnblogs.com/invinboy/comments/1243078.html</wfw:comment><comments>http://www.cnblogs.com/invinboy/archive/2008/07/15/1243078.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.cnblogs.com/invinboy/comments/commentRss/1243078.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/invinboy/services/trackbacks/1243078.html</trackback:ping><description><![CDATA[摘要: 要提高一个团队执行力，首先要让战士爱打仗，要用各种方法调动员工的积极性。其次，要让战士会打仗，要通过持续的练兵提高员工的综合素质和专业素质。最后是决策者训练队伍的作战有序性----柳传志&nbsp;&nbsp;<a href='http://www.cnblogs.com/invinboy/archive/2008/07/15/1243078.html'>阅读全文</a><img src ="http://www.cnblogs.com/invinboy/aggbug/1243078.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41313/" target="_blank">[新闻]微软推新型搜索技术"BrowseRank"挑战谷歌</a>]]></description></item><item><title>选择程序员，爱上程序员---做一个骄傲的程序员的女人</title><link>http://www.cnblogs.com/zhangpingcass/archive/2008/07/13/1242080.html</link><dc:creator>程序员的女人</dc:creator><author>程序员的女人</author><pubDate>Sun, 13 Jul 2008 15:12:00 GMT</pubDate><guid>http://www.cnblogs.com/zhangpingcass/archive/2008/07/13/1242080.html</guid><wfw:comment>http://www.cnblogs.com/zhangpingcass/comments/1242080.html</wfw:comment><comments>http://www.cnblogs.com/zhangpingcass/archive/2008/07/13/1242080.html#Feedback</comments><slash:comments>208</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhangpingcass/comments/commentRss/1242080.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhangpingcass/services/trackbacks/1242080.html</trackback:ping><description><![CDATA[摘要: 这个世界，有多少名程序员，就有多少个女孩要或即将要扮演程序员的女人的角色。我想说的是，既然选择，既然决定相爱相伴相知相偎，就好好的爱我们可爱的程序员，给予更多的理解、支持和关爱，优秀的程序员身上，真的有一种无穷的魅力！同样，这样可爱的女人伴你左右，也值得程序员用一生去呵护！&nbsp;&nbsp;<a href='http://www.cnblogs.com/zhangpingcass/archive/2008/07/13/1242080.html'>阅读全文</a><img src ="http://www.cnblogs.com/zhangpingcass/aggbug/1242080.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41312/" target="_blank">[新闻]2008年7月26日IT博客精选</a>]]></description></item><item><title>爆牙齿饭否？</title><link>http://www.cnblogs.com/yuntian/archive/2008/07/07/849035.html</link><dc:creator>爆牙齿</dc:creator><author>爆牙齿</author><pubDate>Mon, 07 Jul 2008 02:19:00 GMT</pubDate><guid>http://www.cnblogs.com/yuntian/archive/2008/07/07/849035.html</guid><wfw:comment>http://www.cnblogs.com/yuntian/comments/849035.html</wfw:comment><comments>http://www.cnblogs.com/yuntian/archive/2008/07/07/849035.html#Feedback</comments><slash:comments>16</slash:comments><wfw:commentRss>http://www.cnblogs.com/yuntian/comments/commentRss/849035.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/yuntian/services/trackbacks/849035.html</trackback:ping><description><![CDATA[<p style="color:red">此文为回锅文，写于2007-08-09 12:05。</p>
<hr />
<h3>初识饭否</h3>
<p>很早以前就听说了twitter，不以为然。四月我刚刚加入海词的时候，刘勇又大力给我宣传了twitter，介绍了twitter和facebook在美国的火爆，而我仍然不以为然。facebook是SNS，SNS我有我独立的想法，看了一下并不相同，自然就放弃关注，任它火爆我自不动。twitter我也没应用，自然不能理解它的意义所在，单纯的从一句句看似的废话中感觉挺无聊的。以至于后来模仿者饭否在国内上线并迅速刮起一阵旋风，而我仍然站得远远的，只听风声却无视。</p>
<p>两天前我偶然用上了饭否。注册的动机是这样的，杨磊给我说在饭否上嗷嗷和彭毅说到了我还有出书，他转述得模糊却勾起了我的好奇心，于是决定注册饭否看看到底说些什么。注册好了，搜索嗷嗷，加为好友，屏幕显示嗷嗷也加我为好友了，真奇怪，屏幕继续显示，杨磊和怿飞立刻把我加为好友了，他们怎么知道我注册了？当然，很快我就反应过来，嗷嗷、杨磊、怿飞互为好友，而好友的操作是能被即时看见的，所以嗷嗷加我这一动作瞬间，就传给了他的每一个好友。原来如此……这种传播方式……真有点病毒……</p>
<p>最初的使用过程并没有让我觉得多么的与众不同，我绑定了MSN/GTalk。是的，信息的发布和接受通过最常用最习惯的即时通讯软件完成，非常便利，又怎么样呢？这种模式的意义，和即时通讯相比好像没太大进步，整个下午一直迷惑的我在当天下午下班前绑定了手机，而当我坐在的士上拿出手机饭否的时候，我对饭否的态度来了一个5255B向后翻腾两周半转体两周半屈体。</p>
<h3>理解饭否</h3>
<p>下面这段话是当时通过手机短信记录到饭否上的：
<blockquote>
坐在的上，带着产品详细设计文档正赶往西湖天地一茶一坐，海词第二次聚会。当我写下上面的话，一下理解了为什么twitter会那么火，这是我第一次在离开电脑离开有线无线网络情况下，又如此方便的使用互联网记录我的生活，感谢饭否感谢杨磊。好了到了，沿湖漫步过去，夕阳很美我很帅。2007-08-07 18:41 通过短信 分享 删除
</blockquote>
</p>
<p>是的，当我使用手机坐在的上，通过最常用的发短信方式记录自己的心态、感受已经正在做的事情，并且能够第一时间的分享给我的好友，我才真正理解了twitter这个创意的精妙和价值。剩下的就是拍手叫绝，强烈地感受到互联网离我很远却又很近，朋友离我很远却又很近。互联网终于开始离开有线离开无线离开电脑开始逐步渗透进日常生活中。从台式机的网线进化到笔记本的无线再进化到手机的GPRS，现在普通的短信也融进互联网了。合网的威力真不一般。曾经的三网合一，如今第一次从日常应用中开始感受到。</p>
<h3>我们需要记录吗？</h3>
<p>使用饭否的第二天我就当了一次饭否推广者，在大学班群里大力推广，但因为只有我一个人在互联网里，所以大家都不为所动不能理解，争论的中心是这些无聊的话为什么要记录，说完就完了呗，记录毫无意义。直到最后我说出记录的目的之一是分享，他们说为什么要分享？我发现互联网外的人们对分享二字真的缺乏理解，分享的理念非常单薄，其实这点我早早就有很强烈的感受。常常听到的就是“这些多无聊”，“我没什么可分享的”，“这是我的隐私”等等。很多人低估了自己的力量，不知道自己是可以给身边的人带去很多的欢乐的，是可以为身边的人分担很多的烦恼的。</p>
<p>说到这里我想起我的中学时代，那个疯狂追星的时代，四大天王红遍整个大陆的时代，当年有一部电影用夸张的手法描述，一个蜂拥的人群中几个人高高站着，摇着手中的商品：“卖刘德华的内裤啊”，“张学友穿过的拖鞋，谁要啊？”，“黎明的头发！”，“郭富城擦过鼻涕的手纸，抢啊！”。明星是被关注的，一言一行都被追捧。过去是这样，十多年过去了，现在仍是这样，韩寒博客敲上一个点，都上万的人蜂拥而入，成千的评论产生。这很正常，但是很多人忽略了一点，忘记了一点，那就是不是只有明星才会被关注才会被追捧，实际上每一个人，每一个个体都是明星，都在关注和被关注中，都在追捧和被追捧中，只是程度不一样而已。你难道不关注你父母的一言一行？难道你的一言一行不被你的父母所关注？难道你不关注你的家人而又不被你的家人所关注？难道你不关注你的朋友而又不被你的朋友所关注？难道你不关注你的身边而又不被你的身边所关注？</p>
<p>当然，顺手抨击一下现在金钱至上的社会，很多人关心的重心最终还是落在金钱上，哪怕是对父母的关注，这种已经变态的心态我不想多说了，口头禅：钱是TMD王八蛋。还是回题。我们常常关注也被关注着，问题来了，我们不是明星，我们身边的人也不是明星，没有传媒为我们传播，又常常的，亲人好友，我们眼中平凡的“明星们”散落五湖四海，那么如何关注又如何被关注？<strong>答案是：记录。</strong>于是，博客来了，使得人们能够方便的记录自己，让朋友更方便的关注自己，让自己更方便的关注朋友。但是博客的弊端也很明显，博客是以文章为记录和分享单位，而文章这两个字就具备很高的门槛，于是善于写文的人疯狂的爱上了博客成为被关注者，而不善于写文的人则远离成为一名关注者。很显然大部分的人并不善于写文，于是博客本来想完成的任务，人人记录，人人都被关注如落花流水，最终变成了精英记录，大众关注。</p>
<p>大众仍然没有被关注。我常常写博，我的亲人朋友能够很方便的了解我的情况，我的动向，我的心态。但我，我想了解他们的时候，想知道他们近况的时候，我找不到办法，因为他们都不写博，都不记录。我最好的兄弟生了一个女儿，他兴高采烈的群发短信告知每个好友，并且后来在QQ空间上记录下每一天他整个心情波动，我非常高兴的分享了他的快乐，他通过记录把快乐传递给了我。但是不是只有大事才值得记录，小事也是值得记录的。所以在2005年底我开始构思我自己的SNS，是的，我第一份整体规划文档仍保留在，时间是2005年12月31日。一年后，2006-12-03 21:27，我又给数个远远近近的好友详细的描绘了我的伟大SNS。摘其中和本文主题相关的一段：
<blockquote>
然后说说关于流水帐，流水帐有价值和意义吗？还是举个例子吧，一句典型的流水帐：“今天，我摔了一跤。”这句话有价值嘛？有意义嘛？如果写下它的人和你毫不相干，你肯定也毫不在意。但如果是你的朋友，我想或许你会留言关心一下“没摔伤吧”，又或者调侃一下“爽不爽”“活该你倒霉”之类。而如果是你的父母写下这么一句流水帐，恐怕就惊天动地了，你会马上抓起电话。流水帐和作文不一样，它的价值不在于文章本身是否写的够精彩、文笔是否够华丽，而在于首先对于作者，它留住了时间，见证了成长的历程。而对于有心的读者，它是一次闲聊式的交流。想想看，朋友之间的闲聊什么时候文绉绉的精彩和华丽？还不都是口水话，还不都是嘻笑打骂，还不都是各自的生活流水帐，一起分享和分担。
</blockquote>
</p>
<p>是的，我觉得记录另一个更重要的作用是让时间停止。你知道去年的此时此刻在做什么吗？当然会有人说没意义，我们应该向前看。是是是，我们应该向前看，但如果我告诉你我有你六年前你的生活记录，你想不想看看六、七年前的自己呢？你现在有办法看见六、七年前的自己吗？我有！我能看见六七年前的自己和我的朋友！</p>
<p>从2000开始我就一个QQ文件夹随身带，升级也只是覆盖，于是我几乎完整的保存了从那时开始我的所有聊天记录，我不但能从我和每个人的聊天内容中看见过去的自己，还能看见过去的朋友。我QQ上的朋友如果愿意可以向我索取过去，如果我们曾经聊过，有关生活的，有关情感的，有关生活的滴滴点点。或许还是有人觉得没意义，比如我的一些大学同学，那么如果我能把十多年前我们在寝室里彻夜疯聊的记录还原出来，你还觉得没意义吗？但是我做不到，那个时候记录的手段太单一太刻意，但是我现在至少可以去为明天的温馨回忆而刻下今天的记录！</p>
<p>所以，饭否，哦不，应该是twitter，它成功的做出来了，甚至在这点上比我所构思的做得更好，更极致，我很高兴。如果有人纳闷：“MD，自己搞不出来还高兴。”我笑着对你说：“学会欣赏，不要心中只存嫉妒。”我一直有点拿捏不准自己的构思是否会如我想像的那样，现在我了解了twitter，它给我打了一针定心剂，甚至让我相信自己设计的的传播模式比他更进一步，更病毒，并由点及面更加强了我其他方面构思的信心。入口一样，但是大方向和目标及终点目前看来并不一样，即便一样，我仍然要为twitter鼓掌！也为饭否鼓掌！</p>
<h3>不是QQ群</h3>
<p>QQ群是腾讯的成功也是失败，成功的是让我们脱离了即时通讯单调的1V1模式，有了疯狂NVN的选择。失败的是它站在它的辉煌上，多年以来一直停滞不前。</p>
<p>交流是一切和SNS沾边应用的核心，可以说没有交流就没有SNS，交流的方式两种：聊天和分享记录。已经长篇大论了，详细的不展开了，还是回题。QQ群是以主题聚集人，比如班群，旅游群，泡吧等，以主题为中心就意味着个人的埋没，因为在个人之上是主题，主题凌驾于个人，一个不泡吧的人肯定不会进入吧群中。而twitter模式的聚集是以个人为中心展开，我不认识你？对不起，你不属于我的“群”。在twitter模式中，每个人都有一个属于自己的群，由自己建立也由自己管理。</p>
<p>为了写完，长话短说，点到为止了。</p>
<h3>不是聊天室</h3>
<p>QQ群是建立在即时通讯上的聊天室。和遍地都是的网页聊天室以及QQ自身的聊天室系统相比，QQ群依靠客户端对个人有所绑定。但是……QQ群火爆的背后是什么？</p>
<p>你加入了多少群？来来往往，你留下了什么？我加入的所有群都设置成“消息来时之显示消息数目”，连离我最近的，每个人都认识的班群都如此，剩下乱七八糟的群更不说了。和我一样的人有多少？我想，遍地都是。当然我不否认仍有一大群闲人们就泡在里面疯聊。为什么要设置？</p>
<h3>不是论坛</h3>
<hr />
<p style="color:red">温习一遍后，发现最终还是没写完。回头温习了一下我的饭否，2007年8月7日开始，一共废了757条话，很长一段时间，只绑定了手机的弟弟给我说他要疯了，每天要收到我十多条饭否废话短信。现在很少饭否了，饭否不能导出记录让我这个记录收藏者很不爽，缺乏安全感，而且我觉得一年多来，饭否停滞了，没有质变，缺乏深入的挖掘和发展，所以还是回到blog。博客园能够导出所有文章，保存在本地备份，对我来说，倍儿安全，这是我四年如一日留在博客园的原因之一。</p><img src ="http://www.cnblogs.com/yuntian/aggbug/849035.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41311/" target="_blank">[新闻]微软每年向Apache捐10万美元支持开源软件</a>]]></description></item><item><title>关于创业</title><link>http://www.cnblogs.com/perhaps/archive/2008/07/03/1234430.html</link><dc:creator>FantasySoft</dc:creator><author>FantasySoft</author><pubDate>Wed, 02 Jul 2008 19:34:00 GMT</pubDate><guid>http://www.cnblogs.com/perhaps/archive/2008/07/03/1234430.html</guid><wfw:comment>http://www.cnblogs.com/perhaps/comments/1234430.html</wfw:comment><comments>http://www.cnblogs.com/perhaps/archive/2008/07/03/1234430.html#Feedback</comments><slash:comments>73</slash:comments><wfw:commentRss>http://www.cnblogs.com/perhaps/comments/commentRss/1234430.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/perhaps/services/trackbacks/1234430.html</trackback:ping><description><![CDATA[<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp; 从2004年注册了博客园的帐号以来，每天上来园子看看是偶上网的习惯，这已经延续了整整四年。在这四年里，我经历了很多很多的事情，有过每个月几乎天天发文的疯狂，也有过沉寂数月的倦怠，不管怎样，这个习惯一直都没有改变。因为，我已经离不开这里，习惯已经成为了自然。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp; 四年了，我在博客园里认识了很多朋友，自己也有幸成为了2006年度的MVP，接着也就是在2006年走上了漫漫创业之路。而博客园从一个默默无闻的技术小站到现在成为国内极具影响力的技术博客，我们可敬的园主<a href="http://dudu.cnblogs.com/" target="_blank">dudu</a>这一路走来，也颇为不易。我想，dudu一直都在为自己的理想而奋斗着，园里很多创业的朋友也都胸怀做一番事业的理想。那么，<strong>如何实现自己的理想，如何让自己的事业能够沿着理想的路径前进</strong>呢？这应该都是你我每天都在思考的问题吧。在过去的两年里，我经历了&#8220;离开世界500强企业 -&gt; 创业 -&gt; 创业失败 -&gt; 再创业&#8221;，没啥经验，只有教训，就写下来博各位一哂了。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 我想说的第一点就是<strong>放下理想</strong>。作为一个昔日的IT人（将来还会回归IT），我很清楚IT人最大的优点就是充满激情，充满理想。而这个优点往往又是一个劣势，我想这都是互联网犯的美丽错误，让我们都错误地认为自己的产品所面对的消费群体就是全世界。当想象着自己的杰作能够被世人所欣赏，这种成就感是不可比拟的。但是，这只是一个理想，或者说一个由idea构造起来的理想。IT人是充满想象力了，因为我们通过网络了解到很多身边不存在的事物，这开拓了视野，也增长了的见识，让我们敢于去想象。想象并不是坏事，如果想象的东西都不着边际，不停地喊口号，那就糟糕了。曹操作为一代枭雄，他也只是喊出了&#8220;宁可我负天下人，不可天下人负我&#8221;的口号，也没见他怎么提过要一统天下。所以，每当为自己的idea、自己的理想激动不已的时候，请保持冷静，因为那可能只是镜花水月而已，甚至连自己都不知道通向成功的第一步该如何去走。<strike>荀子</strike><strong>老子</strong>告诉我们说：&#8220;千里之行，始于足下。&#8221;，这句话是什么意思呢？说白了就是通向成功第一步的可行性。连第一步都不知道怎么走，想着遥远的未来又有何用？<strong>我们每个人都应该有理想，但是最需要考虑的还是所迈出的第一步</strong>吧。毕竟路漫漫其修远兮，看看咱们园子里最早的老朋友<a href="http://teddyma.cnblogs.com/" target="_blank">Teddy</a>、<a href="http://allenlooplee.cnblogs.com/" target="_blank">Allen Lee</a>、<a href="http://shanyou.cnblogs.com/" target="_blank">善友</a>、<a href="http://oldswallow.cnblogs.com/" target="_blank">老燕</a>、<a href="http://thinhunan.cnblogs.com/" target="_blank">THIN</a>、<a href="http://wayfarer.cnblogs.com/" target="_blank">张逸</a>、<a href="http://terrylee.cnblogs.com/" target="_blank">TerryLee</a>、<a href="http://lovecherry.cnblogs.com/" target="_blank">lovecherry</a>、<a href="http://zhenyulu.cnblogs.com/" target="_blank">吕震宇</a>，还有后起之秀<a href="http://dflying.cnblogs.com/" target="_blank">Dflying Chen</a>、<a href="http://jeffreyzhao.cnblogs.com/" target="_blank">老赵</a>、<a href="http://anytao.cnblogs.com/" target="_blank">anytao</a>、<a href="http://cj723.cnblogs.com/" target="_blank">伍迷</a>，直到现在的<a href="http://1-2-3.cnblogs.com/" target="_blank">1-2-3</a>、<font face="Verdana"><a href="http://gpcuster.cnblogs.com/" target="_blank"><font face="Verdana">逖靖寒</font></a>等等（还有很多很多朋友，无法一一细数了），</font>我想各位就应该明白这坚实的第一步的意义在哪里了。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp; 我想说的第二点就是<strong>抛弃所谓的英雄主义</strong>。IT业界充斥着太多英雄主义的故事了，从刚刚退休的Bill Gates到Apple的Steve Jobs，哪位不是咱们崇拜的英雄呢？但是，你是否听过Bill Gates被反垄断诉讼搞得焦头烂额的时候，是Steve Ballmer为他主持大局的故事呢？也是否听过Bill Gates为了挖来C#之父Anders Hejlsberg，亲自与他共进晚餐，许诺让他带领开发团队才&#8220;抱得牛人归&#8221;的故事呢？每一位实现理想的人都不会是光棍司令，而是能够用命三军的首领。刘备是三分天下得其一的英雄，他自己根本比不上曹操那么牛，但是他的手下呢？都是我们玩游戏时候最喜欢用的五虎将，还有像神一样的诸葛亮。成就理想是不能靠单打独斗的，是需要团队的。我们不能够只笼络能够谈得来的伙计，而排斥那些提出不同意见的诤友。要开拓事业，我们需要的是团队精神，而不是英雄主义。<br />
</font><font face="Verdana"><br />
&nbsp;&nbsp;&nbsp;&nbsp; 我想说的最后一点就是<strong>热爱自己手头上的工作</strong>。IT界同样流传着很多牛人为了创业而辍学的故事，而且他们大学专业大多学的不是计算机。Bill Gates学的是法律，Michael Dell学的是医学，Steve Jobs学的甚至是属于艺术范畴的字体设计。他们为了自己热爱的IT事业选择了放弃学业。这看起来，放弃似乎也是成就理想的必备条件之一了。让我们再看看现在的IT行业，流动性是何其之高，就连我自己都在短短三年内换了两家公司，然后从公司出来和朋友创建了一家IT公司，最后创业失败，接着暂时离开IT行业。这些英雄们的故事给了我们太多放弃的理由，但是，他们之前所学的专业都为日后的成就起到了不可磨灭的作用。Bill Gates如愿逃过了反垄断的诉讼、Michael Dell最早把自己组装的电脑卖给了医生、Steve Jobs让Apple的产品在设计上无人能敌，这些事实都说明了学到的东西总会有派上用场的时候。一项工作哪怕再枯燥乏味都有它的内涵和外延，就看你是否热爱它。对待手头上的工作，我们还是得学习雷锋的精神——干一行，爱一行，在工作中积累足够的经验，为将来的事业打好基础。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 夜已深了，想想又到了凤凰花开时，回想五年前，自己踌躇满志走出校园的时候，我也曾告诉同窗好友说：&#8220;等着吧，我也要成为MVP，我也要到微软去工作。&#8221;而现在，我只实现了第一句话。至于第二句话，不仅我与机会失之交臂，没能实现之，同时这也不再成为自己的理想了。再多的理想都要付诸行动，&#8220;少谈些理想，多做些实事&#8221;是我现在的座右铭，希望与各位园友共勉之。</font></p>
<img src ="http://www.cnblogs.com/perhaps/aggbug/1234430.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41310/" target="_blank">[新闻]AOL将关闭3个网站以降低成本 集中发力广告</a>]]></description></item><item><title>做快乐的程序员 - 在淘宝网的一次讲座</title><link>http://www.cnblogs.com/leadzen/archive/2008/06/23/1227944.html</link><dc:creator>李战</dc:creator><author>李战</author><pubDate>Mon, 23 Jun 2008 03:41:00 GMT</pubDate><guid>http://www.cnblogs.com/leadzen/archive/2008/06/23/1227944.html</guid><wfw:comment>http://www.cnblogs.com/leadzen/comments/1227944.html</wfw:comment><comments>http://www.cnblogs.com/leadzen/archive/2008/06/23/1227944.html#Feedback</comments><slash:comments>83</slash:comments><wfw:commentRss>http://www.cnblogs.com/leadzen/comments/commentRss/1227944.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/leadzen/services/trackbacks/1227944.html</trackback:ping><description><![CDATA[摘要: 有幸去了淘宝网参观和学习，与淘宝网和阿里软件的众多大侠进行了交流，收获颇多。<br>先发一个给淘宝那些年轻程序员的一个讲话稿，题目有点虚，叫《做快乐的程序员》。<br>纯粹忽悠，希望大家喜欢。<br>&nbsp;&nbsp;<a href='http://www.cnblogs.com/leadzen/archive/2008/06/23/1227944.html'>阅读全文</a><img src ="http://www.cnblogs.com/leadzen/aggbug/1227944.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41309/" target="_blank">[新闻]谷歌网页索引数量突破1万亿个</a>]]></description><enclosure url="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;Editor$Edit$lkbDraft&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))" type="audio/mpeg" /></item><item><title>web开发,我们是否应该更加Deep Inside了？</title><link>http://www.cnblogs.com/fanweixiao/archive/2008/06/23/1227841.html</link><dc:creator>new 维生素C.net()</dc:creator><author>new 维生素C.net()</author><pubDate>Sun, 22 Jun 2008 16:51:00 GMT</pubDate><guid>http://www.cnblogs.com/fanweixiao/archive/2008/06/23/1227841.html</guid><wfw:comment>http://www.cnblogs.com/fanweixiao/comments/1227841.html</wfw:comment><comments>http://www.cnblogs.com/fanweixiao/archive/2008/06/23/1227841.html#Feedback</comments><slash:comments>44</slash:comments><wfw:commentRss>http://www.cnblogs.com/fanweixiao/comments/commentRss/1227841.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/fanweixiao/services/trackbacks/1227841.html</trackback:ping><description><![CDATA[摘要: 这里所说的web,特指large scale web,大规模,高负载,高并发是它最显著的特点.技术应该是没有界线的,就像微软也从不排斥其他技术一样.写这篇blog希望更多的可以让园友们看到基于.net的web开发上的一些死角和一些固定思路...&nbsp;&nbsp;<a href='http://www.cnblogs.com/fanweixiao/archive/2008/06/23/1227841.html'>阅读全文</a><img src ="http://www.cnblogs.com/fanweixiao/aggbug/1227841.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41308/" target="_blank">[新闻]预装 Ubuntu 8.04 的 Dell 笔记本发售</a>]]></description></item><item><title>大型互联网网站架构心得之二：并、换和其它</title><link>http://www.cnblogs.com/lovecherry/archive/2008/06/22/1227546.html</link><dc:creator>lovecherry</dc:creator><author>lovecherry</author><pubDate>Sun, 22 Jun 2008 02:19:00 GMT</pubDate><guid>http://www.cnblogs.com/lovecherry/archive/2008/06/22/1227546.html</guid><wfw:comment>http://www.cnblogs.com/lovecherry/comments/1227546.html</wfw:comment><comments>http://www.cnblogs.com/lovecherry/archive/2008/06/22/1227546.html#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovecherry/comments/commentRss/1227546.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovecherry/services/trackbacks/1227546.html</trackback:ping><description><![CDATA[摘要: 上次说的“分”是一个比较大的原则也是一个比较高层的原则，这次我想说一下其它两个原则：并与换。&nbsp;&nbsp;<a href='http://www.cnblogs.com/lovecherry/archive/2008/06/22/1227546.html'>阅读全文</a><img src ="http://www.cnblogs.com/lovecherry/aggbug/1227546.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41307/" target="_blank">[新闻]金山:360的免费杀毒只能是短期行为</a>]]></description></item><item><title>大型互联网网站架构心得之一：分</title><link>http://www.cnblogs.com/lovecherry/archive/2008/06/18/1224496.html</link><dc:creator>lovecherry</dc:creator><author>lovecherry</author><pubDate>Wed, 18 Jun 2008 03:22:00 GMT</pubDate><guid>http://www.cnblogs.com/lovecherry/archive/2008/06/18/1224496.html</guid><wfw:comment>http://www.cnblogs.com/lovecherry/comments/1224496.html</wfw:comment><comments>http://www.cnblogs.com/lovecherry/archive/2008/06/18/1224496.html#Feedback</comments><slash:comments>58</slash:comments><wfw:commentRss>http://www.cnblogs.com/lovecherry/comments/commentRss/1224496.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lovecherry/services/trackbacks/1224496.html</trackback:ping><description><![CDATA[摘要: 我们知道，对于一个大型网站来说，可伸缩性是非常重要的，怎么样在纵向和横向有良好的可伸缩性，就需要在做架构设计的时候考虑到一个分的原则，我想在多个方面说一下怎么分&nbsp;&nbsp;<a href='http://www.cnblogs.com/lovecherry/archive/2008/06/18/1224496.html'>阅读全文</a><img src ="http://www.cnblogs.com/lovecherry/aggbug/1224496.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41306/" target="_blank">[新闻]江民科技回应杀毒软件免费说 没病不能乱吃药</a>]]></description></item><item><title>程序员的恐惧……</title><link>http://www.cnblogs.com/dingxue/archive/2008/06/01/1211591.html</link><dc:creator>丁学</dc:creator><author>丁学</author><pubDate>Sun, 01 Jun 2008 05:37:00 GMT</pubDate><guid>http://www.cnblogs.com/dingxue/archive/2008/06/01/1211591.html</guid><wfw:comment>http://www.cnblogs.com/dingxue/comments/1211591.html</wfw:comment><comments>http://www.cnblogs.com/dingxue/archive/2008/06/01/1211591.html#Feedback</comments><slash:comments>64</slash:comments><wfw:commentRss>http://www.cnblogs.com/dingxue/comments/commentRss/1211591.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/dingxue/services/trackbacks/1211591.html</trackback:ping><description><![CDATA[<p style="color:#963;">我见过一些人，他们通常强调尽可能简单，但若事情突然变得比他们预期的还要简单很多，他们就开始感到不适，甚至拒绝接受这种简单，其实即使事物的发展方向和你的前进方向相一致，但如果发展速度大大超越了你，仍然有可能引发你内心对失控的恐惧。<div style="text-indent:6em;">----引用自<a href="http://www.cnblogs.com/allenlooplee/archive/2008/06/01/1211520.html" target="_blank">我眼中的C# 3.0 (Allen Lee)</a></div></p>

<p>每一个程序员都希望工具能够更进步，能够更好的服务自己，好让自己少加一些班，但是一旦它真的变好，好到自己已经感觉不可控，那么一种恐惧感便油然而生，随之而来的是不屑、挑刺、贬低、迷茫、无所适从，甚至恶意攻击、无端谩骂等等……</p>

<p>就像当年Java初入世，那些C/C++的元老们一样：<span style="color:#963;">Java只能用来在页面上用applet作一些可笑的小动画，Java只能对对火柴棍排序，Java慢得像牛车，Java有内存泄露，Java狂耗内存，Java愚蠢的弱类型容器可以把鲸鱼装进一个笔筒，Java居然没有指针，Java做不了系统程序设计，Java写不了操作系统，Java解决不了我手头的超超级复杂的巨牛无比的难题(<a href="http://blog.csdn.net/myan/archive/2006/09/25/1281151.aspx" target="_blank">孟岩</a>)</span>云云，当然亦如如今Java/.Net元老们对待动态语言态度一样。</p>

<p>没有什么一出世就是完美的，但也没有什么可以一直完美下去，抵制，只因为习惯，只因为恐惧，习惯于写N长的代码去解决一个问题，恐惧于别人两行代码代替了自己2000行的功能，习惯于自己是公司的元老是大牛，恐惧于一个初生牛犊解决了自己长久以来难以解决的问题…… 因为抵制，由此产生的攻击，如此说来，这也算是一种进步，一个新兴的东西，有这些抵制者来发现问题，才会更好的在下一步解决问题，以更好的替代。</p>

<p>由此想来，为什么程序员总是很累？虽然加班经常，但还不至于天天都晚上十点还要搬砖垒墙，虽然压力偏大，也还不至于头一天陪客户蹦迪到凌晨4点，早晨8点还得西装领带满脸笑容神采奕奕去见另一个客户，虽然挣钱无多，怕也不至于到过年回家时还要追着老板要路费。可是依然感觉累，周末睡了两天，周一早晨依然没有精神，于是，要找个替罪羊，总不能就这样不明不白的累了吧？怪老板，老板天天给我们N多任务，压得我们喘不过气，可是老板发我们钱，万一他不爽我们就惨了，所以想想，还是忍了吧；怪PM，他总看我不顺眼，啥事儿都让我干，还处处给我小鞋儿，不行，如果他在老板面前说我坏话……还是算了；Java！.Net！可恶，天天出新东西，搞得我天天跟着跑还跑不过来，不跟？老板拿隔壁公司说事儿：看人家可以XXX，看人家的系统XXX，人家都能XXX你们为什么不能？！</p>

<p>程序写的累，天天为解决这些问题想破脑袋，于是天天盯着MS的网站看是不是又出什么好东西可以让我少加会儿班？咦？果然有新东西，下载，安装，启动，嗯……似乎有点摸不着头脑，这是什么？怎么用？算了，还是先不看了，今天的任务要先完成。过了两天，发现有人在用这个，第一反应：小儿科，我就是没时间，要不然……可是当别人真的拿那东西来做事情了，自己拿来看两眼：这东西似乎不太好学，会不会大家都开始用这个？如果我现在学不会，会不会影响我在团队中的地位？老板会不会给他加钱不给我加？</p>

<p>恐惧，又见恐惧，恐惧新事物，恐惧自己的经验贬值，于是乎，不屑，挑刺，贬低……恐惧的表现…………但不能让人看出来………………</p>

<p style="color:#f40;font-size:14px;text-align:center;">↓↓↓↓↓↓↓↓↓↓ 人说发牢骚可以长寿，给大家提供个地方 ↓↓↓↓↓↓↓↓↓↓</p>

<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/dingxue/aggbug/1211591.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41305/" target="_blank">[新闻]WCG2008中国区总决赛打响</a>]]></description></item><item><title>我眼中的C# 3.0</title><link>http://www.cnblogs.com/allenlooplee/archive/2008/06/01/1211520.html</link><dc:creator>Allen Lee</dc:creator><author>Allen Lee</author><pubDate>Sun, 01 Jun 2008 02:49:00 GMT</pubDate><guid>http://www.cnblogs.com/allenlooplee/archive/2008/06/01/1211520.html</guid><wfw:comment>http://www.cnblogs.com/allenlooplee/comments/1211520.html</wfw:comment><comments>http://www.cnblogs.com/allenlooplee/archive/2008/06/01/1211520.html#Feedback</comments><slash:comments>97</slash:comments><wfw:commentRss>http://www.cnblogs.com/allenlooplee/comments/commentRss/1211520.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/allenlooplee/services/trackbacks/1211520.html</trackback:ping><description><![CDATA[<FONT face="Arial, Helvetica, sans-serif">
<P style="TEXT-ALIGN: center"><SPAN style="FONT-SIZE: 20pt; COLOR: #0070c0"><STRONG>我眼中的C# 3.0 </STRONG></SPAN></P>
<P>&nbsp;</P>
<P style="TEXT-ALIGN: right"><SPAN style="COLOR: #0070c0"><STRONG><EM>Written by Allen Lee </EM></STRONG></SPAN></P>
<P>&nbsp;</P>
<P><SPAN style="COLOR: #0070c0"><STRONG>缘起 </STRONG></SPAN></P>
<P>每次有新技术发布时，我们总能感受到两种截然不同的情绪：一种是恐惧和抵抗，伴随着这种情绪的还有诸如"C# 2.0用的挺好的，为什么要在C# 3.0搞到那么复杂？"或者"我还在使用C# 1.0呢？"等言辞；另一种则是兴奋和拥抱，伴随着这种情绪的还有诸如"原来这个问题在C# 3.0里可以这么简单！"等言辞。 </P>
<P>最近我在公司内部做一个LINQ的系列讲座，在我为其中C# 3.0新特性这一讲准备演示文稿时，突然萌生了写下这篇文章的念头。语言的特性乃至其本身并没有对错之分，是否接受在很大程度上是一个感性问题，即你是否喜欢这样的做事方式，我并没有打算说服任何人接受C# 3.0和LINQ，写这篇文章也只是想和大家分享一下我自己的感受。 </P>
<P>有一次我观看一个关于Expression Blend的培训视频，里面说了一句让我印象非常深刻的话： </P>
<P style="MARGIN-LEFT: 36pt"><STRONG>I know how it works because I know why it works. </STRONG></P>
<P>细细品味这句话，你会感受到它所要传达的信息：理解为何需要这个功能可以帮助你更好地理解如何使用这个功能，而这也正是我要在这篇文章里采用的表达方式。 </P>
<P>&nbsp;</P>
<P><SPAN style="COLOR: #0070c0"><STRONG>你是如何创建属性的？ </STRONG></SPAN></P>
<P>如果你长期使用C#，相信你不会对属性这个东西感到陌生。一般地，属性是对私有字段的一个简单包装，就像这样： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C301.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 1 </STRONG></SPAN></P>
<P>使用属性而不是直接公开私有字段的一个好处就是在属性的获取访问器或设置访问器里加入额外的逻辑并不会为客户端代码带来麻烦，例如你想在设置标题的时候做一些额外的检查。但如果你只是简单地包装一下，像上面的代码那样，就会发现你其实多写了不少可以省略的代码。既然Title属性和m_Title私有字段对应，获取访问器就肯定是返回m_Title的值，而设置访问器也肯定是把值设到m_Title。再者，如果你只通过Title属性来访问这个数据，那么m_Title私有字段就会变得无足轻重，这样的话，为什么不交给编译器代劳呢？这个时候，C# 3.0的自动属性就可以派上用场了： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C302.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 2 </STRONG></SPAN></P>
<P>编译器会为你创建一个私有字段，并让获取访问器和设置访问器指向这个私有字段。当然，如果有需要，例如要在获取访问器或设置访问器里加入额外的逻辑时，你随时可以对获取访问器和设置访问器进行展开。 </P>
<P>&nbsp;</P>
<P><SPAN style="COLOR: #0070c0"><STRONG>你是如何初始化对象的？ </STRONG></SPAN></P>
<P>现在，假设我们有这样一个类： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C303.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 3 </STRONG></SPAN></P>
<P>你会怎样初始化它？一种做法是用Book的默认构造函数创建对象实例，然后分别为每个属性赋值： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C304.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 4 </STRONG></SPAN></P>
<P>另一种做法是使用C# 3.0对象初始化器： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C305.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 5 </STRONG></SPAN></P>
<P>乍看一下，C# 3.0的做法似乎没有让人感到任何优越感，现在，请你仔细观察一下，这两份代码分别包含多少个";"？代码4有5个";"，意味着它用了5个语句进行初始化；而代码5只有1个";"，意味着它只用了1个语句进行初始化。从词法的角度来看，如果此刻我只能接受一个表达式，那么代码4的做法就帮不上忙了。一个变通的方法是为Book类提供带参的构造函数，但这种方法也有弊端，用户可能只想在初始化时为部分属性提供数据，而我们又无法确切预知用户会提供哪些属性的组合，于是，我们可能要为用户提供足够多的构造函数重载，嗯，有点无聊，也有点多余。另一个变通的方法是提供接受最多参数的构造函数，如果用户为某个参数传递null，那么就忽略与之对应的属性，这个方法比较接近代码5的做法，不同的是，如果你的属性很多，而用户关心的只是很少一部分，就可能不得不输入很多null了。 </P>
<P>现在，假设你要实例化一组Book对象，并把它们储存在一个集合里，你会怎么做？下面是通常的做法： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C306.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 6 </STRONG></SPAN></P>
<P>如果结合使用C# 3.0的对象初始化器和集合初始化器，你就可以把代码简化为： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C307.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 7 </STRONG></SPAN></P>
<P>集合里的每个元素通过","分割，结合对象初始化器使用，整个集合的结构显得比较明晰。字典的初始化也可以同样简单： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C308.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 8 </STRONG></SPAN></P>
<P>说到这里，我相信你也能感觉到，C#似乎正在表达式化，以前需要很多条语句才能做到的事情，现在却可以用单个表达式描述出来，而这种理念也渗透在整个C# 3.0的氛围里。 </P>
<P>&nbsp;</P>
<P><SPAN style="COLOR: #0070c0"><STRONG>你是如何把运算逻辑外包出去的？ </STRONG></SPAN></P>
<P>假设我现在得到了一组Book的实例对象，你要对它们进行排序，那么你如何告诉它你要按价格来排序呢？ </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C309.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 9 </STRONG></SPAN></P>
<P>在C# 1.0里，我们需要特意为它提供一个独立的方法： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C3010.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 10 </STRONG></SPAN></P>
<P>然后向Sort()方法传入所需委托的实例： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C3011.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 11 </STRONG></SPAN></P>
<P>这在C# 2.0里可以进一步简化为： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C3012.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 12 </STRONG></SPAN></P>
<P>如果使用C# 2.0的匿名方法，我们可以省去很多不必要的代码： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C3013.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 13 </STRONG></SPAN></P>
<P>此外，使用匿名方法，Sort()方法和你希望它用来比较两个Book实例对象的逻辑可以放在同一个地方；而使用独立的命名方法，包含这个逻辑的方法可能会由于整理代码而被挪到别的地方。这样，当你看到代码12时，为了了解它内部的实现，就不得不花一些精力去寻找Compare()方法了。当然，你可以争辩说，我们可以制定一个编码规范，使得Compare()方法必须紧贴在Sort()方法的下方。是的，你可以，但如果这个逻辑并不需要重用，那么使用匿名方法还是具有明显的优势的。如果这个逻辑需要重用，那么匿名方法就无能为力了。 </P>
<P>现在，让我们来考察一下代码13，有没有发现匿名方法的表达方式还不够简练？我们知道，books集合里面只有Book的实例对象，所以Sort()方法传给我们两个参数的类型必定是Book，而Sort()方法期待的结果正是x.Price.CompareTo(y.Price)这个表达式的运算结果，至于delegate和return这样的字眼可以说在这里完全是多余的，那么为什么我们不直接这样表达呢： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C3014.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 14 </STRONG></SPAN></P>
<P>这就是C# 3.0引入的Lambda表达式语法。我见过一些人，他们通常强调尽可能简单，但若事情突然变得比他们预期的还要简单很多，他们就开始感到不适，甚至拒绝接受这种简单，其实即使事物的发展方向和你的前进方向相一致，但如果发展速度大大超越了你，仍然有可能引发你内心对失控的恐惧。我希望Lambda表达式语法不会让你感到太大的不适，当然我更希望你会喜欢上它。 </P>
<P>Lambda表达式的理解其实可以很简单，就是"=&gt;"左边的参数参与右边的表达式运算，而运算结果将会返回，这有点像化合反应，即两种或两种以上的物质（左边的参数）生成一种新物质（右边的表达式的运算结果），不同的是，Lambda可以不接收任何参数，也可以不返回任何结果。 </P>
<P>"=&gt;"右边除了可以放表达式之外，还可以放语句，像这样： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C3015.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 15 </STRONG></SPAN></P>
<P>我们把它称为Lambda语句（Lambda Statement），或许你已经发现，它和匿名方法相比只是不需要写delegate关键字和参数类型。 </P>
<P>&nbsp;</P>
<P><SPAN style="COLOR: #0070c0"><STRONG>你是如何为对象扩展与之相关的功能的？ </STRONG></SPAN></P>
<P>我一直在想，为什么String类没有提供一个Reverse()方法，把字符串翻转呢？我猜可能是因为这种操作没有什么现实意思，除非你要做一个文字游戏。实现Reverse()方法并不难，下面是其中一种做法： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C3016.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 16 </STRONG></SPAN></P>
<P>使用方法也非常简单： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C3017.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 17 </STRONG></SPAN></P>
<P>你甚至可以把Reverse()方法放到某个静态类里，例如Utils，这样，代码17就可以变成： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C3018.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 18 </STRONG></SPAN></P>
<P>在C# 3.0之前，你最多只能走到这里，而到了C# 3.0，你还可以使用扩展方法对它做进一步调整，使代码18变成： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C3019.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 19 </STRONG></SPAN></P>
<P>怎么样，看上去就像Reverse()方法是属于String的，而你所需要做的仅仅是在Reverse()方法的target参数前面加上"this"关键字： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C3020.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 20 </STRONG></SPAN></P>
<P>我们知道，计算机的底层世界并不知道什么是面向对象，而我们在对象里定义的实例方法都包含一个隐藏参数，这个参数就是指向当前对象实例的指针，C# 3.0的扩展方法在形式上模仿了这种做法，但由于扩展方法本质上并不属于与之相关的类，所以你无法在扩展方法里访问类内部的私有成员。 </P>
<P>就上面的讨论来说，你可能认为，和代码18相比，代码19并没有太大的优势，那么为什么需要扩展方法呢？假设我们手头上有一堆书，我想找到最便宜的LINQ的书，使用标准查询运算符的话可以这样写： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C3021.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 21 </STRONG></SPAN></P>
<P>我们知道，Where()、OrderBy()和First()等都是扩展方法，如果C# 3.0不支持扩展方法，那么代码21就不得不写成这样了： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C3022.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 22 </STRONG></SPAN></P>
<P>代码21的可读性明显比代码22的高，也显得更自然，而此时我们只是使用了3个标准查询运算符，你可以想象一下，在没有扩展方法的支持下要表达更复杂的查询会是怎样一番情景？ </P>
<P>&nbsp;</P>
<P><SPAN style="COLOR: #0070c0"><STRONG>你是如何表达你想要的东西的？ </STRONG></SPAN></P>
<P>现在，假设我想找到最便宜的LINQ的书，使用C# 2.0的语法，我可能需要这样： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C3023.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 23 </STRONG></SPAN></P>
<P>虽然我已经使用了Array.IndexOf()方法、List&lt;T&gt;.Sort()方法和匿名函数来简化代码，但仍然无法掩盖一个事实，那就是我在讲述如何获取我想要的东西，而这也正是命令式编程（Imperative Programming）的核心思想。 </P>
<P>如果使用C# 3.0的语法，情况将会大不一样： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C3024.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 24 </STRONG></SPAN></P>
<P>在这里，你表达了你想要的东西，而不是获取这些东西的具体步骤，这是声明式编程（Declarative Programming）的核心思想，这样做的好处是明显的，你的需求可以被重新解析并执行，必要时还可以对底层的实现进行优化，但由于你并不关心和牵扯到具体的实现上，所以那些优化并不会导致你修改代码。 </P>
<P>命令式编程就像过程管理，你深入执行的细节，继而对整个过程的执行实施控制；而声明式编程则像目标管理（MBO），你制定目标，并把任务分配下去执行。代码23给人的感觉就是整个执行过程都非常的清楚，你可以对任何一个步骤进行修改或者调优；而代码24给人的感觉就是你除了说出你想要什么，你什么也不能做，这对于那些过程管理拥戴者来说可能是不可接受的，他们感到对事物失去了控制，无法建立安全感，因而产生了焦虑。曾经有人向我抱怨：如果你使用了LINQ，你就只能迫使自己相信它的实现是很好的。想想看，如果你的公司把饭堂业务承包给一个餐饮公司，你的公司可以插手别人如何招聘厨师、如何采购食物、如何烧菜烧饭吗？选择LINQ意味着你愿意把执行细节交给别人去处理，从而脱离这些细节，如果你根本无法放下对这些细节的控制，那么LINQ可能并不适合你。 </P>
<P>很难说这两种编程方式孰优孰劣，因为在某些场合下，善于过程管理的管理者确实更能让事态朝正确的方向发展；而在另一些场合下，目标管理为实现者提供足够的自由度，更能激励他们积极地进行思考。管理界对于过程管理和目标管理孰优孰劣之争论似乎从来没有停过，更何况编程界对于命令式编程和声明式编程孰优孰劣之争论，我个人倒是更倾向于把这看成是找出更适合你自己的风格，而不是盲目听信别人的说法。语言到底是发挥积极作用还是消极作用在很大程度上是取决于使用者的，我们应该使用语言有利的一面来协助我们的工作，而不是使用其有害的一面来伤害自己和别人。 </P>
<P>回到代码24，它把满足条件的书的所有信息都返回给我，如果我只需要书名和作者名字呢？我们知道，在面向对象的世界里，信息储存在对象里，于是我们不得不走到一个尴尬的境地，那就是我们要为此创建一个临时类： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C3025.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 25 </STRONG></SPAN></P>
<P>噩梦正式开始了，如果我需要书名和价格呢？如果我需要书名、作者和价格呢？……（读者可以自行补全这个列表）这个时候就轮到C# 3.0的匿名类型和隐式类型化变量出场了： </P>
<P><IMG alt="" src="http://www.cnblogs.com/images/cnblogs_com/allenlooplee/060108_0249_C3026.png"> </P>
<P><SPAN style="FONT-SIZE: 9pt; COLOR: #4f81bd"><STRONG>代码 26 </STRONG></SPAN></P>
<P>因为匿名类型是由编译器自动生成的，而在你写代码的时候它还没有名字，所以你无法用这个类型来声明这个变量，此时"var"关键字就派上用场了。这个是"var"关键字的最初目的，但得益于类型推断系统，我们还可以使用"var"关键字声明任何本地变量，只要我们在声明的同时给予它初始化，否则编译器无法进行推断。曾经有人问我：如果我想返回代码26里的wanted7怎么办？我们知道，方法的返回值需要明确给出类型，而在我们写下代码26时，编译器还没有给查询表达式里的匿名类型取名。如果你真的要把它返回，你只能把方法的返回值类型定为IEnumerable&lt;object&gt;，因为我们只能确定匿名类型是object的后代，但这样一来，客户端代码的日子就不太好过了，因为除了通过反射来访问你的对象，它别无他选。如果你真的要把它返回，那就意味着你和客户端代码有共享这个对象的需求，此时恰当的做法应该是使用命名类型。另外，代码26里构建匿名类型时的"book.Title"是"Title = book.Title"的简写，当你省略"Title ="时，编译器会假定你希望匿名类型的这个属性的名字和Book.Title的一样。 </P>
<P>匿名类型还有一个有趣的地方，它曾经是可变的（mutable），后来却变成不可变的（immutable），<A href="http://blogs.msdn.com/sreekarc/default.aspx">Sree</A>在<A href="http://blogs.msdn.com/sreekarc/archive/2007/04/03/immutable-the-new-anonymous-type.aspx">《Immutable is, the new Anonymous Type》</A>一文中给出了这个转变的解释。我们知道，在面向对象的世界里，对象封装并维护自身的状态，我们通过调用对象的方法所产生的副作用来影响对象的状态，而不可变则是函数式编程（Functional Programming）的核心特征，或许你已经感受到了，C# 3.0引入了大量函数式编程的东西，而函数式编程语言似乎也要风生水起，这究竟意味着什么呢？ </P>
<P>&nbsp;</P>
<P><SPAN style="COLOR: #0070c0"><STRONG>前路在何方？ </STRONG></SPAN></P>
<P>无论你是否承认，C# 3.0在表达上比它之前的版本要来的简单，但要获得这种简单，你必须先用很多东西武装自己的脑袋，这使我想起曾经在一本书里看到的一句话： </P>
<P style="MARGIN-LEFT: 36pt"><SPAN style="FONT-FAMILY: 宋体"><STRONG>简单是由复杂来支撑的。 </STRONG></SPAN></P>
<P>不同语言之间的相互渗透已经不再是什么新奇之事了，引入其它语言的功能有时候甚至可以看作是在战略上入侵对手的市场，这在某种程度上有点像金融业的混业经营。下一个版本的C#将会是怎样的呢？或许这个问题令你兴奋不已，你甚至希望现在就让C# Team看看你的创造力；或许这个问题令你痛心不已，你害怕自己无法适应下一波的变革，因为变革可能导致动荡，动荡可能带来失控，失控可能引发焦虑。不管怎样，该来的是无法回避的，或许现在先让我们看看Matthew Podwysocki的<A href="http://weblogs.asp.net/podwysocki/archive/2008/05/24/what-is-the-future-of-c-anyways.aspx">《What Is the Future of C# Anyways?》</A>是否有一些启示…… </P>
<P>&nbsp;</P>
<P align=right>附：如果你有兴趣看看我的演示文稿，可以点击<A href="/Files/allenlooplee/CSharp3.zip">这里</A>下载。</P></FONT><img src ="http://www.cnblogs.com/allenlooplee/aggbug/1211520.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41304/" target="_blank">[新闻]新型的编程语言:eC</a>]]></description></item><item><title>主键的故事</title><link>http://www.cnblogs.com/leadzen/archive/2008/05/12/1191010.html</link><dc:creator>李战</dc:creator><author>李战</author><pubDate>Mon, 12 May 2008 00:19:00 GMT</pubDate><guid>http://www.cnblogs.com/leadzen/archive/2008/05/12/1191010.html</guid><wfw:comment>http://www.cnblogs.com/leadzen/comments/1191010.html</wfw:comment><comments>http://www.cnblogs.com/leadzen/archive/2008/05/12/1191010.html#Feedback</comments><slash:comments>82</slash:comments><wfw:commentRss>http://www.cnblogs.com/leadzen/comments/commentRss/1191010.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/leadzen/services/trackbacks/1191010.html</trackback:ping><description><![CDATA[摘要:    1969年8月8日，在北京协和医院降生了一个漂亮的小女孩。接生的阿姨说，她的声音这么大，好象想要全世界的人都听到。<br><br>    后来，她的父亲为她取了一个很好听的名字，叫“王菲”。于是，所有的小朋友就叫她“王菲”，“王菲”就是她童年的主键。<br>&nbsp;&nbsp;<a href='http://www.cnblogs.com/leadzen/archive/2008/05/12/1191010.html'>阅读全文</a><img src ="http://www.cnblogs.com/leadzen/aggbug/1191010.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41303/" target="_blank">[新闻]免费的BitDefender能复制卡巴斯基的成功吗?</a>]]></description></item><item><title>不要再面向对象</title><link>http://www.cnblogs.com/yice/archive/2008/05/11/1191984.html</link><dc:creator>小余(Yice)</dc:creator><author>小余(Yice)</author><pubDate>Sun, 11 May 2008 02:43:00 GMT</pubDate><guid>http://www.cnblogs.com/yice/archive/2008/05/11/1191984.html</guid><wfw:comment>http://www.cnblogs.com/yice/comments/1191984.html</wfw:comment><comments>http://www.cnblogs.com/yice/archive/2008/05/11/1191984.html#Feedback</comments><slash:comments>106</slash:comments><wfw:commentRss>http://www.cnblogs.com/yice/comments/commentRss/1191984.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/yice/services/trackbacks/1191984.html</trackback:ping><description><![CDATA[摘要: <p><img src="http://www.cnblogs.com/images/cnblogs_com/yice/135637/r_Yice_002.jpg" align="right"/>如果你是一个初学者，正在努力的学习各种软件开发的技能，希望今后能够从事软件开发工作。那么在学习的过程中，就先丢掉面向对象，对于你来说面向对象是一颗毒瘤，他不会给你带来软件上更高层次理解，恰恰相反，你的逻辑思维正在被它慢慢的毒化，一堆似有似无的概念会把你的理解彻底毁掉，从而很难清楚的理解到底程序的本质如何，当你只会念叨......</p>&nbsp;&nbsp;<a href='http://www.cnblogs.com/yice/archive/2008/05/11/1191984.html'>阅读全文</a><img src ="http://www.cnblogs.com/yice/aggbug/1191984.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41301/" target="_blank">[新闻]DNS漏洞攻击代码已经公布 危险迫在眉睫</a>]]></description></item><item><title>动态加载控件_常见问题解决之道</title><link>http://www.cnblogs.com/volnet/archive/2008/05/10/solution-of-dynamic-load-usercontrol.html</link><dc:creator>volnet（可以叫我大V）</dc:creator><author>volnet（可以叫我大V）</author><pubDate>Fri, 09 May 2008 22:06:00 GMT</pubDate><guid>http://www.cnblogs.com/volnet/archive/2008/05/10/solution-of-dynamic-load-usercontrol.html</guid><wfw:comment>http://www.cnblogs.com/volnet/comments/1190818.html</wfw:comment><comments>http://www.cnblogs.com/volnet/archive/2008/05/10/solution-of-dynamic-load-usercontrol.html#Feedback</comments><slash:comments>16</slash:comments><wfw:commentRss>http://www.cnblogs.com/volnet/comments/commentRss/1190818.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/volnet/services/trackbacks/1190818.html</trackback:ping><description><![CDATA[<p>动态加载控件貌似给很多程序员都带来了困扰，经常收到这样的邮件，干脆就写下面这个示例来演示如何解决那些常见的问题吧。<br />
其实常见的问题通常有这样两个:<br />
1、通常他们都通过一个按钮来添加一个UserControl并将它们加入PlaceHolder容器的Controls中。然后页面上就会有一个另外一个按钮，这个按钮什么相关的事也没做，就是做了一次回发。这样的情况动态添加的控件就不翼而飞了。 </p>
<p>2、今天收到了一封邮件说是要追加控件，和上面的情况看上去好像不一样，但实质就是同一回事。 <br />
</p>
<p>原因： </p>
<p>其实网上有很多帖子都不约而同地解释了这个问题，这里我还是不厌其烦地解释一下：</p>
<p>首先，要提到大家所熟知很多人一知半解的页面生命周期，以至于很多居然还停留在将ASP.NET和Winform一样处理的层次上，因此就会有人试图将变量存在实例字段中，然后一如既往地指望它能够用来共享数据，结果总是无功而返，以我所知这样的人居然还不在少数，当然了，咱博客园的素质相对偏高，这种问题一般不在话下。事实上每次页面PostBack都会从Aspnet线程池中返回一个空闲的用户线程，用于处理用户本次的请求。摆弄一下那种浏览器进度条会动的控件基本也都算是回发事件了。两次回发之间可以当作没有什么关联的。但是你总能看到很多控件等在回发之后还能保持状态比如文本框边上有个按钮。你填写完了文本后狂点那个按钮，你会发现文本框中的文字还是你填写的那些而不会被清空。这就不得不说到ViewState这种神奇的双刃剑了。它的原理在MSDN上讲的很清楚，找不到的留言或发邮件给我我再慢慢给你找&#8230;&#8230;</p>
<p>然后呢？还是查MSDN,关键字&#8220;TemplateControl.LoadControl &#8221;我们在用PlaceHolder中动态添加控件的时候就会用到这个方法了。我们注意到这里有一句：&#8220;在将控件加载到容器控件时，该容器引发所添加控件的所有事件，直到所添加控件参与当前事件为止。但是，所添加控件不参与回发数据处理。&#8221;因为所添加的控件是不参与回发数据处理的，因此就会出现问题1中所遇到的按另一个按钮就消失的现象了。问题2其实也是一样的问题，因为事实上它们遇到的现象是一样的，只不过它的需求有所不同罢了。（可以理解成一个是i=1;另一个是i+=1;）<br />
</p>
<p><strong>综上所述，问题的关键就是原本在页面加载的时候所有的控件初始化操作都应该完成，动态加载将加载的过程延迟到了事件被触发之后，因此在页面回发后，因为会有一次新的页面加载过程，显然这时候动态加载的控件是不存在的，但是用户预期的答案是显示已经加载的信息。这时候如果可能我们最好在加载的过程中进行控件的重新加载和数据绑定。常见的方法中我们呢通常通过LoadControl来动态加载控件，因此只要在页面输出之前的所有事件节点上我们都可以加载我们的控件。但是推荐的则是Init事件。在Load事件的时候进行数据绑定。</strong><br />
<br />
解决：</p>
<p>既然问题的原因找到了，我们就应该解决它，现在关键就是在回发后PlaceHolder.Controls的子集数量为0，也就是没有子控件，也就是很明显地控件跑没了。那么我们就应该在我们在他们还在的时候将其存放起来。在经典的回发模型中，ViewState通过将所有控件/其子控件的各个属性字段等都存放到ViewState中了，在最后Render的时候都一并丢给了用户。数据包括数据状态都一并发到了客户端，现在客户点击了一个能够引起回发的按钮或者下拉框按钮，所有这些数据状态以及客户修改（也许没有修改，但我们假定客户篡改过了）的数据都传回客户端。因为回发发生了，因此在加载数据的阶段IPostBackEventHandler和IPostBackDataHandler接口所定义的方法（通常由服务器控件实现）都将被调用，然后就是一系列的数据回填工作。用户的数据又被重新做成了新的ViewState放在页面里面又丢给了客户端。我曾经用一个比喻（相当拙劣的比喻，当时好像不是这样比喻的）是白衬衫（花花公子正版）被蓝笔画后，送去洗衣店，人家新拿了一件一样的白衬衫（花花公子高仿），然后用蓝笔划了一下还给你，事实上白衬衫不是你原来的那件了，但看上去还是无法分辨。因此我们这里也可以用类似的办法来解决。但是真的可以吗？用ViewState不仅有众所周知的性能问题，因为ViewState的存储介质（其实是指它的内容存储，可以理解成持久层）是页面，而页面是指接受文本的一种载体（正如网页事实上都是文本一样的道理）因此会有序列化的问题。这就给用户控件的开发带来了极大的不便。更关键的原因是不仅如此，因为UserControl压根没有支持序列化，因此你的控件即使精简到没有字段方法（就声明了个名字够精简了吧）再加上序列化特性，只要你继承自UserControl，就必然面临无法序列化的尴尬。况且它的性能问题确实也很值得关注。和ViewState有类似性质的常见的还有Session和HttpContext.Current.Cache等缓存，或者自己实现一个静态字典用于存储也是一个不错的选择。用它们是可以解决问题的，在下面的代码中将会用到。但这样的方案事实上是存在很多问题的。大家都知道Session是有超时时间的，默认长度也就是几十分钟，而且Session也有诸多其他方面的限制，因此用它来做容量如此之大的控件存储其实是非常不适合的。HttpContext.Current.Cache是一个高级的缓存对象，因为有完善的内部机制来限制其膨胀以及管理其内容，但也正因为这种管理比如大小限制等原因会导致在生产环境中可能会遭遇严重的性能问题。缓存应该用来存取较小的常用的数据，比如用户名/密码这样的常用数据，而不是这种大个头的东西。但是与ViewState相似的性质让它们有了承担这份责任的义务。（家里的大人都死光了，孩子也只好来当家了）这让我们想到了存储介质，事实上磁盘文件，数据库等都具有了同样的性质。另一条思路是来自简单地加载思路，因为对动态添加的控件来说，它有一个很明显的特征，它是动态添加的。因此既然可以在按钮事件处理程序中添加，同样也就可以在页面初始化事件处理程序中添加。按照页面的生命周期动态添加最好写在Init这时候理应做丰富的添加（不过不适合那种需要用按钮添加的用户需求了）[另外一点有点郁闷的是在MSDN中也是说应该在Init而不是Load中动态添加，但是同样是在MSDN的《如何：以编程方式创建 ASP.NET 用户控件的实例》居然就用了Load事件来处理，因此这种区分对页面开发人员事实上并不是那么严谨的，事实上也不会出现什么问题，因此也就没有人吹毛求疵了，而且Google出来的答案估计90%以上都是在Load中写的，一传十十传百的结果可能这个数值还在上升，所以就更没必要计较了]。刚刚打算帮发邮件的兄弟直接找一个答案发现了有网友说在每个页面都要做判断搞加载，很烦很烦&#8230;&#8230;所以如果您的需求不是那种追求打开一个页面两天后再来点一下要追加或则重新加载控件的朋友，我的方案还是可以考虑的。当然如果你比较追求那种近乎变态的需求或者您的页面和淘宝有一样大的访问量的话，不凡试试我的方案，更好的解释是，我的方案可以当作理解控件动态加载原理解释的一个入口罢了。</p>
<p>我的例子，因为代码比较多，我就贴出如何调用的部分（也就是&#8220;如何用&#8221;的代码）源码可以在后面的链接中下载。</p>
<p>扩展性：虽然是为我那位邮友给出的答案，但是还是考虑了扩展性，我们可以尝试扩展用磁盘文件、网络、或者数据库的方式来作为存储介质，当然，您必须为此实现部分接口。局限性，因为有存储介质一说，因此不同容器托管方面不允许同时使用多种存储介质，否则将会出现两个集合，因此就带来了另一个扩展性，您可以自行实现扩展存储之间的数据同步，不过做此之前提醒您一下，不同的存储介质可能存在不同的存储能力，比如Session有大小限制，而数据库简直就是容量大王，这些数据之间的同步可能会引发新的问题，另者就是这样的同步除了看上去很酷之外并没有什么好处，将数据乱存的结果可能导致程序显得混乱，更尴尬的是数据同步所白白消耗掉的性能。当然如果您只是练练手的话您确实可以这么做，做完记得告诉我一下，哈哈，我也想不劳而获。哈哈。下面贴一下代码就不多做解释了，因为如果你理解了上面这些，看懂那些代码就不可能有问题了。</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; padding-left: 4px; font-size: 13px; border-top: #cccccc 1px solid; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">partial</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;_Default&nbsp;:&nbsp;System.Web.UI.Page<br />
<img id="Codehighlighter1_59_2319_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_59_2319_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_59_2319_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_59_2319_Closed_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_59_2319_Closed_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_59_2319_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_59_2319_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_59_2319_Open_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; display: none; background-color: #ffffff" id="Codehighlighter1_59_2319_Closed_Text"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_59_2319_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;ContainerManager.ContainerManager&nbsp;cm&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ContainerManager.ContainerManager();<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Page_Load(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br />
<img id="Codehighlighter1_226_440_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_226_440_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_226_440_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_226_440_Closed_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_226_440_Closed_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_226_440_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_226_440_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_226_440_Open_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; display: none; background-color: #ffffff" id="Codehighlighter1_226_440_Closed_Text"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_226_440_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">重载控件(HttpContext.Current.Cache作为存储介质)</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cm.ReloadControls(HttpContext.Current.Cache,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">PlaceHolder_DynamicUserControlContainer</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;PlaceHolder_DynamicUserControlContainer.Controls);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;btnInsertDynamicUserControl_Click(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br />
<img id="Codehighlighter1_535_2125_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_535_2125_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_535_2125_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_535_2125_Closed_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_535_2125_Closed_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_535_2125_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_535_2125_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_535_2125_Open_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; display: none; background-color: #ffffff" id="Codehighlighter1_535_2125_Closed_Text"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_535_2125_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Control&nbsp;c1&nbsp;=&nbsp;LoadControl("DynamicUserControl.ascx");<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">PlaceHolder_DynamicUserControlContainer.Controls.Add(c1);</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;displayCount;<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">.TryParse(txtNumber.Text,&nbsp;</span><span style="color: #0000ff">out</span><span style="color: #000000">&nbsp;displayCount);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(displayCount&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_814_1081_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_814_1081_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_814_1081_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_814_1081_Closed_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_814_1081_Closed_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_814_1081_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_814_1081_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_814_1081_Open_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; display: none; background-color: #ffffff" id="Codehighlighter1_814_1081_Closed_Text"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_814_1081_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">追加控件(Session作为存储介质)</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control&nbsp;c1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;LoadControl(</span><span style="color: #800000">"</span><span style="color: #800000">DynamicUserControl.ascx</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cm.AppendControl(</span><span style="color: #0000ff">this</span><span style="color: #000000">.Session,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">PlaceHolder_DynamicUserControlContainer</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;PlaceHolder_DynamicUserControlContainer.Controls,&nbsp;c1);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(displayCount&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_1134_1655_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1134_1655_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1134_1655_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1134_1655_Closed_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_1134_1655_Closed_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1134_1655_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1134_1655_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1134_1655_Open_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; display: none; background-color: #ffffff" id="Codehighlighter1_1134_1655_Closed_Text"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1134_1655_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">追加控件(HttpContext.Current.Cache作为存储介质)</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control&nbsp;c1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;LoadControl(</span><span style="color: #800000">"</span><span style="color: #800000">DynamicUserControl.ascx</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control&nbsp;c2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;LoadControl(</span><span style="color: #800000">"</span><span style="color: #800000">WebUserControl.ascx</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cm.AppendControl(HttpContext.Current.Cache,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">PlaceHolder_DynamicUserControlContainer</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;PlaceHolder_DynamicUserControlContainer.Controls,&nbsp;c1);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cm.AppendControl(HttpContext.Current.Cache,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">PlaceHolder_DynamicUserControlContainer</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;PlaceHolder_DynamicUserControlContainer.Controls,&nbsp;c2);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
<img id="Codehighlighter1_1685_2115_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1685_2115_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1685_2115_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1685_2115_Closed_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_1685_2115_Closed_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1685_2115_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1685_2115_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1685_2115_Open_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; display: none; background-color: #ffffff" id="Codehighlighter1_1685_2115_Closed_Text"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1685_2115_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">常见的动态加载控件后点击其他回发事件就导致控件丢失</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PlaceHolder_DynamicUserControlContainer.Controls.Clear();<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control&nbsp;c1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;LoadControl(</span><span style="color: #800000">"</span><span style="color: #800000">DynamicUserControl.ascx</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PlaceHolder_DynamicUserControlContainer.Controls.Add(c1);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cm.CacheControls(HttpContext.Current.Cache,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">PlaceHolder_DynamicUserControlContainer</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;PlaceHolder_DynamicUserControlContainer.Controls);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" /><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;btnUnloadStorage_Click(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br />
<img id="Codehighlighter1_2209_2313_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2209_2313_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_2209_2313_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_2209_2313_Closed_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_2209_2313_Closed_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_2209_2313_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_2209_2313_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_2209_2313_Open_Text').style.display='inline';" alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; display: none; background-color: #ffffff" id="Codehighlighter1_2209_2313_Closed_Text"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_2209_2313_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cm.Remove(HttpContext.Current.Cache,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">PlaceHolder_DynamicUserControlContainer</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span> </div>
源码地址：<a href="http://www.cnblogs.com/Files/volnet/WebAppPlaceHolder.zip">http://www.cnblogs.com/Files/volnet/WebAppPlaceHolder.zip</a> 
<img src ="http://www.cnblogs.com/volnet/aggbug/1190818.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41300/" target="_blank">[新闻]十几万元天价笔记本电脑</a>]]></description></item><item><title>对Singleton的实现方法做一个总结</title><link>http://www.cnblogs.com/guaiguai/archive/2008/05/10/1190803.html</link><dc:creator>怪怪</dc:creator><author>怪怪</author><pubDate>Fri, 09 May 2008 18:02:00 GMT</pubDate><guid>http://www.cnblogs.com/guaiguai/archive/2008/05/10/1190803.html</guid><wfw:comment>http://www.cnblogs.com/guaiguai/comments/1190803.html</wfw:comment><comments>http://www.cnblogs.com/guaiguai/archive/2008/05/10/1190803.html#Feedback</comments><slash:comments>29</slash:comments><wfw:commentRss>http://www.cnblogs.com/guaiguai/comments/commentRss/1190803.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/guaiguai/services/trackbacks/1190803.html</trackback:ping><description><![CDATA[摘要: 说说Singleton的三种实现外加一个变种和一些细节。 还有什么没提到的， 大家也来讨论下～&nbsp;&nbsp;<a href='http://www.cnblogs.com/guaiguai/archive/2008/05/10/1190803.html'>阅读全文</a><img src ="http://www.cnblogs.com/guaiguai/aggbug/1190803.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41299/" target="_blank">[新闻]英特尔:四核移动处理器八月推出</a>]]></description></item><item><title>从Facebook说起</title><link>http://www.cnblogs.com/shuizhuyu/archive/2008/05/10/1190795.html</link><dc:creator>水煮 鱼</dc:creator><author>水煮 鱼</author><pubDate>Fri, 09 May 2008 17:08:00 GMT</pubDate><guid>http://www.cnblogs.com/shuizhuyu/archive/2008/05/10/1190795.html</guid><wfw:comment>http://www.cnblogs.com/shuizhuyu/comments/1190795.html</wfw:comment><comments>http://www.cnblogs.com/shuizhuyu/archive/2008/05/10/1190795.html#Feedback</comments><slash:comments>20</slash:comments><wfw:commentRss>http://www.cnblogs.com/shuizhuyu/comments/commentRss/1190795.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/shuizhuyu/services/trackbacks/1190795.html</trackback:ping><description><![CDATA[摘要: <p><img src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/06/Facebook.svg/200px-Facebook.svg.png" align="right"/>时间：2008-5-9 夜<br>版权申明：本文为水煮鱼为 水煮鱼@博客园 撰写，不得用于商业用途，如需摘用，请与水煮鱼联系。<br><br>最近在公司内部，有很多同事都在讨论Facebook的成功，但大部分同事都仅仅将Facebook看作SNS社区，根据理解，水煮 鱼想对此进行一个澄清。Facebook不仅仅是一个简单的SNS社区，如果真是这样，那么微软不必花费2.4亿美元，成就Facebook150亿美元的市场估值了。<br><br>那Facebook究竟是什么？<br></p>&nbsp;&nbsp;<a href='http://www.cnblogs.com/shuizhuyu/archive/2008/05/10/1190795.html'>阅读全文</a><img src ="http://www.cnblogs.com/shuizhuyu/aggbug/1190795.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41297/" target="_blank">[新闻]杨致远：孤独的守护人</a>]]></description></item><item><title>深入ASP.NET数据绑定（上）</title><link>http://www.cnblogs.com/hjf1223/archive/2008/05/03/digging_into_binding_expression_1.html</link><dc:creator>阿不</dc:creator><author>阿不</author><pubDate>Sat, 03 May 2008 15:05:00 GMT</pubDate><guid>http://www.cnblogs.com/hjf1223/archive/2008/05/03/digging_into_binding_expression_1.html</guid><wfw:comment>http://www.cnblogs.com/hjf1223/comments/1180962.html</wfw:comment><comments>http://www.cnblogs.com/hjf1223/archive/2008/05/03/digging_into_binding_expression_1.html#Feedback</comments><slash:comments>33</slash:comments><wfw:commentRss>http://www.cnblogs.com/hjf1223/comments/commentRss/1180962.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/hjf1223/services/trackbacks/1180962.html</trackback:ping><description><![CDATA[摘要: 在ASP.NET我们在使用Repeater，DetailsView，FormView，GridView等数据绑定模板时，都会使用<%# Eval("字段名") %>或<%# Bind("字段名") %>这样的语法来单向或双向绑定数据。但是我们却很少去了解，在这些语法的背后，ASP.NET究竟都做了哪些事情来方便我们使用这样的语法来绑定数据。究竟解析这样的语法是在编译时，还是运行时？如果没有深入去了解，我们肯定不得而知。这个简短的系列文章就是带我们大家一起去深入探究一下ASP.NET绑定语法的内部机理，以让我们更加全面的认识和运用它。&nbsp;&nbsp;<a href='http://www.cnblogs.com/hjf1223/archive/2008/05/03/digging_into_binding_expression_1.html'>阅读全文</a><img src ="http://www.cnblogs.com/hjf1223/aggbug/1180962.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41298/" target="_blank">[新闻]SourceForge可正常访问</a>]]></description></item><item><title>到底谁骗了谁</title><link>http://www.cnblogs.com/yice/archive/2008/04/17/925453.html</link><dc:creator>小余(Yice)</dc:creator><author>小余(Yice)</author><pubDate>Thu, 17 Apr 2008 04:47:00 GMT</pubDate><guid>http://www.cnblogs.com/yice/archive/2008/04/17/925453.html</guid><wfw:comment>http://www.cnblogs.com/yice/comments/925453.html</wfw:comment><comments>http://www.cnblogs.com/yice/archive/2008/04/17/925453.html#Feedback</comments><slash:comments>34</slash:comments><wfw:commentRss>http://www.cnblogs.com/yice/comments/commentRss/925453.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/yice/services/trackbacks/925453.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 晚上加班和客户开会,空闲的时候看到了一篇比较有意思的文章.<a href="http://dev.csdn.net/author/li_hualing/94942fa4c5224e09a19d0dbc8d0efc3d.html"> CMM欺骗了中国的软件业</a>.读完之后觉得有些同感.对于作者的观点我不加以批判,只是从我个人的感觉来写写自己的看法(一下斜体部分是作者的原文)<br />
<strong><span style="color: rgb(255, 154, 24);"><strong>&nbsp;&nbsp;<span style="color: rgb(255, 150, 16);"><em>&nbsp;&nbsp;<span style="color: rgb(255, 110, 24);"><span style="color: rgb(255, 150, 16);"><em> </em></span></span></em></span></strong></span></strong><span style="color: rgb(255, 154, 24);"><span style="color: rgb(255, 150, 16);"><em><span style="color: rgb(255, 110, 24);"><span style="color: rgb(255, 150, 16);"><em><span style="color: rgb(255, 110, 24);"><span style="color: rgb(255, 150, 16);"><em><span style="color: rgb(255, 110, 24);"><span style="color: rgb(255, 150, 16);"><em>中</em></span></span></em></span><span style="color: rgb(255, 150, 16);"><em><span style="color: rgb(255, 110, 24);"><span style="color: rgb(255, 150, 16);"><em>国人实际是一个很特殊的人群，中国人的思维方式、价值观和处世方式与西方国家的区别很大，这与中国历史几千年漫长的中国文化和集权管理有直接的关系。 西方历史的发展是以科技为主线的，因此在西方的管理学中明显体现的是科学学科的态度和方法。在西方的管理学中分权和量化是两个重要的特点，而在中国的管理学中，为人处世却是主体，西方管理以事为主体，中国的管理以人为主体。<br />
&nbsp;&nbsp;&nbsp; &nbsp; 另外国内的软件企业很少有成熟的企业文化的，这也是不论是CMM还是ISO9K都面临失败的原因之一。实施CMM更是一种文化的塑造和改革，</em></span></span></em></span></span></em></span></span></em></span><img iscommanddisabled="false" classnamesetted="true" iscommandactive="false" tabindex="-1" unselectable="on" class="CuteEditorButtonDown" command="ForeColor" onclick="CuteEditor_GetEditor(this).ExecCommand('ForeColor',false,CE_EditorBody_ID_forecolorimg.style.backgroundColor)" id="CE_EditorBody_ID_forecolorimg" title="字体颜色" src="http://www.cnblogs.com/CuteSoft_Client/CuteEditor/Load.ashx?type=theme&amp;file=fontcolor.gif&amp;theme=Custom" style="background-color: rgb(255, 154, 24);" alt="" width="17" /><span style="color: rgb(255, 150, 16);"><em><span style="color: rgb(255, 110, 24);"><span style="color: rgb(255, 150, 16);"><em><span style="color: rgb(255, 110, 24);"><span style="color: rgb(255, 150, 16);"><em><span style="color: rgb(255, 110, 24);"><span style="color: rgb(255, 150, 16);"><em>是全体意识的提高和变革。自己本身都没有成熟的企业价值观和文化观，怎么可能让CMM在企业生根？不能在企业每个人的头脑中生根的CMM又怎么能发芽、开花、结果呢？国内企业通过CMM基本上都只是一个研发部或者产品部通过的。</em></span></span></em></span></span></em></span></span></em></span></span><span style="color: rgb(255, 150, 16);"><em><span style="color: rgb(255, 110, 24);"><span style="color: rgb(255, 150, 16);"><em><span style="color: rgb(255, 110, 24);"><span style="color: rgb(255, 150, 16);"><em><span style="color: rgb(255, 110, 24);"><span style="color: rgb(255, 150, 16);"><em><br />
</em></span></span></em></span></span></em></span></span></em></span><span style="color: rgb(255, 150, 16);"><em><span style="color: rgb(255, 110, 24);"><span style="color: rgb(255, 150, 16);"><em></em></span></span></em></span><span style="color: rgb(255, 150, 16);"><em></em></span><strong><span style="color: rgb(255, 150, 16);"><em>&nbsp;&nbsp;&nbsp;&nbsp; </em></span></strong><span style="color: rgb(255, 150, 16);"><span style="color: rgb(255, 150, 16);"><span style="color: rgb(255, 150, 16);"><span style="color: rgb(255, 150, 16);"><span style="color: rgb(2, 0, 0);">其实对于东西方的文化差异我再目前的工作中有许多体会,我曾经工作与三家公司,第一家是中国企业,虽然是软件公司,不过整体来说,国企味道浓厚,第二家是日本企业,在日本也做经过三年,最后给我一个感觉,日本能够那么发达有他们的道理,现在所在的是一家欧美企业,公司的文化以欧美为主导.三家企业让我见识了三种全然不同的企业文化,文化的差异不能简单的用好坏来衡量,主要看这种文化时候很和身处其中的每一个人员相互依托,相互补足.但是没有一家公司能够照搬别人的文化.就像日本企业在中国也要改变许多的东西,才能从管理上达到理想的结果.文化背景的不同,也就造就了管理方式的不同.<br />
</span></span></span></span></span>&nbsp; &nbsp;<span style="color: rgb(255, 154, 24);"> &nbsp;<span style="color: rgb(255, 110, 24);"> <em>国内现在通过了CMM/CMMI从二级到五级那么多的企业，有多少企业生存的比以前好？又有多少家企业从此就消失在这个行业中了？</em></span></span><span style="color: rgb(255, 110, 24);"><em><br />
<span style="color: rgb(2, 0, 0);"><em>&nbsp;&nbsp;&nbsp; </em></span></em><span style="color: rgb(2, 0, 0);">目前国内许多企业都希望能够过CMM论证,不论从哪一级开始,这些东西都是一种衡量的工具,就比如说企业在选择软件公司的时候,有五家公司,其中三家有CMM,两家没有.那么没有的那两家至少在先机上就输了一踌.如有强辩者说:"CMM这些都是花钱买的,做做样子而已,我们的开发实力强.以实力说话.",其实从客户的角度来考虑,如果你们真有实力,那么你们也做一下样子.其实CMM的本质指示一个管理的思维,其中的许多具体的内容可以更具开发的需要来进行删减,来辅助你管理项目.但是国内很多的管理者做了买椟还珠的事情,一旦过了级,就能保证项目管理质量上能够提高一层,我到觉得不见得.关键在于执行.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<em><span style="color: rgb(255, 115, 32);"> 3. CMM更适合大型项目<br />
&nbsp; 这是不争的事实，因为当初CMM的起源就是美国国防部为了有效控制和管理其项目而委托SEI的研究成果。国防部的项目100人月的项目就算是小项目，大部分都是几百人月甚至上千人月的项目。这种情况下没有规范的过程是不可行的事情。回头看看中国国内的情况，100人月的项目绝对算是大项目了，超过500万合同额的软件项目很少，有些甲方为了将项目分给更多的关系企业，往往人为地分成不同的项目来分包给不同的开发商。这些小项目往往是3-6个月的工期，交付的压力很大，客户的不成熟又往往看眼前的进度，而不是日后的质量。这就导致了国内很多项目是摇摇晃晃上线，提心吊胆维护，最好软件改的差不多稳定了，钱也花的差不多了。看起来是花很少的钱开发完成了，但是花更多的钱来修补。其实如果前期就能够按部就班，按照客观规律来做事，Total Cost就会减少很多。<br />
&nbsp;&nbsp;&nbsp; </span></em><span style="color: rgb(255, 115, 32);"><span style="color: rgb(4, 0, 0);">其实CMM的思想是很先进,但是往往我们在于使用上出现了偏差,造成了结果就与我们逾期的要差,如果对于CMM进行裁剪使用的话,根据我们的实际需要来制定我们的流程,我相信实际的项目会帮助,就像要适应中国特色的国情.但是如果生搬硬套来使用的话,那就不伦不类了.我们公司想在也在过CMM4,不过有一个笑话就是,一个很小的项目,一个人做了一个礼拜(属于修改追加的项目)结果项目做完很久了,却被QA开了警告,原因是文档没有按照流程进行.一个礼拜的开发项目,文档要做半个礼拜.<br />
&nbsp;&nbsp;&nbsp; 凡是都有使用范围,就像没有一种要可以治百病.CMM有错没有,我觉得他收到冤枉.错者在于人.<br />
<span style="color: rgb(255, 115, 32);"><em>5. 是什么推动了CMM在中国的风行？<br />
&nbsp; CMM其实在欧洲和美国知名度并不高，很多大的软件企业甚至都不知道这是个什么东西，但是在中国，随着各地政府的优惠，加上不成熟的客户的跟风。大部分的企业看中的是一纸证书和政府的买单。很多国内知名的软件企业拿到证书后就解散了CMM的SEPG小组。而且国内的通过率历来是100%的事情，大家相信这其中没有猫腻？不在少数的通过CMM3级甚至5级的软件企业，这一两年过去后反而关门了。因此说如果没有一个正确的态度和企图来过CMM，那么再好的模型可能也起不到它的效果。</em><br />
</span><span style="color: rgb(4, 0, 0);">&nbsp;&nbsp; 如果没有CMM,企业也会选择其他的管理标准进行推广,今后企业往合作划和集约化发展,彼此之间的合作就必须有考量的质量的标准,今后中国企业不会像小作坊式的合作模式,相互配合,彼此分工.那么CMM也就会在这个时候起到他应该有的作用.</span></span></span></span><em><span style="color: rgb(255, 154, 24);"><span style="color: rgb(2, 0, 0);"><span style="color: rgb(255, 115, 32);"><span style="color: rgb(4, 0, 0);"><br />
</span></span></span></span></em></span><em></em><em><span style="color: rgb(255, 154, 24);"><strong></strong>
</span></em>
<img src ="http://www.cnblogs.com/yice/aggbug/925453.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41295/" target="_blank">[新闻]2008年7月25日IT博客精选</a>]]></description></item><item><title>客户比产品更重要</title><link>http://www.cnblogs.com/cnblogsfans/archive/2008/04/12/1150339.html</link><dc:creator>王德水</dc:creator><author>王德水</author><pubDate>Sat, 12 Apr 2008 07:49:00 GMT</pubDate><guid>http://www.cnblogs.com/cnblogsfans/archive/2008/04/12/1150339.html</guid><wfw:comment>http://www.cnblogs.com/cnblogsfans/comments/1150339.html</wfw:comment><comments>http://www.cnblogs.com/cnblogsfans/archive/2008/04/12/1150339.html#Feedback</comments><slash:comments>19</slash:comments><wfw:commentRss>http://www.cnblogs.com/cnblogsfans/comments/commentRss/1150339.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cnblogsfans/services/trackbacks/1150339.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp; 发现博客园里99%都是技术文章，很少有管理的经验分享，我们很多人都想有技术到管理，但是管理不是一蹴而就的，需要一定的时间积累，如果你的天赋高，时间可能会短些，但是管理设计到人，人是最复杂的，所以我认为管理没有最好，只有更好。我想每个技术人员能在做技术是接触一些管理会对技术也是有帮助的。这样技术人员可能会理解市场人员，会明白有时销售人员确实是瞎说也有瞎说的道理。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 园子里大牛很多，很多都是搞管理的，但是很少有分享管理经验的，我觉得如果能把一些管理分享给我们，那么做技术的会理解做管理的，做管理也更有经验。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 从毕业到现在，从开始做技术到现在既做项目管理也做技术，虽然没什么经验，但是可以提供些经验给没有工作过的朋友，我这里只是想开过头，希望大牛们能出来分享分享经验。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 今天我想说的是客户比产品更重要：</p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 我想很多一看题目可能立马觉得这个还用讨论吗？有的可能是坚决反对，我用两个亲身经历来说这个问题 </p> <p><strong>&nbsp;&nbsp; 一、销售人员天天吹牛，我们是在看不下去了</strong></p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们可能有时候觉得销售人员说谎不脸红，明明我们没这个功能，我们实现不了这个功能，销售全部都说没问题，甚至销售人员说的都是错的，我们技术人员看不下去了，如果你和销售一起做售前顾问，你可能是在忍受不了。但是我想说的就是技术人员都比较单纯，意思就是都是好人，不想骗人。但是如果销售人员也像你这么单纯，那么客户就没有了，因为客户也不懂技术，两个不懂技术的人更有共同语言不是吗？（举个例子，上初中时，我在老家，我给一个没上个学的老人说地球一直都在自转，他到处说我读书读出毛病了），有时销售知道是瞎说，是吹牛，但是如果不吹，客户连理你的机会都没有，然后找别人做项目了，你可能奇怪别人比你还差，咋都能接单，因为别人的销售更能吹，再加上技术人员一起吹，那单子基本上是跑不掉了。而且即使你没拿到这个单子，你失去了这个产品，但是你赢得了客户，他可能会买你的别的产品，或者在另一家把项目做出问题是再来找你， 因为销售知道客户比产品本身更重要。</p> <p>&nbsp;</p> <p><strong>&nbsp; 二：产品好坏跟我没关系，我只关心用你的东西能不能让我赚到钱，能不能提高政绩</strong></p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们很多项目的客户直接负责人一般都不是“皇帝”，而是“和绅”，我接触过一个客户就说，你们的产品能不能运行是次要的，重要的是能不能在我负责时让我赚到钱，让我提高政绩，哪怕是你们的系统只是个摆设。所以我们在做产品的功能是尤其要注意这点，比如这个项目里有财务部，财务部负责你的这个项目，财务部管里一种商品，这种商品商品卖得多，他们提成多，那么设计产品是这个就是重点，怎么让买这种商品方便，量大（这里例子有一定特殊性）。</p> <p>&nbsp;</p> <p><strong>三：过度设计开发会让客户丧失信任</strong></p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有时我们过分向客户推荐自己的想法，认为这样这样会更好，产品做得很完美，但是客户根本不在乎你的那个功能，比如客户说设计一个搜索功能，显示所有产品，我没的开发人员就想给他做个排序、做个Ajax效果，然后还给客户说加点时间。客户就会很烦感（当然懂技术，懂用户心理学除外，但是记住我们的客户一般比较关注成本，就像我们买衣服，别人说我给你价格帽子，只要1块钱，我想你可能也不买了吧）。</p> <p>&nbsp;</p> <p><strong>四：“你应该这样才是对的”会让客户很反感</strong></p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们很多人员老觉得客户脑子有问题，他怎么能这样做了，这样做不好，但是客户要那样做，我们为何不那样做呢，你觉得好的地方，那只是你觉得，比如我们想去里个平头，往那一坐，理发师说给你来个卷发吧，你越想里平头，他就说你里平头咋不好看，你还会在这理发吗？我想理平头的想法肯能酝酿很久了吧。</p> <p>&nbsp;</p> <p>当然，以上某些可能只会出现国内的客户，国外客户可能不适用，只是个人理解，欢迎提出不同意见。</p> <p>总之一句话，盯住客户不要盯住产品，产品本身不会给你付费，客户才会给你付费</p> <p>&nbsp;</p> <p>欢迎转载，转载请说明出处</p> <p>作者：王德水&nbsp; <a href="http://cnblogsfans.cnblogs.com">http://cnblogsfans.cnblogs.com</a></p><img src ="http://www.cnblogs.com/cnblogsfans/aggbug/1150339.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41292/" target="_blank">[新闻]微软称Windows 7开发很顺利 IE 8年底上市</a>]]></description></item><item><title>关于阅读技术类图书的思考</title><link>http://www.cnblogs.com/cj723/archive/2008/03/27/1124849.html</link><dc:creator>伍迷</dc:creator><author>伍迷</author><pubDate>Thu, 27 Mar 2008 04:50:00 GMT</pubDate><guid>http://www.cnblogs.com/cj723/archive/2008/03/27/1124849.html</guid><wfw:comment>http://www.cnblogs.com/cj723/comments/1124849.html</wfw:comment><comments>http://www.cnblogs.com/cj723/archive/2008/03/27/1124849.html#Feedback</comments><slash:comments>92</slash:comments><wfw:commentRss>http://www.cnblogs.com/cj723/comments/commentRss/1124849.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cj723/services/trackbacks/1124849.html</trackback:ping><description><![CDATA[摘要: <div style="float:right"><img src="http://www.cnblogs.com/images/cnblogs_com/cj723/112631/r_book1.gif"></div><br>读书永远没有好老师的好教学来得有效（注意需要强调“好”字）。…………从写作形式上分，有教材类、休闲类、论文类等；从价位上，有10-30、30-60、60-90、90-抢钱没商量价等；从书的厚度或阅读时间来讲，有三天读完、两周读完、两月读完、半年读完、阅读三遍、终生阅读等分类；当然最重要的分类，即按书的写作质量来分，应该是垃圾书、一般书、可读书、精品书、绝对必读书等。………别的行业可能很需要参考书，我看编程行业基本不需要参考书，Google百度就是最好的参考。…………旁边那台笔记本或PC要来干吗呢？不是让你来玩游戏的，更不是让你和MM聊QQ的，而是用来写代码的，代码只是看看是没用的，一定要自己打一遍，最好的效果是看懂了后，根据自己理解的来编，效果差一些的是照着书中的抄一遍，但无论哪种都比你根本不写只是看要强。&nbsp;&nbsp;<a href='http://www.cnblogs.com/cj723/archive/2008/03/27/1124849.html'>阅读全文</a><img src ="http://www.cnblogs.com/cj723/aggbug/1124849.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41291/" target="_blank">[新闻]中国SNS捱过严冬 未来十八个月决定SNS生死</a>]]></description></item><item><title>LINQ体验系列文章导航</title><link>http://www.cnblogs.com/lyj/archive/2008/03/25/1119671.html</link><dc:creator>李永京</dc:creator><author>李永京</author><pubDate>Mon, 24 Mar 2008 16:05:00 GMT</pubDate><guid>http://www.cnblogs.com/lyj/archive/2008/03/25/1119671.html</guid><wfw:comment>http://www.cnblogs.com/lyj/comments/1119671.html</wfw:comment><comments>http://www.cnblogs.com/lyj/archive/2008/03/25/1119671.html#Feedback</comments><slash:comments>58</slash:comments><wfw:commentRss>http://www.cnblogs.com/lyj/comments/commentRss/1119671.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/lyj/services/trackbacks/1119671.html</trackback:ping><description><![CDATA[摘要: 本系列共三部分，第一部分讲述了Visual Studio 2008新特性，第二部分介绍了C# 3.0新语言特性和改进。第三部分开始讲解LINQ，先整体介绍了LINQ，再从LINQ to SQL语句入手贯穿了LINQ的精髓。<br>本文给出了本系列的导航。通过这个系列，您可以迅速入门LINQ。</span>&nbsp;&nbsp;<a href='http://www.cnblogs.com/lyj/archive/2008/03/25/1119671.html'>阅读全文</a><img src ="http://www.cnblogs.com/lyj/aggbug/1119671.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41290/" target="_blank">[新闻]微软追求雅虎告一段落 与Facebook展开搜索合作</a>]]></description></item><item><title>平台架构——体系结构</title><link>http://www.cnblogs.com/llxxbb/archive/2008/03/24/platform_1.html</link><dc:creator>李学斌</dc:creator><author>李学斌</author><pubDate>Mon, 24 Mar 2008 01:12:00 GMT</pubDate><guid>http://www.cnblogs.com/llxxbb/archive/2008/03/24/platform_1.html</guid><wfw:comment>http://www.cnblogs.com/llxxbb/comments/1119131.html</wfw:comment><comments>http://www.cnblogs.com/llxxbb/archive/2008/03/24/platform_1.html#Feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://www.cnblogs.com/llxxbb/comments/commentRss/1119131.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/llxxbb/services/trackbacks/1119131.html</trackback:ping><description><![CDATA[摘要:     在”项目à产品à平台我的编程人生“中大体说明了一下我在一个什么样的需求环境下要搭建一个平台，及要建成一个什么样的平台之后，本文将着重讲一下这个平台的体系结构，及设计要点。有下面的内容：<br>l  设计要点<br><br>Ø  应用与Web Service(简称WS)分离。<br><br>Ø  数据库与WS分离<br><br>Ø  应用集成<br><br>l  结构说明<br><br>Ø  简化的应用调用接口<br><br>Ø  重点模块说明<br><br>Ø  心血的结晶<br><br>l  接下来的文章<br>&nbsp;&nbsp;<a href='http://www.cnblogs.com/llxxbb/archive/2008/03/24/platform_1.html'>阅读全文</a><img src ="http://www.cnblogs.com/llxxbb/aggbug/1119131.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41289/" target="_blank">[新闻]百度C2C项目年底上线</a>]]></description></item><item><title>[从设计到架构]第三回：设计的分寸</title><link>http://www.cnblogs.com/anytao/archive/2008/03/19/anytao_design_03.html</link><dc:creator>Anytao</dc:creator><author>Anytao</author><pubDate>Tue, 18 Mar 2008 16:51:00 GMT</pubDate><guid>http://www.cnblogs.com/anytao/archive/2008/03/19/anytao_design_03.html</guid><wfw:comment>http://www.cnblogs.com/anytao/comments/1112371.html</wfw:comment><comments>http://www.cnblogs.com/anytao/archive/2008/03/19/anytao_design_03.html#Feedback</comments><slash:comments>39</slash:comments><wfw:commentRss>http://www.cnblogs.com/anytao/comments/commentRss/1112371.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/anytao/services/trackbacks/1112371.html</trackback:ping><description><![CDATA[摘要: <div style="float:right"><img src="http://www.cnblogs.com/images/cnblogs_com/anytao/125111/o_Anytao_Design_Logo2008_En.jpg"></div>话书两回[第一回：设计，应该多一点]和[第二回：对象的旅行---对象和人，两个世界，一样情怀]，作者欲言又止，吊起胃口又玩起了捉迷藏。挑起设计与架构之话题，谁料半道杀出程咬金[《你必须知道的.NET》]，招致[从设计到架构系列]的中道搁浅。不过，搁浅不代表停止，中道不意味绊倒，而是期待更多。以设计为话题来把玩，对任何人来说都有点沉甸甸的分量，所以限于作者的一点点花拳绣腿，只能说点到一切玄机的皮毛。而更多的期待，则是抛出问题和一点浅见，迎来无数的砖头，由更多的大牛敲打、点缀、重构，形成一个真正称得上设计的架构。<br>对设计来说，或许永远没有唯一的答案，你只能无限的接近最好。&nbsp;&nbsp;<a href='http://www.cnblogs.com/anytao/archive/2008/03/19/anytao_design_03.html'>阅读全文</a><img src ="http://www.cnblogs.com/anytao/aggbug/1112371.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41288/" target="_blank">[新闻]鲍尔默：微软每年至少投资25亿美元死拼Google</a>]]></description></item><item><title>“项目产品平台”我的编程人生</title><link>http://www.cnblogs.com/llxxbb/archive/2008/03/18/myprogramroad.html</link><dc:creator>李学斌</dc:creator><author>李学斌</author><pubDate>Tue, 18 Mar 2008 01:47:00 GMT</pubDate><guid>http://www.cnblogs.com/llxxbb/archive/2008/03/18/myprogramroad.html</guid><wfw:comment>http://www.cnblogs.com/llxxbb/comments/1110983.html</wfw:comment><comments>http://www.cnblogs.com/llxxbb/archive/2008/03/18/myprogramroad.html#Feedback</comments><slash:comments>29</slash:comments><wfw:commentRss>http://www.cnblogs.com/llxxbb/comments/commentRss/1110983.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/llxxbb/services/trackbacks/1110983.html</trackback:ping><description><![CDATA[摘要:         如果您认为这篇文章主要讲“我”的人生经历，那就错了，我很少写感慨之类的文章。没有哗众取宠的意思，只是想说我是如何走上架构这条路的，以及架构的心得，并讲述我目前正在结构的内容。也为以后的文章做一个铺垫。<br><br>         主要讲下面的几件事情：<br><br>项目à产品à平台的经过<br><br>架构心得<br><br>现在的架构内容<br><br>架构的完美性<br>&nbsp;&nbsp;<a href='http://www.cnblogs.com/llxxbb/archive/2008/03/18/myprogramroad.html'>阅读全文</a><img src ="http://www.cnblogs.com/llxxbb/aggbug/1110983.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41287/" target="_blank">[新闻]CNNIC发布《第22次中国互联网络发展状况统计报告》</a>]]></description></item><item><title>三问TDD: 单元测试总是好的吗？</title><link>http://www.cnblogs.com/guaiguai/archive/2008/03/16/1108079.html</link><dc:creator>怪怪</dc:creator><author>怪怪</author><pubDate>Sat, 15 Mar 2008 18:36:00 GMT</pubDate><guid>http://www.cnblogs.com/guaiguai/archive/2008/03/16/1108079.html</guid><wfw:comment>http://www.cnblogs.com/guaiguai/comments/1108079.html</wfw:comment><comments>http://www.cnblogs.com/guaiguai/archive/2008/03/16/1108079.html#Feedback</comments><slash:comments>42</slash:comments><wfw:commentRss>http://www.cnblogs.com/guaiguai/comments/commentRss/1108079.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/guaiguai/services/trackbacks/1108079.html</trackback:ping><description><![CDATA[摘要: 有关测试“后行”也可以接受的说法，说明了一个事实：即使是最中坚的测试粉丝，也经常需要修正自我。很多理论抛出来之后，在现实面前，都不断的妥协。一些妥协到基本完善，一些妥协到基本完蛋。 &nbsp;&nbsp;<a href='http://www.cnblogs.com/guaiguai/archive/2008/03/16/1108079.html'>阅读全文</a><img src ="http://www.cnblogs.com/guaiguai/aggbug/1108079.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41286/" target="_blank">[新闻]巨人与51.COM本月26日互通帐号</a>]]></description></item><item><title>什么是专业? 谁更专业?</title><link>http://www.cnblogs.com/guaiguai/archive/2008/03/13/1104168.html</link><dc:creator>怪怪</dc:creator><author>怪怪</author><pubDate>Thu, 13 Mar 2008 10:02:00 GMT</pubDate><guid>http://www.cnblogs.com/guaiguai/archive/2008/03/13/1104168.html</guid><wfw:comment>http://www.cnblogs.com/guaiguai/comments/1104168.html</wfw:comment><comments>http://www.cnblogs.com/guaiguai/archive/2008/03/13/1104168.html#Feedback</comments><slash:comments>32</slash:comments><wfw:commentRss>http://www.cnblogs.com/guaiguai/comments/commentRss/1104168.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/guaiguai/services/trackbacks/1104168.html</trackback:ping><description><![CDATA[摘要: 这里有一个据说的但是真实性上还算有保障的例子，而且这样的例子在咱们身边也存在很多： 某测试大牛在微软做的非常好， 被Google挖走了；干了1年之后， 实在干不下去了， 于是离职。 别人问他怎么回事， 他说简而言之一句话： Google根本就不存在他能够发挥专长的环境。<br>&nbsp;&nbsp;<a href='http://www.cnblogs.com/guaiguai/archive/2008/03/13/1104168.html'>阅读全文</a><img src ="http://www.cnblogs.com/guaiguai/aggbug/1104168.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41285/" target="_blank">[新闻]FEEDSKY和BLOGBUS的出路</a>]]></description></item><item><title>来谈谈从专业到更专业</title><link>http://www.cnblogs.com/worksguo/archive/2008/03/13/1103704.html</link><dc:creator>works guo</dc:creator><author>works guo</author><pubDate>Thu, 13 Mar 2008 06:33:00 GMT</pubDate><guid>http://www.cnblogs.com/worksguo/archive/2008/03/13/1103704.html</guid><wfw:comment>http://www.cnblogs.com/worksguo/comments/1103704.html</wfw:comment><comments>http://www.cnblogs.com/worksguo/archive/2008/03/13/1103704.html#Feedback</comments><slash:comments>31</slash:comments><wfw:commentRss>http://www.cnblogs.com/worksguo/comments/commentRss/1103704.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/worksguo/services/trackbacks/1103704.html</trackback:ping><description><![CDATA[摘要: <em><span style="font-size: 12pt;"><span style ="font-size: 14pt;"><span style="color: red;">本文上的是从谈为什么需要专业----》到什么是专业----》什么叫够专业---》什么叫比专业更专业</span></span></span></em><br />&nbsp;&nbsp;<a href='http://www.cnblogs.com/worksguo/archive/2008/03/13/1103704.html'>阅读全文</a><img src ="http://www.cnblogs.com/worksguo/aggbug/1103704.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41284/" target="_blank">[新闻]奇虎回应:瑞星半年免费版像是一个恶意软件</a>]]></description></item><item><title>实施TDD时的常见问题</title><link>http://www.cnblogs.com/wayfarer/archive/2008/03/13/1102901.html</link><dc:creator>张逸</dc:creator><author>张逸</author><pubDate>Thu, 13 Mar 2008 03:14:00 GMT</pubDate><guid>http://www.cnblogs.com/wayfarer/archive/2008/03/13/1102901.html</guid><wfw:comment>http://www.cnblogs.com/wayfarer/comments/1102901.html</wfw:comment><comments>http://www.cnblogs.com/wayfarer/archive/2008/03