﻿<?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>博客园-xiaomin</title><link>http://www.cnblogs.com/xiaomin/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 10 Feb 2010 03:42:22 GMT</lastBuildDate><pubDate>Wed, 10 Feb 2010 03:42:22 GMT</pubDate><ttl>60</ttl><item><title>CLRviaCSharp读书随笔-第一章 1.3</title><link>http://www.cnblogs.com/xiaomin/archive/2009/05/15/1457566.html</link><dc:creator>肖敏</dc:creator><author>肖敏</author><pubDate>Fri, 15 May 2009 03:41:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaomin/archive/2009/05/15/1457566.html</guid><description><![CDATA[<p>阅读: 1314 评论: 3 作者: <a href="http://www.cnblogs.com/xiaomin/" target="_blank">肖敏</a> 发表于 2009-05-15 11:41 <a href="http://www.cnblogs.com/xiaomin/archive/2009/05/15/1457566.html" target="_blank">原文链接</a></p><p><strong>1.3 加载公共语言运行库</strong></p>
<p><strong><span style="font-weight: normal">&#160;&#160; &#160; &#160;</span>VS中类库项目可以单独运行吗？</strong></p>
<p>&#160;&#160; &#160; &#160;&#8220;我们构建的每个程序集可以是一个可执行应用程序，也可以是一个DLL&#8221;。</p>
<p>&#160;&#160; &#160; &#160;我记得以前写类库的时候，用VS2005新建一个ClassLibrary,比如说写一个字符串处理的辅助类StringHelper。写好以后要调试的时候就犯愁了，类库是不能单独运行的呀，所以我又增加一个控制台程序，然后引用这个类库来进行调试。</p>
<p>&#160;&#160; &#160; &#160;实际上，类库和EXE的唯一区别是有没有Main函数。我们新建一个ClassLibrary,然后在Class1中增加main函数，它其实就变成了一个应用程序。</p>
<p>&#160;</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_104729" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_104729').style.display='none'; document.getElementById('Code_Open_Image_104729').style.display='inline'; document.getElementById('Code_Open_Text_104729').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_104729" style="display: inline" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_104729').style.display='none'; getElementById('Code_Closed_Image_104729').style.display='inline'; getElementById('Code_Closed_Text_104729').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_104729" style="display: none">Code</span><span id="Code_Open_Text_104729" style="display: inline"><br />
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080">&#160;1</span>&#160;<span style="color: #0000ff">using</span><span style="color: #000000">&#160;System;<br />
</span><span style="color: #008080">&#160;2</span>&#160;<span style="color: #0000ff">using</span><span style="color: #000000">&#160;System.Collections.Generic;<br />
</span><span style="color: #008080">&#160;3</span>&#160;<span style="color: #0000ff">using</span><span style="color: #000000">&#160;System.Text;<br />
</span><span style="color: #008080">&#160;4</span>&#160;<span style="color: #000000"><br />
</span><span style="color: #008080">&#160;5</span>&#160;<span style="color: #0000ff">namespace</span><span style="color: #000000">&#160;ClassLibrary1<br />
</span><span style="color: #008080">&#160;6</span>&#160;<span style="color: #000000">{<br />
</span><span style="color: #008080">&#160;7</span>&#160;<span style="color: #000000">&#160;&#160;&#160;&#160;</span><span style="color: #0000ff">public</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">class</span><span style="color: #000000">&#160;Class1<br />
</span><span style="color: #008080">&#160;8</span>&#160;<span style="color: #000000">&#160;&#160;&#160;&#160;{<br />
</span><span style="color: #008080">&#160;9</span>&#160;<span style="color: #000000">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff">public</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">static</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">void</span><span style="color: #000000">&#160;Main(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&#160;args)<br />
</span><span style="color: #008080">10</span>&#160;<span style="color: #000000">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
</span><span style="color: #008080">11</span>&#160;<span style="color: #000000">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
</span><span style="color: #008080">12</span>&#160;<span style="color: #000000">&#160;&#160;&#160;&#160;}<br />
</span><span style="color: #008080">13</span>&#160;<span style="color: #000000">}</span><font color="#008080"><br />
</font></span></div>
<p>&#160;</p>
<p style="text-align: left">&#160;&#160; &#160; &#160;然后F5开始运行，出现一个错误提示：<img height="146" alt="" src="http://images.cnblogs.com/cnblogs_com/xiaomin/%E7%B1%BB%E5%BA%93%E5%87%BA%E9%94%99.jpg" width="664" /></p>
<p>&#160;&#160; &#160; &#160;这个错误并不是程序的错，而是编译的错，既然&#160;&#8220;我们构建的每个程序集可以是一个可执行应用程序，也可以是一个DLL&#8221;，就应该要告诉编译器，我们是要把这个项目编译成dll还是exe,因此在项目属性->application->Output type中选成Console Application就行了。</p>
<p>&#160;&#160; &#160; &#160;我刚刚知道能这么用的时候觉得异常惊讶，原来VS里那么多项目类型都是蒙人的，我原来以为完全不同的东西（windows应用程序，控制台应用程序和类库）原来差别如此之小。看来可视化编程的方式有时确实会起到误导的作用。实际上EXE和DLL文件都是PE格式。</p>
<p>&#160;&#160; &#160; &#160;我们可以使用VS自带的调试工具，Modules窗口查看一下这个程序的进程中的模块。</p>
<p style="text-align: center"><img alt="" src="http://images.cnblogs.com/cnblogs_com/xiaomin/%E8%BF%9B%E7%A8%8B%E4%B8%AD%E7%9A%84%E6%A8%A1%E5%9D%97.jpg" border="0" /><br />
</p>
<p>&#160;&#160; &#160; &#160;我们看到里面有两个EXE模块。我们在任务管理器中查看进程的时候，一个进程好像总对应一个EXE文件。但是为什么这里有两个呢？</p>
<p>&#160;&#160; &#160; &#160;<strong>一个进程就像一列火车，只有EXE能做火车头。</strong></p>
<p>&#160;&#160; &#160; &#160;一个进程中包含很多模块，这非常象一列火车，EXE是火车头，DLL是车厢。只有火车头才能带动火车开动，但是，一列火车可以有多个火车头吗，当然可以。在这个例子当中，火车头其实是ClassLibrary1.vshost.exe,而ClassLibrary1.exe虽然是个火车头，在这里充当了第一节车厢。</p>
<p><span style="font-weight: bold">&#160;&#160; &#160; &#160;PE文件格式就像一本书</span>&#160;</p>
<p>&#160;&#160; &#160; &#160;一个项目总是包含很多源代码文件，包括资源文件等等，编译程序只是把多个源代码文件编译成了一个程序集文件，也可以说PE格式文件。这有点像把几十篇散文编成一本散文集。实际上，PE格式虽然非常复杂，但是粗略的看起来，PE文件格式非常像书的结构。大致分为三部分，封面前言，目录，内容。</p>
<p style="text-align: center"><span style="font-weight: bold">&#160;&#160;<img alt="" src="http://images.cnblogs.com/cnblogs_com/xiaomin/PE%E6%A0%BC%E5%BC%8F.JPG" border="0" /><br />
</span></p>
<p>&#160;&#160; &#160; &#160;<strong>知道这些有啥用？</strong>&#160;</p>
<p>&#160;&#160; &#160; &#160;PE文件格式当然是编译器开发人员，加密解密的基本知识，但是对应用程序开发者有什么用处？</p>
<p>&#160;&#160; &#160; &#160;托管程序集也好，win32函数库也好,com也好，都是PE文件格式。我想知道这一点的好处是，我们至少知道，在技术日新月异的背后，总是有些不变的东西，而掌握这些不变的东西，以不变应万变，也许能减少一点对学习新技术的心理压力吧。</p>
<p>&#160;&#160; &#160; &#160;详细的PE文件格式文档可到看雪论坛<a href="http://bbs.pediy.com/showthread.php?threadid=21932">http://bbs.pediy.com/showthread.php?threadid=21932</a></p><img src="http://www.cnblogs.com/xiaomin/aggbug/1457566.html?type=1" width="1" height="1" alt=""/><p>评论: 3　<a href="http://www.cnblogs.com/xiaomin/archive/2009/05/15/1457566.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/xiaomin/archive/2009/05/15/1457566.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56818/" target="_blank">Google Buzz的优缺点分析</a><span style="color:gray">(2010-02-10 11:39)</span><br/>· <a href="http://news.cnblogs.com/n/56817/" target="_blank">京东商城刘强东：两个回合谈定1.5亿美元融资</a><span style="color:gray">(2010-02-10 11:30)</span><br/>· <a href="http://news.cnblogs.com/n/56816/" target="_blank">Google走到关键时刻：Buzz发布的背后</a><span style="color:gray">(2010-02-10 11:30)</span><br/>· <a href="http://news.cnblogs.com/n/56815/" target="_blank">李开复创新工场发展基金曝光 首单投移动互联</a><span style="color:gray">(2010-02-10 11:28)</span><br/>· <a href="http://news.cnblogs.com/n/56814/" target="_blank">Sun前CEO欲写自传 称经济危机是Sun被购主因</a><span style="color:gray">(2010-02-10 11:25)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" 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>CLRviaCSharp读书随笔-第一章 1.1 1.2</title><link>http://www.cnblogs.com/xiaomin/archive/2009/05/07/1452130.html</link><dc:creator>肖敏</dc:creator><author>肖敏</author><pubDate>Thu, 07 May 2009 10:09:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaomin/archive/2009/05/07/1452130.html</guid><description><![CDATA[<p>阅读: 1482 评论: 5 作者: <a href="http://www.cnblogs.com/xiaomin/" target="_blank">肖敏</a> 发表于 2009-05-07 18:09 <a href="http://www.cnblogs.com/xiaomin/archive/2009/05/07/1452130.html" target="_blank">原文链接</a></p><p>【前言】</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一直想学习很多大师级人物，对于一个很小的事情，都能入木三分，来龙去脉的讲的头头是道。曾经为了搞清楚反射的概念，一直追述到Smith的博士论文（Smith, B. C. (1982): Reflection and Semantics in a Procedural Language, Ph.D. thesis, MIT Laboratory for Computer Science Report MIT-TR-272.）好不容易下载到原文，发现居然长达几百页。当时热情的火苗子刺溜吧唧，就灭了。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我想我本就不是大师，何必去装呢。干嘛非要把自己折磨成这样，此时终于明白&#8220;好读书不求甚解&#8221;的真正含义。生活工作，不都是为了开心吗。我想还是回归本性，用我喜欢的随意的风格，对于技术方面，工作中用不到的就跳过去，有偏见的地方也不怕人笑话，我把我看书的所思所想，好好说个痛快，这不是博客本来的初衷么。</p>
<p><strong>1.1将源代码编译为托管模块。</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>&#8220;编译&#8221;就是&#8220;翻译&#8221;</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 说实在的，长期以来一直对&#8220;编译&#8221;这两个词抱着敬畏的态度。觉得编译技术高深莫测遥不可及。突然有天恍然大悟，&#8220;编译&#8221;就是&#8220;翻译&#8221;，编译就是把一种语言翻译成另一种语言，C#编译成IL,C++编译成汇编，"How are you"翻译成"你好吗"，啥区别没有。什么是编译优化？就是把"How are you"翻译成"你吃了吗?"程序员是干什么的?不就是替人类充当与机器对话的翻译嘛！玩的都是文字游戏。如果程序员还有点社会价值的话，那纯粹是因为机器的价值。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>CLR也是个翻译</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLR的名字没有JVM好听，关键是runtime这个单词给人一种空荡荡的感觉，而machine比较形象。其实JIT才是真正的翻译，把IL翻译成汇编语言。这让我想起我一个朝鲜族同学，她说，她学英语的时候，先要把英语在脑子里翻译成汉语，再把汉语翻译成韩语才能理解。这不就是C#-&gt;IL-&gt;汇编么。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IL的引入其实是为了解决COM的一些问题，比如一个名为Show的方法,COM里面包含的是Show方法的偏移地址，而.NET程序集里放的是Show方法签名。我坦白交代，以前没有做过COM的开发，所以开始的时候无法理解.NET里那么多互操作的东东。但是至少我现在知道了,office编程得用。一个函数动则几十个参数，还好C#4.0来救大家了。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; <strong>&#8220;现在我们决定使用哪种编程语言&#8221;</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由此谈到语言选择的问题，其实在现实工作中，使用什么语言我们根本做不了主，往往取决于毕业后第一家公司用什么语言。一旦选择了一种语言，基本就决定了以后大致的职业发展方向。如果是使用C语言做比较低层的开发，那么用到.NET平台的机会就少了。因此虽然.NET平台提供了多种语言选择的机会，但是有一个隐形的边界是我们可能会忽略的，那就是不管用什么语言开发，你都在使用.NET平台.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .NET平台主要是针对应用程序的，当我们选择了这个平台时，就意味着我们的工作会关注行业，关注领域，关注客户需求比较多。应用程序的特点是针对行业，变化多端，因人而变。在这个基础之上，我们在.NET平台上选择语言的唯一准则就是工作效率。这个工作效率并不光指语言的工作效率，同时包含团队成员的熟悉程度，语言普及程度等，都会影响效率。因此我们在开发过程中，或者使用开发语言和工具的过程中，尽量的忘记与此无关的东西，甚至忘记语言的名字，C#或者是JAVA，我们要的只是客户价值和工作效率。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IT技术和编程语言的百花齐放日新月异往往对程序员来说是个莫大的压力，如果是这样的话，应该是违背了语言发明者的初衷。总得来说，新的东西出来总是为了解决老东西解决不了的问题，因此对于新技术的关注点应该放在经常性的总结工作中碰到的疑难杂症，然后去新技术中寻找好的解决方案。如果你工作中真的啥问题没有，那么就恭喜你，可以不用管那些花开花落了。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我所在的公司在面向服务的新技术潮流上面就是一个很好的获益的例子。因为比较早的开展了Web Service的服务，现在已经有一个庞大的数据中心,行业内超过一半的信息都放在这里,我们的服务和软件是捆绑在一起销售的，服务费一年交一次。现在就算软件不卖钱，只卖服务费都够吃个七顿巴八顿的了，因此其他公司根本没法竞争，基本在这个行业站稳了老大的位置，这次金融风暴不仅没有倒下，反而收购了不少公司。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最后一个事情是最头疼的，就是对程序员的生涯规划问题。这么多新技术新语言，学哪个更有钱途呢？不知道，所以什么都得学。我觉得还是把现在公司里的技术彻底搞明白，然后寻找里面潜伏的问题，再从新技术中寻找解决方案比较踏实可靠。假如公司确实没有啥技术可言，那得考虑换家好点的公司了。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>说点正事</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一个程序集可以包含几个文件，我们通常看到的都是一个文件，我工作上也没用到过，不管它。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 托管程序集也是DLL,com也是dll,win32也是dll.我一直很纳闷这三种东西有多少人十分清楚。首先，它们都是PE格式，再者，win32的dll是函数库，com的dl是类型库，而托管的dll嘛，就是加了IL和元数据的啦。不知道我说的对不对。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 元数据又是一个不好听的名词。它可以说是IL类型的使用说明书，.NET本质论提到一点，它对于COM世界的改进来说，它是&#8220;机器可读&#8221;的。机器可读是CLR或者是虚拟机的前提呀。</p>
<p><span style="font-weight: bold; ">1.2 将托管模块合并成程序集</span></p>
<p><strong>&nbsp;&nbsp; &nbsp; &nbsp;源代码是原料，模块是零部件，DLL是汽车。</strong></p>
<p><strong>&nbsp;&nbsp; &nbsp; &nbsp;</strong>托管模块这破玩意一直困扰我很久，我们平常只看到一个类库在VS中编译完以后就生成DLL，好像跟模块并不是很熟的样子。结果是因为VS偷偷调用了MSBUILD。MSBUILD再调用SDK自带的编译器。如果把源代码看成原材料的话，把DLL看成汽车的话，讲源代码生成模块应该是把原材料变成零件的过程，结果VS太好心，直接把汽车就装好了。Assembly本来就有装配的意思。</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp;资源文件也可以编译成模块，因此模块有两种，一种来自源代码，一种来自资源文件。你当然也可以把资源文件看成源代码， whatever.<br />
</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp;foreach (Module var in Assembly.GetExecutingAssembly().GetModules())&nbsp;{</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;string moduleName = var.Name;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp;} &nbsp;</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp;上述代码遍历正在执行的程序集中所有模块，默认情况下只有一个模块，而且这个模块的名字跟生成的DLL或者EXE名字一样一样的，而且是带扩展名的。Type&nbsp;类也有一个<a href="ms-help://ms.msdnqtr.v90.chs/fxref_mscorlib/html/31463392-13fb-350a-16ec-6f6e9f205cc6.htm"><font color="#000000"><span style="text-decoration: none;">Module</span></font></a>属性。</p>
<span id="nsrTitle">
<p>&nbsp;&nbsp; &nbsp; &nbsp;在实际工作中，我目前还没有碰到要单独处理Module的情况。倒是跟生成程序集有关的一大问题是每日构建的问题，Visual Build Pro和R2Build好像都不错，可以针对VS项目文件直接编译，不用任何配置。而且后者是免费的。既然有免费的，就可以不用研究MSBuild了。</p>
</span><img src="http://www.cnblogs.com/xiaomin/aggbug/1452130.html?type=1" width="1" height="1" alt=""/><p>评论: 5　<a href="http://www.cnblogs.com/xiaomin/archive/2009/05/07/1452130.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/xiaomin/archive/2009/05/07/1452130.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56818/" target="_blank">Google Buzz的优缺点分析</a><span style="color:gray">(2010-02-10 11:39)</span><br/>· <a href="http://news.cnblogs.com/n/56817/" target="_blank">京东商城刘强东：两个回合谈定1.5亿美元融资</a><span style="color:gray">(2010-02-10 11:30)</span><br/>· <a href="http://news.cnblogs.com/n/56816/" target="_blank">Google走到关键时刻：Buzz发布的背后</a><span style="color:gray">(2010-02-10 11:30)</span><br/>· <a href="http://news.cnblogs.com/n/56815/" target="_blank">李开复创新工场发展基金曝光 首单投移动互联</a><span style="color:gray">(2010-02-10 11:28)</span><br/>· <a href="http://news.cnblogs.com/n/56814/" target="_blank">Sun前CEO欲写自传 称经济危机是Sun被购主因</a><span style="color:gray">(2010-02-10 11:25)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" 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>The Art of Lean Software Development&lt;精益软件开发艺术&gt;试译稿</title><link>http://www.cnblogs.com/xiaomin/archive/2009/02/17/1392111.html</link><dc:creator>肖敏</dc:creator><author>肖敏</author><pubDate>Mon, 16 Feb 2009 17:38:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaomin/archive/2009/02/17/1392111.html</guid><description><![CDATA[<p>阅读: 1114 评论: 2 作者: <a href="http://www.cnblogs.com/xiaomin/" target="_blank">肖敏</a> 发表于 2009-02-17 01:38 <a href="http://www.cnblogs.com/xiaomin/archive/2009/02/17/1392111.html" target="_blank">原文链接</a></p><p><font face="Verdana">&nbsp; </p>
<p>The Art of Lean Software Development</p>
<p>&nbsp;</p>
<p>CHAPTER ONE</p>
<p>Why Lean?</p>
<p>&nbsp;</p>
<p align="right">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Optimism is an occupational hazard of programming.</p>
<p align="right">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; — Kent Beck</p>
<p><span style="font-family: 宋体">精益软件开发艺术</span></p>
<p><span style="font-family: 宋体">第一章</span></p>
<p><span style="font-family: 宋体">为什么要使用精益开发方法？</span></p>
<p align="right"><span style="font-family: 宋体">乐观是编程行业的大忌</span></p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; padding-top: 0in; border-bottom: medium none" align="right">- Kent Beck</p>
</div>
<p align="right">&nbsp;</p>
<p>The practice of software development has been plagued with shockingly low success rates for decades. At the same time, the number of software-driven products and services continues to increase dramatically each year. If these were the only two trends, we would be heading for disaster.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">几十年以来，软件开发一直被极低的成功率所困扰，与此同时，软件产品和服务的数量却每年都以显著的速度增长。如果软件业的发展只有这两种趋势，我们必将走向灾难。</span></p>
</div>
<p>Fortunately, agile software development methods have been demonstrating that higher success rates are possible. And Lean techniques (which have dramatically increased manufacturing success for over 50 years) are now being applied to software development and validating the successes of Agile.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">幸运的是，敏捷软件开发方法正显示较高的成功率是可能的。目前，精益技术（</span>50<span style="font-family: 宋体">多年来已经在制造业显著的提升了成功率）正应用于软件开发并验证着敏捷方法的成功。</span></p>
</div>
<p>The Lean principles and the mindset of Lean thinking have proved remarkably applicable to improving the productivity and quality of just about any endeavor. Lean has been successfully applied to manufacturing, distribution, supply chain, product development, banking, engineering, the back office, and much more. However, only in the last few years have the Lean principles and techniques been applied to software development.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">精益思想所倡导的精益原则和价值观已被证明非常适用于改善生产力和产品质量。它已成功地应用于制造，分销，供应链，产品开发，银行，工程，后台服务系统，等等。然而，只有在最近几年，精益原则和技术才应用到软件开发领域。</span></p>
</div>
<p>In this chapter we will give you more details on the problems that continue to plague software development, as well as an overview of Agile software development and the origins of Lean and its unique approach to improving any kind of process.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">在这一章中，我们将详细的介绍那些长期困扰软件开发的问题，同时对敏捷软件开发、精益思想的起源和其独特的改进各种过程的方法做一个概要性的介绍。</span></p>
</div>
<p>The Problem with Software Development</p>
<p>Have you ever worked on a software development project that:</p>
<p>* Went over schedule?</p>
<p>* Went over budget?</p>
<p>* Didn&#8217;t meet the needs of the customer?</p>
<p>* Was canceled?</p>
<p>If you said no, you are probably fresh out of school and are still&nbsp;&nbsp;&nbsp;&nbsp; working on your first project. If you said yes, you&#8217;re not alone&#8230;not by a&nbsp;&nbsp;&nbsp;&nbsp; long shot!</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">软件开发中的问题</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">你有没有经历过这样的软件项目：</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">进度延期</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">超出预算</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">不符合客户的需求</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">中途被取消</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">如果你说没有，那你可能是刚从学校毕业，还在做你人生中第一个项目。如果你说有，我敢肯定你绝对不是唯一的一个。</span></p>
</div>
<p>The actual statistics are shocking.</p>
<p>The 1994 CHAOS Report from the Standish Group is the landmark study of IT project failure. By 1994, the Standish Group had studied over 8,000 software development projects and found that only 16% were successful. This means that 84% of the projects either failed outright or had serious problems. In 2004, after 10 years of study, the number of projects included had increased to 40,000, and the success rate had improved to 29%. Although this is a significant increase, it&#8217;s still nothing to brag about.</p>
<p>Can you think of any other industry that has such a staggeringly low success rate?</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">实际的统计数据令人震惊。</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">Standish<span style="font-family: 宋体">集团</span>1994<span style="font-family: 宋体">年发表的</span>CHAOS <span style="font-family: 宋体">报告是一个具有里程碑意义的研究，该报告揭示了</span>IT<span style="font-family: 宋体">项目的整体失败。到</span>1994<span style="font-family: 宋体">年为止，</span>Standish<span style="font-family: 宋体">集团调查了超过</span>8<span style="font-family: 宋体">千个软件开发项目，结果只有</span>16%<span style="font-family: 宋体">的项目是成功的。也就是说，有</span>84%<span style="font-family: 宋体">的项目是失败的，或者是存在严重的问题。到了</span>2004<span style="font-family: 宋体">年，又经过十年的研究，被调查的项目已经超过</span>4<span style="font-family: 宋体">万个，结果表明，成功率也仅达到了</span>29%<span style="font-family: 宋体">。尽管这是一个显著的提高，但这丝毫不值得吹嘘。你能想象任何其他产业的成功率能低到如此惊人的程度吗？</span></p>
</div>
<p>The CHAOS Study</p>
<p>The Standish Group survey included large, medium, and small companies across major industry segments: banking, securities, manufacturing, retail, wholesale, health care, insurance, services, and local, state, and federal organizations (365 companies in total). Over a 10-year period, it studied over 40,000 projects. In addition, it used focus groups and personal interviews to provide a qualitative context for the survey results.</p>
<p>The CHAOS study classified projects into three categories:</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">CHAOS<span style="font-family: 宋体">研究</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">Standish<span style="font-family: 宋体">集团的调查覆盖了主要行业的大、中、小型企业，这些行业包括：银行业，证券业，制造业，零售，批发，医疗保健，保险，服务，和地方、州以及联邦机构（总共</span>365<span style="font-family: 宋体">家公司）</span> <span style="font-family: 宋体">。在</span>10<span style="font-family: 宋体">年期间，他们研究了超过</span>4<span style="font-family: 宋体">万个项目。此外，他们采用焦点小组和单独面谈的方式，给调查结果提供了可靠的保证。</span> <br />
CHAOS<span style="font-family: 宋体">研究把被调查的项目分为三类：</span></p>
</div>
<p>Project Succeeded</p>
<p>The project was completed on time and on budget with all the features and functions that were originally specified.</p>
<p>Project Challenged</p>
<p>The project was completed, but went over budget, over the time estimate, and offered fewer features and functions than originally specified.</p>
<p>Project Failed</p>
<p>The project was canceled at some point during the development cycle (the study actually called this Project Impaired).</p>
<p>Figure 1-1 shows the percent of projects in each of these categories over a 10-year period.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">成功的项目</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">该项目能按照预算及时的完成，并且具备所有原来预计的功能与特性。</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">受到质疑的项目</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">该项目能够完成，但是超出预算与时间进度，并且提供的功能与特性比预计的少一些。</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">失败的项目</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">该项目在软件开发周期中的某一时刻被取消。（在研究报告中称之为该项目受损）</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">图一显示了十年来这三类项目所占的比例</span></p>
</div>
<p>CHAOS study data</p>
<p>As you can see, the success rate improved over time, but at a glacial pace: 1.3% a year. At this rate, successful projects won&#8217;t even break the 50% mark until the year 2020!</p>
<p>In fairness, some experts disagree with the definition of success used by the CHAOS study. They point out that many projects that have been classified as challenged have gone on to deliver very successful products. However, even if you take this into account, the success rate still leaves a lot of room for improvement.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">CHASO<span style="font-family: 宋体">研究数据</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">正如你所看到的，成功率随着时间的推移有所提高，但是速度相当之缓慢：平均每年只有</span>1.3%<span style="font-family: 宋体">。按照这个速度，到</span>2020<span style="font-family: 宋体">年，成功项目的比例也不会突破</span>50%<span style="font-family: 宋体">！公平的讲，一些专家并不认同</span>CHAOS<span style="font-family: 宋体">所定义的项目成功的标准。他们指出，很多归类为受到质疑的项目实际上提供了非常成功的产品。但是，就算把这个因素考虑进去，软件项目的成功率依然有很大的改进余地。</span></p>
</div>
<p>The Waterfall Method</p>
<p>So the question is: why is the failure rate so high? A large part of the blame can be traced back to the widespread adoption of the Waterfall method.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">瀑布型开发方法</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">人们不禁要问：为什么失败率如此之高？有很大一部分的责任可以追溯到普遍采用的瀑布开发方法。</span></p>
</div>
<p>The Waterfall model of software development divides development into a set of distinct phases that are performed sequentially: requirements, design, implementation, testing, deployment, and maintenance (see Figure1-2 ).</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">瀑布开发方法把软件开发划分成一系列按顺序完成的阶段，依次是：需求，设计，实施，测试，部署和维护（参见图</span>2 <span style="font-family: 宋体">）。</span></p>
</div>
<p>Development is seen as flowing steadily downward (like a waterfall) through these phases. Each phase has a beginning and an end, and once you move onto the next phase, you never go back (just as water does not flow uphill).</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">整个开发过程被看作是严格的线性流程</span>, <span style="font-family: 宋体">自顶向下地贯穿每个阶段。每个阶段都有明确的开始和结束，一旦你走到下一阶段，你永远不能回溯到上一阶段（就如水不能倒流一样）。</span></p>
</div>
<p><span style="color: black; font-family: 'Courier New'">Waterfall model</span></p>
<p><span style="color: black; font-family: 'Courier New'">The Waterfall method has an appealing air of simplicity. Managers like the series of fixed milestones that seem to make it easy to track a project&#8217;s progress. However, this manageability is an illusion because this model does not allow for change.</span></p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">瀑布模型</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">瀑布模型由于其简单而受人青睐。项目管理者喜欢这一系列固定的里程碑，似乎通过它们就可以方便地跟踪项目的进展情况。然而，这种管理是一种幻想，因为这种模式不允许变化。</span></p>
</div>
<p><span style="color: black; font-family: 'Courier New'">Software development is a highly dynamic process and change is inevitable. During implementation you&#8217;ll find problems with the design. Customers don&#8217;t know precisely what they want ahead of time, and that will change the requirements.</span></p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">软件开发是一个高度动态的过程并且变化总是不可避免的。在执行过程中，您可能会发现设计方面的问题。客户在一开始并不明确的知道他们想要的是什么，这就难免会在将来改变需求。</span></p>
</div>
<p><span style="color: black; font-family: 'Courier New'">Studies show that the Waterfall method is positively correlated with reduced productivity, increased defect rates, and project failure. Why, then, was the Waterfall method so widely promoted, and how did it become so entrenched in the face of so much evidence that it did not work?</span></p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">研究表明，瀑布方法与生产力下降，缺陷率的增加，项目的失败有着明显的关系。然而，这么多的证据表明它没有效果，那为什么瀑布方法却被广泛的提倡，以致变得如此根深蒂固呢？</span></p>
</div>
<p>A historical accident</p>
<p>Winston Royce first described the Waterfall method in a 1970 paper titled, &#8220;Managing the Development of Large Software Systems&#8221; (Technical Papers of the Western Electronic Show and Convention). This paper is often cited as if it validates the Waterfall model, but it actually does the opposite. People who use Royce&#8217;s paper to support the Waterfall method must not have read this paper carefully because it explicitly says that the Waterfall method &#8220;is risky and invites failure.&#8221; The paper then proceeds to advocate an iterative development style.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">历史事件</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">Winston Royce<span style="font-family: 宋体">在</span>1970<span style="font-family: 宋体">年的一篇题为</span>&#8220;<span style="font-family: 宋体">把握大型软件系统的开发</span>&#8221;<span style="font-family: 宋体">的文章中</span> <span style="font-family: 宋体">首次描述了瀑布方法（这是一篇发表在《</span>Western Electronic Show and Convention<span style="font-family: 宋体">》的技术论文）</span> <span style="font-family: 宋体">。通常认为是它论证了瀑布模型，但实际上刚好相反。使用</span>Royce<span style="font-family: 宋体">的论文以支持瀑布方法的人肯定没有仔细阅读此文，因为它明确地说，瀑布法</span>&#8220;<span style="font-family: 宋体">是很危险的，并容易导致失败</span>&#8221; <span style="font-family: 宋体">。该文接着主张迭代开发的风格。</span></p>
</div>
<p>&nbsp;</p>
<p>The Waterfall method would likely have slowly faded away, but in the 1980s it became the Department of Defense (DoD) standard for the development and procurement of software with the release of DOD-STD-2167. Eventually, the DoD realized that the Waterfall method was not working and in 1994 replaced DOD-STD-2167 with MIL-STD-498, which supports iterative development.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">瀑布方法本来可能会慢慢消失在历史舞台，但在上世纪</span>80<span style="font-family: 宋体">年代，随着</span>DOD-STD-2167<span style="font-family: 宋体">号文件的发布，它成为国防部（</span> DoD <span style="font-family: 宋体">）软件开发和采购的标准。后来，美国国防部意识到瀑布方法是行不通的，并最终于</span>1994<span style="font-family: 宋体">年发布了取代</span>DOD-STD-2167<span style="font-family: 宋体">的标准</span>MIL - STD - 498 <span style="font-family: 宋体">，支持迭代式开发。</span></p>
</div>
<p>However, the damage was done, and a strong mindset with a bias toward Waterfall development had become ingrained. The Lightweight methods of the 1990s and the Agile methods of the early 2000s have started to turn this around, but there is a long way to go. Many people who are not familiar with the evidence are still staunch supporters of the Waterfall method.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">然而，危害已经造成了，由于先入为主形成的习惯，瀑布模型思想已经根深蒂固、积习难改。</span>20<span style="font-family: 宋体">世纪</span>90<span style="font-family: 宋体">年代出现的一些轻型方法以及</span>2000<span style="font-family: 宋体">年初出现的敏捷方法，开始试图扭转这个局面，但还是有很长的路要走。很多不了解实情的人仍然坚定的支持瀑布方法。</span></p>
</div>
<p>The Agile Success Story</p>
<p>The Agile software development methodologies were the first attempts to improve the software development situation, with Lean coming onto the software scene much later.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">敏捷开发的故事</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">敏捷软件开发方法是改善软件开发状况的第一次尝试，精益思想进入软件开发领域则更晚。</span></p>
</div>
<p>Most of the Agile methodologies, like Extreme Programming (XP) and Scrum, actually predate the Agile Manifesto (which we will discuss shortly). In fact, using the term &#8220;Agile&#8221; to refer to these methods of software development was coined at the famous Snowbird meeting that created the Agile Manifesto.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">大多数的敏捷方法，如极限编程（</span> XP <span style="font-family: 宋体">）和</span>Scrum<span style="font-family: 宋体">，其实早在敏捷宣言之前就出现了（我们将马上讨论敏捷宣言）</span> <span style="font-family: 宋体">。事实上，</span>&#8220;<span style="font-family: 宋体">敏捷</span>&#8221;<span style="font-family: 宋体">一词是泛指在著名的雪鸟会议上同时出现的一些软件开发方法，敏捷宣言正是在这个大会创建的。</span></p>
</div>
<p>In the 1990s there was a growing dissatisfaction with the prevalent heavy software development methodologies and processes. Using these processes did not solve any of the endemic problems of software development: high project failure rate, low software quality, and generally unhappy customers.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">在</span>20<span style="font-family: 宋体">世纪</span>90<span style="font-family: 宋体">年代，人们越来越不满广泛采用的沉重的软件开发方法和过程。使用这些传统方法并没有解决软件开发中普遍的问题：项目失败率高，软件质量低，并且顾客普遍不满意。</span></p>
</div>
<p>This spawned a number of alternative methodologies, including XP, Scrum, Dynamic Systems Development Method (DSDM), Crystal, and Feature Driven Development (FDD), that were collectively known as Lightweight methods. The term &#8220;Lightweight&#8221; was meant to distinguish them from the predominant heavyweight methods of the time. Their creators were not happy with the term &#8220;Lightweight&#8221; because it seemed to imply that these methods were less comprehensive or less important.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">这催生了一些替代方法，包括极限编程（</span>XP<span style="font-family: 宋体">），</span>Scrum<span style="font-family: 宋体">，动态系统开发方法（</span> DSDM <span style="font-family: 宋体">）</span> <span style="font-family: 宋体">，</span>Crystal<span style="font-family: 宋体">和功能驱动开发（</span>FDD<span style="font-family: 宋体">）</span> <span style="font-family: 宋体">，被统称为轻型方法。</span>&#8220;<span style="font-family: 宋体">轻量</span>&#8221;<span style="font-family: 宋体">一词是为了与当时主要的重量级方法区别开来。这些方法的创造者对</span>&#8220;<span style="font-family: 宋体">轻量</span>&#8221; <span style="font-family: 宋体">一词并不满意，因为它似乎暗示，这些方法都不够全面或不那么重要。</span></p>
</div>
<p>It became increasingly apparent that these Lightweight methods had a lot in common with each other. So, in February of 2001, a group of 17 of the leading independent thinkers about software development gathered at the Snowbird ski resort in Utah to try to find common ground. The roster of this two-day gathering included many of the most prominent&nbsp;&nbsp;&nbsp;&nbsp; personalities in software development at the time: Kent Beck, Mike Beedle, Arie van Bennekum, Alistair Cockburn, Ward Cunningham, Martin Fowler, James Grenning, Jim Highsmith, Andrew Hunt, Ron Jeffries, Jon Kern, Brian Marick, Robert C. Martin, Steve Mellor, Ken Schwaber, Jeff Sutherland, and Dave Thomas.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">这些轻量级方法有很多共同点。因此，在</span>2001<span style="font-family: 宋体">年</span>2<span style="font-family: 宋体">月，</span>17<span style="font-family: 宋体">位权威的独立软件开发的思想家齐聚在滑雪胜地犹他州的雪鸟滑雪场，试图建立一个共同的平台。这次为期两天的会议汇集了许多软件开发方面最知名的人士，他们是：</span>Kent Beck, Mike Beedle, Arie van Bennekum, Alistair Cockburn, Ward Cunningham, Martin Fowler, James Grenning, Jim Highsmith, Andrew Hunt, Ron Jeffries, Jon Kern, Brian Marick, Robert C. Martin, Steve Mellor, Ken Schwaber, Jeff Sutherland, <span style="font-family: 宋体">和</span> Dave Thomas.</p>
</div>
<p>Three significant things came out of the now-famous Snowbird gathering: the decision to use the term &#8220;Agile,&#8221; the Agile Manifesto, and the Agile Alliance. The Agile Alliance (http://www.agilealliance.org/) is a nonprofit organization that exists to further the development and dissemination of information regarding Agile processes.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; padding-top: 0in; border-bottom: medium none"><span style="color: black; font-family: 宋体">在这次著名的雪鸟会议上，有</span><span style="color: black; font-family: 'Courier New'">3</span><span style="color: black; font-family: 宋体">件事是意义重大的：决定采用</span><span style="color: black; font-family: 'Courier New'">&#8220;</span><span style="color: black; font-family: 宋体">敏捷</span><span style="color: black; font-family: 'Courier New'">&#8221;</span><span style="color: black; font-family: 宋体">一词来代表他们所倡导的开发思想</span> <span style="color: black; font-family: 宋体">，发表敏捷宣言和成立敏捷联盟。敏捷联盟（</span><span style="color: black; font-family: 'Courier New'"> http://www.agilealliance.org/ </span><span style="color: black; font-family: 宋体">）是一个非盈利性组织，旨在进一步发展和传播敏捷开发过程。</span></p>
</div>
<p>As stated earlier, no one was happy with the term &#8220;Lightweight.&#8221; Alistair Cockburn articulated this nicely when he said, &#8220;I don&#8217;t mind the methodology being called light in weight, but I&#8217;m not sure I want to be referred to as a &#8216;Lightweight&#8217; attending a &#8216;Lightweight methodologists&#8217; meeting. It sounds like a bunch of skinny, feebleminded people trying to remember what day it is.&#8221; And thus, we now have &#8220;Agile.&#8221;</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">如前所述，没有人喜欢</span>&#8220;<span style="font-family: 宋体">轻量</span>&#8221;<span style="font-family: 宋体">这一说法</span> <span style="font-family: 宋体">。</span>Alistair Cockburn<span style="font-family: 宋体">阐述地很好，他说，</span> <span style="font-family: 宋体">&#8220;我不介意这方法被称为轻量，但我不希望被人提到作为&#8216;轻量&#8217;专家参加&#8216;轻量级方法学&#8217;会议。这听起来像一群又瘦又弱智的人试图回想起那天是星期几。</span> <span style="font-family: 宋体">&#8221;因此，我们现在有了&#8220;敏捷&#8221;这一称谓。</span></p>
</div>
<p><span style="color: black; font-family: 'Courier New'">The Agile Manifesto</span></p>
<p><span style="color: black; font-family: 'Courier New'">The Agile Manifesto (formally called the Manifesto for Agile Software Development ) is a model of simplicity. Written by Kent Beck et al., it eloquently states the four core values that form the philosophical bedrock of all Agile methodologies:</span></p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">&nbsp;</p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">&nbsp;</p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">&nbsp;</p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">敏捷宣言</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">敏捷宣言（正式名称为敏捷软件开发宣言）是一个简单模型。作者</span>Kent Beck<span style="font-family: 宋体">等。</span> <span style="font-family: 宋体">它阐述了以下的四个核心价值观，它们是所有敏捷方法的哲学基石：</span></p>
</div>
<p><span style="color: black; font-family: 'Courier New'">We are uncovering better ways of developing software by doing it and helping others do it.</span></p>
<p><span style="color: black; font-family: 'Courier New'">Through this work we have come to value:</span></p>
<p><span style="color: black; font-family: 'Courier New'">* Individuals and interactions over processes and tools</span></p>
<p><span style="color: black; font-family: 'Courier New'">* Working software over comprehensive documentation</span></p>
<p><span style="color: black; font-family: 'Courier New'">* Customer collaboration over contract negotiation</span></p>
<p><span style="color: black; font-family: 'Courier New'">* Responding to change over following a plan</span></p>
<p><span style="color: black; font-family: 'Courier New'">That is, while there is value in the items on the right, we value the items on the left more.</span></p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">我们正在通过亲身实践以及帮助他人实践，揭示更好的软件开发方法，通过这项工作，我们认为：</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">个体和交互</span>&nbsp;<span style="font-family: 宋体">胜过</span> <span style="font-family: 宋体">过程和工具</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">可以工作的软件</span> <span style="font-family: 宋体">胜过</span> <span style="font-family: 宋体">面面俱到的文档</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">客户合作</span> <span style="font-family: 宋体">胜过</span> <span style="font-family: 宋体">合同谈判</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">响应变化</span> <span style="font-family: 宋体">胜过</span> <span style="font-family: 宋体">遵循计划</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">虽然右项也有价值，但我们认为左项的价值更大。</span></p>
</div>
<p>The wording of the Agile Manifesto was carefully crafted to communicate the intended message. By saying, &#8220;We are uncovering better ways of developing software,&#8221; they showed that they didn&#8217;t have all the answers and were still on a learning journey of discovery. Just as important was the next part, &#8220;by doing it and helping others do it,&#8221;&nbsp;which meant that they were actively engaged in using these &#8220;better ways&#8221; (no ivory-tower theoretical advice here) and were sharing what they learned with others (not telling people what to do).</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">敏捷宣言的措辞是经过精心策划的。&#8220;我们正在揭示更好的软件开发方法&#8221;表明，他们没有所有的答案，仍然在学习探索发现的旅程。另一句也非常重要，&#8220;这样做，并帮助别人这样做&#8221;这意味着他们在积极地使用这些&#8220;更好的办法&#8221;（没有象牙塔似的理论），并分享他们的经验与他人（不是只用嘴巴告诉人们该怎么做）。</span></p>
</div>
<p>Each of the four value statements in the Agile Manifesto ists two things and states that both items are important, but the first item is higher priority. Martin Fowler and Jim Highsmith described this very succinctly in their August 2001 article in Dr. Dobb&#8217;s Journal itled &#8220;The Agile Manifesto&#8221;:</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">敏捷宣言的四个价值观的声明都是围绕这两件事，并指出，上述四项都是重要的，但第一项最为重要。</span>Martin Fowler <span style="font-family: 宋体">和</span> Jim Highsmith<span style="font-family: 宋体">在</span>2001<span style="font-family: 宋体">年</span>8<span style="font-family: 宋体">月发表在</span>Dr. Dobb&#8217;s<span style="font-family: 宋体">标题为&#8220;敏捷宣言&#8221;的文章中对此做了非常简洁的描述：</span></p>
</div>
<p>The Alliance recognizes the importance of process and tools, with the additional recognition that the interaction of skilled individuals is of even greater importance. Similarly, comprehensive documentation is not necessarily bad, but the primary focus must remain on the final product—delivering working software. Therefore, every project team needs to determine for itself what documentation is absolutely essential.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">该联盟认识到过程和工具的重要，同时也认识到，互相影响和熟练的个体更为重要。同样，完善的文档不一定是不好的，但重点必须放在最终产品上——能够工作的软件。因此，每一个项目小组需要自行确定哪些文档是必不可少的。</span></p>
</div>
<p>Contract negotiation, whether through an internal project charter or external legal contract, isn&#8217;t a bad practice, just an insufficient one. Contracts and project charters may provide some boundary conditions within which the parties can work, but only through ongoing collaboration can a development team hope to understand and deliver what the client wants.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">合同谈判，无论是通过内部的项目规范或外部的法律合同，不能说是不好的做法，只是这还不够</span> <span style="font-family: 宋体">。项目合同和规范可以明确双方的工作职责范围，但只有通过切实的合作，才能让开发团队了解，并且满足客户的需求。</span></p>
</div>
<p>Plans are important, but they shouldn&#8217;t be rigid, unchanging plans. The ability to respond to changes is critical to the success of most software development projects.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">计划是重要的，但是不应该是僵化、不变的计划。对于大多数软件开发项目来说，针对变化做出反应的能力是成功的关键。</span></p>
</div>
<p>In addition to enumerating the four Agile values, the authors of the Agile Manifesto further refined what they meant in those value statements by listing a number of principles that they follow as a direct result of those values:</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">敏捷宣言的作者还列举了由这四个价值观引出的一些原则，作为对它们进一步的完善，这些原则是：</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; padding-top: 0in; border-bottom: medium none">&nbsp;</p>
</div>
<p>* Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。</span></p>
</div>
<p>* Welcome changing requirements, even late in development. Agile processes harness change for the customer&#8217;s competitive advantage.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">即使到了开发的后期，也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。</span></p>
</div>
<p>* Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">经常性的交付可以工作的软件，交付的间隔可以从几周到几个月，交付的时间间隔越短越好。</span></p>
</div>
<p>* Business people and developers work together daily throughout the project.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">在整个项目开发期间，业务人员和开发人员必须天天都在一起工作。</span></p>
</div>
<p>* Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">围绕被激励起来的个人来构建项目。给他们提供所需要的环境和支持，</span> <span style="font-family: 宋体">并且信任他们能够完成工作。</span></p>
</div>
<p>* The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">在团队内部，最具有效果并且富有效率的传递信息的方法，就是面对面的交谈。</span></p>
</div>
<p>&nbsp;</p>
<p>* Working software is the primary measure of progress.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">能正常工作的软件是首要的进度度量标准。</span></p>
</div>
<p>* Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。</span></p>
</div>
<p>* Continuous attention to technical excellence and good design enhances agility.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">不断关注优秀的技能和好的设计会增强敏捷能力。</span></p>
</div>
<p>* Simplicity—the art of maximizing the amount of work not done—is essential.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">简单</span>-<span style="font-family: 宋体">让未完成的工作量最大化的艺术</span>-<span style="font-family: 宋体">是最根本的。</span></p>
</div>
<p>* The best architectures, requirements, and designs emerge from self-organizing teams.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">最好的架构、需求和设计出自于自组织的团队</span></p>
</div>
<p>* At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">每隔一定时间、团队会在如何才能更有效的工作方面进行反省，然后相应地对自己的行为进行调整。</span></p>
</div>
<p>Agile Methodologies</p>
<p>There are a fair number of formal software development methodologies that fall within the Agile camp. While they vary in their specific activities and artifacts, they all use short time-boxed iterations that deliver working software at the end of each iteration (the length of the iterations varies between methodologies). Figure 1-3 shows the typical Agile process.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">敏捷方法论</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">有相当多的软件开发方法论属于敏捷阵营。虽然在具体实施中各有不同，它们都普遍采用定时迭代并使用较短的迭代周期，在每个周期结束时提交可以运行的软件（不同的开发方法在迭代周期的长短上有所差异）</span> <span style="font-family: 宋体">。图</span>1-3<span style="font-family: 宋体">显示了典型的敏捷过程。</span></p>
</div>
<p>Typical Agile process</p>
<p>All Agile methodologies share a number of core practices (either formally or informally). These core practices also support Lean software development and are the subject of the second half of this book.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">典型敏捷过程</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">所有敏捷阵营的方法论共享一组核心的实践方法（无论是正式或非正式的）</span> <span style="font-family: 宋体">。这些核心的方法也是精益软件开发的重点，这是本书后半部分的主题。</span></p>
</div>
<p>Some of the more commonly used Agile methodologies include:</p>
<p>* Scrum</p>
<p>* XP</p>
<p>* Crystal</p>
<p>* FDD</p>
<p>* Unified Process (UP)</p>
<p>* DSDM</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">一些比较常用的敏捷方法包括：</span> </p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">* Scrum</p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">极限编程（</span>XP<span style="font-family: 宋体">）</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">水晶开发方法</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">功能驱动开发</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">统一过程（</span>UP<span style="font-family: 宋体">）</span> </p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">*<span style="font-family: 宋体">动态系统开发方法</span></p>
</div>
<p>These methods all began at different times in the 1990s as a response to the failure of the Waterfall method. There has been a great deal of cross-fertilization of ideas and techniques between these methods.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">这些方法在上世纪</span>90<span style="font-family: 宋体">年代不同的时间出现，都是对失败的瀑布方法的应对。这些方法在思想和技术上有着广泛的交流。</span></p>
</div>
<p>Scrum has successfully taken the Agile approach and stripped it down to the essentials. The result is one of the simplest and easiest-to-implement Agile methodologies that still provides the benefits of Agile software development.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">Scrum<span style="font-family: 宋体">成功地吸收了敏捷的方法并且仅把一些最根本的东西剥离出来。因此</span>Scrum<span style="font-family: 宋体">方法简单，易于实施又同时具备敏捷开发的优点。</span></p>
</div>
<div style="border-right: medium none; padding-right: 0in; border-top: windowtext 1pt solid; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 1pt; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; padding-top: 0in; border-bottom: medium none">XP has a rich set of interlocking practices that can feel overwhelming to those uninitiated in the Agile way, but XP gets credit for popularizing most of the core practices that have been adopted by the other methodologies. XP has probably done more to raise the awareness of Agile software development than any other methodology.</p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">极限编程有一套丰富的相互关联的实践方法，对敏捷方法毫无基础的人可能会感到不知所措。但极限编程因一直推广大部分敏捷的核心的实践方法而广受好评，这些实践已经被其他软件开发方法广泛采用。</span> XP<span style="font-family: 宋体">有可能在提高人们对敏捷软件开发的认识上比任何其他方法都做得更多。</span></p>
</div>
<p>Crystal is actually a family of methodologies created by Alistair Cockburn. The actual processes and practices vary depending on a project&#8217;s size and criticality or complexity.</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">水晶方法实际上是</span>Alistair Cockburn.<span style="font-family: 宋体">创造的一系列方法。实际的开发过程和做法会根据项目的规模和重要性或复杂性而变化</span>.</p>
</div>
<p>&nbsp;</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; padding-top: 0in; border-bottom: medium none">FDD is unique among the Agile methodologies in that its perspective centers on creating domain models for the system being developed, which then organizes development around features that implement the model.</p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">功能驱动开发是敏捷方法中比较独特的，其核心观点是为要开发的系统建立问题域模型，然后围绕该模型组织开发。</span></p>
</div>
<p>UP is generally considered to be one of the more &#8220;heavyweight&#8221; of the Agile processes, although it was intended to be tailored and not implemented in a heavy manner. </p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">统一过程一般被认为是一个比较&#8220;重量级&#8221;的敏捷过程，尽管它的目的是适应，而不是重型的实施方式。</span></p>
</div>
<p>Regardless, this has led to a number of variants, including the Rational Unified Process (RUP), the Agile Unified Process (AUP), and the Enterprise Unified Process (EUP).</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none"><span style="font-family: 宋体">尽管如此，统一过程也发展出好些变体，包括</span>Rational<span style="font-family: 宋体">统一过程（</span> RUP<span style="font-family: 宋体">的）</span> <span style="font-family: 宋体">，敏捷统一过程（</span> AUP <span style="font-family: 宋体">）</span> <span style="font-family: 宋体">，以及企业统一过程（</span>EUP<span style="font-family: 宋体">）</span> <span style="font-family: 宋体">。</span> </p>
</div>
<p>DSDM is more formal than most of the other Agile methods, fully specifying many different roles, processes, and artifacts. A notable feature is the prioritizing of requirements according to the MoSCoW rules:</p>
<p>M&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Must-have requirements</p>
<p>S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Should have if at all possible</p>
<p>C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Could have, but not critical</p>
<p>W&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Won&#8217;t have this time, but potentially later</p>
<div style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 1pt; border-left: medium none; padding-top: 0in; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">DSDM<span style="font-family: 宋体">比大多数其他敏捷方法更为规范化，它要求完整全面的指定许多不同的角色，流程和中间产品。其中一个著名特征是要求根据莫斯科（</span>MoSCoW<span style="font-family: 宋体">）规则对需求设定优先权：</span> </p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">M<span style="font-family: 宋体">必不可少</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">S<span style="font-family: 宋体">尽可能的有</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">C<span style="font-family: 宋体">可以有，但不关键</span></p>
<p style="border-right: medium none; padding-right: 0in; border-top: medium none; padding-left: 0in; padding-bottom: 0in; border-left: medium none; text-indent: 24pt; padding-top: 0in; border-bottom: medium none">W<span style="font-family: 宋体">现在不用，但可能以后需要</span></p>
</div>
<p>&nbsp;</p>
</font>
<img src="http://www.cnblogs.com/xiaomin/aggbug/1392111.html?type=1" width="1" height="1" alt=""/><p>评论: 2　<a href="http://www.cnblogs.com/xiaomin/archive/2009/02/17/1392111.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/xiaomin/archive/2009/02/17/1392111.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56818/" target="_blank">Google Buzz的优缺点分析</a><span style="color:gray">(2010-02-10 11:39)</span><br/>· <a href="http://news.cnblogs.com/n/56817/" target="_blank">京东商城刘强东：两个回合谈定1.5亿美元融资</a><span style="color:gray">(2010-02-10 11:30)</span><br/>· <a href="http://news.cnblogs.com/n/56816/" target="_blank">Google走到关键时刻：Buzz发布的背后</a><span style="color:gray">(2010-02-10 11:30)</span><br/>· <a href="http://news.cnblogs.com/n/56815/" target="_blank">李开复创新工场发展基金曝光 首单投移动互联</a><span style="color:gray">(2010-02-10 11:28)</span><br/>· <a href="http://news.cnblogs.com/n/56814/" target="_blank">Sun前CEO欲写自传 称经济危机是Sun被购主因</a><span style="color:gray">(2010-02-10 11:25)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" 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>Sql Server 2005中的架构(Schema)、用户(User)、角色(Role)和登录(Login)(三)</title><link>http://www.cnblogs.com/xiaomin/archive/2009/01/21/1375170.html</link><dc:creator>肖敏</dc:creator><author>肖敏</author><pubDate>Wed, 21 Jan 2009 04:20:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaomin/archive/2009/01/21/1375170.html</guid><description><![CDATA[<p>阅读: 1923 评论: 15 作者: <a href="http://www.cnblogs.com/xiaomin/" target="_blank">肖敏</a> 发表于 2009-01-21 12:20 <a href="http://www.cnblogs.com/xiaomin/archive/2009/01/21/1375170.html" target="_blank">原文链接</a></p><p>&#160;&#160; &#160; &#160;摘要：【目的】了解数据库中角色（Role）的概念和用处。【方法】用李老板的公司发展中碰到的问题例证角色的重要性【结论】角色在用户越多的情况下越能凸显出它的作用。</p>
<p style="text-align: center;"><strong>3.1 深入了解架构(Schema)</strong></p>
<p style="text-align: left;">&#160;&#160; &#160; &#160;在进入李老板的故事之前，让我们先对Sql Server2005中的架构做一个更深入的了解。</p>
<p style="text-align: left;">&#160;&#160; &#160; &#160;<strong>用户(User)和架构(Schema)的关系</strong></p>
<p style="text-align: left;">
</p>
<ul>
    <li>一个架构有且只有一个所有者Owner。</li>
    <li>一个用户可以拥有多个架构。</li>
</ul>
<p>&#160;</p>
<ul>
</ul>
<p>&#160;&#160;&#160; &#160; 这跟第二节中介绍的货架权限清单有所出入，第二节中的例子是多对多的关系，而实际Sql Server是采用<strong>一对多</strong>的关系。这反而比较像是银行账户。一个人可以有多个存折，但是一个存折只有一个用户。</p>
<p style="text-align: left;">
</p>
<ul>
    <li>创建一个用户，系统将自动创建一个同名的架构。</li>
    <li>创建一个架构必须指定所有者，否则将默认为当前登陆用户。</li>
    <li>表属于不同的架构也不能重名。</li>
    <li>删除一个用户时，架构也会被删除？</li>
</ul>
<ul>
</ul>
<p>&#160;&#160; &#160; &#160;<span style="font-weight: bold; ">架构(Schema)相关的SQL</span></p>
<p>&#160;&#160; &#160; &#160;创建架构</p>
<p>
</p>
<div class="cnblogs_code"><span id="Code_Open_Text_000748" style="display: inline; "><span style="color: #0000FF;">&#160;&#160; &#160; CREATE</span><span style="color: #000000;">&#160;</span><span style="color: #0000FF;">SCHEMA</span><span style="color: #000000;">&#160;</span><span style="color: #FF0000;">[</span><span style="color: #FF0000;">SchemaName</span><span style="color: #FF0000;">]</span><span style="color: #000000;">&#160;</span><span style="color: #0000FF;">AUTHORIZATION</span><span style="color: #000000;">&#160;</span><span style="color: #FF0000;">[</span><span style="color: #FF0000;">User]</span></span></div>
<p>&#160;</p>
<p>&#160;&#160; &#160; &#160;更改架构的所有者</p>
<p>&#160;&#160; &#160; &#160;删除架构</p>
<p>&#160;&#160; &#160; &#160;<strong>数据库设计与架构</strong></p>
<p><strong>&#160;&#160; &#160; &#160;</strong>架构的目的应该在于在同一数据库中提供一种隔离机制。按照这种思路，以最典型的产供销结构，我们可以这样设计一个数据库MyDatabase：</p>
<p>
</p>
<div style="text-align: center;"><br />
</div>
<table border="0" cellspacing="2" cellpadding="2" width="500" align="center">
    <tr>
        <td>用户</td>
        <td>架构</td>
        <td>表</td>
        <td>表全称</td>
    </tr>
    <tr>
        <td>生产者</td>
        <td>生产</td>
        <td>表1</td>
        <td>生产.表1</td>
    </tr>
    <tr>
        <td>供应者</td>
        <td>供应</td>
        <td>表2</td>
        <td>供应.表2</td>
    </tr>
    <tr>
        <td>销售者</td>
        <td>销售</td>
        <td>表3</td>
        <td>销售.表3</td>
    </tr>
</table>
&#160;&#160; &#160; &#160;这样生产者登陆以后只能操作表1，供应者登陆以后只能操作表2...隔离效果非常好。但是，如果总经理想要查看一个产供销的综合报表该如何办呢？在这样的设计下，是根本做不到的。所以我们目前看到的实际情况是，基本上一个数据库只用一个架构和一个用户登陆。
<p>&#160;</p>
<p style="text-align: center;">
<table border="0" cellspacing="2" cellpadding="2" width="500" align="center" style="border-color: initial; border-color: initial; border-color: initial; ">
    <tr>
        <td style="border-color: initial; border-color: initial; ">用户</td>
        <td>架构</td>
        <td>表</td>
        <td>表全称</td>
    </tr>
    <tr>
        <td>MyUser</td>
        <td>MySchema</td>
        <td>表1</td>
        <td>MySchema.表1</td>
    </tr>
    <tr>
        <td><br />
        </td>
        <td><br />
        </td>
        <td>表2</td>
        <td>MySchema.表2</td>
    </tr>
    <tr>
        <td><br />
        </td>
        <td><br />
        </td>
        <td>表3</td>
        <td>MySchema.表3</td>
    </tr>
</table>
</p>
<p>&#160;</p>
<p>&#160;&#160; &#160; &#160;这下总经理要看报表是没问题了，但是这样架构就形同虚设了。这也是为什么大家搞不清楚架构和用户的关系的原因。假如一个架构可以有多个拥有者，那么就可以彻底解决这个问题。</p>
<p>&#160;&#160; &#160; &#160;有人要说了，但是好像我用dbo登陆以后，是可以操作不同架构的表啊，这是为什么呢？那是因为上面的讨论是建立在没有角色的基础上的，要说清楚角色的问题，我们还是要回到李老板的故事。</p>
<p style="text-align: center;"><strong>3.2 人多不好管</strong></p>
<p>1.大量的重复</p>
<p>2.工作调动</p>
<p style="text-align: center;"><strong>3.3 所有权与经营权</strong></p>
<p style="text-align: center;"><strong>3.4 DB Role与App Role</strong></p>
<p style="text-align: center;"><strong>3.5 数据库设计与角色</strong></p><img src="http://www.cnblogs.com/xiaomin/aggbug/1375170.html?type=1" width="1" height="1" alt=""/><p>评论: 15　<a href="http://www.cnblogs.com/xiaomin/archive/2009/01/21/1375170.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/xiaomin/archive/2009/01/21/1375170.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56818/" target="_blank">Google Buzz的优缺点分析</a><span style="color:gray">(2010-02-10 11:39)</span><br/>· <a href="http://news.cnblogs.com/n/56817/" target="_blank">京东商城刘强东：两个回合谈定1.5亿美元融资</a><span style="color:gray">(2010-02-10 11:30)</span><br/>· <a href="http://news.cnblogs.com/n/56816/" target="_blank">Google走到关键时刻：Buzz发布的背后</a><span style="color:gray">(2010-02-10 11:30)</span><br/>· <a href="http://news.cnblogs.com/n/56815/" target="_blank">李开复创新工场发展基金曝光 首单投移动互联</a><span style="color:gray">(2010-02-10 11:28)</span><br/>· <a href="http://news.cnblogs.com/n/56814/" target="_blank">Sun前CEO欲写自传 称经济危机是Sun被购主因</a><span style="color:gray">(2010-02-10 11:25)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" 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>2009年从.NET技术大会开始新的梦想</title><link>http://www.cnblogs.com/xiaomin/archive/2009/01/21/1379385.html</link><dc:creator>肖敏</dc:creator><author>肖敏</author><pubDate>Wed, 21 Jan 2009 04:14:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaomin/archive/2009/01/21/1379385.html</guid><description><![CDATA[<p>阅读: 143 评论: 1 作者: <a href="http://www.cnblogs.com/xiaomin/" target="_blank">肖敏</a> 发表于 2009-01-21 12:14 <a href="http://www.cnblogs.com/xiaomin/archive/2009/01/21/1379385.html" target="_blank">原文链接</a></p><p>&#160;&#160; &#160; .NET技术大会的票终于到手了。号码是103，那天打电话到博客园还说没到票，我以为能弄个前五名呢。不过这并没有扑灭我的热情。希望这个技术大会给我明年一个好的预兆。</p>
<p style="text-align: center;"><img src="http://www.cnblogs.com/images/cnblogs_com/xiaomin/%E5%85%A5%E5%9C%BA%E5%88%B8.JPG" border="0" alt="" /><br />
</p>
<p>&#160;&#160; &#160; &#160;明天就回家过年了。2月7号还要去水木年华试讲，离MCT又近了一步。所以这些天没办法写技术随笔了，希望不要被人误以为昙花一现。2月20号21号参加技术大会。希望不会跟上课冲突。</p>
<p>&#160;&#160; &#160; &#160;明年是关键的一年。我有好多想做的，如果一一实现的话。真的要感谢博客园。&#160;</p><img src="http://www.cnblogs.com/xiaomin/aggbug/1379385.html?type=1" width="1" height="1" alt=""/><p>评论: 1　<a href="http://www.cnblogs.com/xiaomin/archive/2009/01/21/1379385.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/xiaomin/archive/2009/01/21/1379385.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56818/" target="_blank">Google Buzz的优缺点分析</a><span style="color:gray">(2010-02-10 11:39)</span><br/>· <a href="http://news.cnblogs.com/n/56817/" target="_blank">京东商城刘强东：两个回合谈定1.5亿美元融资</a><span style="color:gray">(2010-02-10 11:30)</span><br/>· <a href="http://news.cnblogs.com/n/56816/" target="_blank">Google走到关键时刻：Buzz发布的背后</a><span style="color:gray">(2010-02-10 11:30)</span><br/>· <a href="http://news.cnblogs.com/n/56815/" target="_blank">李开复创新工场发展基金曝光 首单投移动互联</a><span style="color:gray">(2010-02-10 11:28)</span><br/>· <a href="http://news.cnblogs.com/n/56814/" target="_blank">Sun前CEO欲写自传 称经济危机是Sun被购主因</a><span style="color:gray">(2010-02-10 11:25)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" 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> C#中字段与属性性能比较</title><link>http://www.cnblogs.com/xiaomin/archive/2009/01/15/1376183.html</link><dc:creator>肖敏</dc:creator><author>肖敏</author><pubDate>Thu, 15 Jan 2009 03:28:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaomin/archive/2009/01/15/1376183.html</guid><description><![CDATA[<p>阅读: 3509 评论: 23 作者: <a href="http://www.cnblogs.com/xiaomin/" target="_blank">肖敏</a> 发表于 2009-01-15 11:28 <a href="http://www.cnblogs.com/xiaomin/archive/2009/01/15/1376183.html" target="_blank">原文链接</a></p><p>&#160;&#160; &#160;【摘要】【目的】比较字段与属性读取的性能【结论】<span style="font-size: 18pt; "><span style="font-size: 24pt; "><span style="font-size: 12pt; "><span style="font-size: 10pt; ">使用字段比属性赋值，快50-60倍左右，读取，快3倍左右。但是<span style="font-size: 12px; "><span style="font-size: 10pt; ">它不可能成为影响性能的主要瓶颈</span></span></span></span></span></span></p>
<p><strong>&#160;&#160; &#160;&#160;</strong><strong>Effective C# </strong><strong>原则</strong><strong>1</strong><strong>：尽可能的使用属性（</strong><strong>property</strong><strong>），而不是数据成员（</strong><strong>field</strong><strong>）。</strong></p>
<div><strong><span style="font-size: 9pt"><span style="font-weight: normal;">&#160;&#160; &#160; &#160;<span style="font-size: 13px; ">把所有的字段都设为私有字段，如果要暴露它们，则把它们封装成属性。这也是微软推荐的方式。具体的好处此处不赘述。</span></span></span></strong></div>
<span style="font-size: 10pt; "><span style="font-size: 10pt; ">
<p>&#160;&#160; &#160; 属性的实质是方法（get和set方法），IL中没有属性的概念。因此，使用属性必然会带来性能的降低。到底使用属性和使用字段的性能差多少。我自己写了一个小程序进行测试。主要代码如下：</p>
</span></span>
<p>
</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_111510" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_111510').style.display='none'; document.getElementById('Code_Open_Image_111510').style.display='inline'; document.getElementById('Code_Open_Text_111510').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" style="display: none; "><img id="Code_Open_Image_111510" style="display: inline; " onclick="this.style.display='none'; document.getElementById('Code_Open_Text_111510').style.display='none'; getElementById('Code_Closed_Image_111510').style.display='inline'; getElementById('Code_Closed_Text_111510').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span id="Code_Closed_Text_111510" class="cnblogs_code_Collapse" style="display: none; ">Code</span><span id="Code_Open_Text_111510" style="display: inline; "><br />
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&#160;&#160;&#160;&#160;</span><span style="color: #0000FF;">public</span><span style="color: #000000;">&#160;</span><span style="color: #0000FF;">class</span><span style="color: #000000;">&#160;TestFeildProperty<br />
&#160;&#160; &#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF;">static</span><span style="color: #000000;">&#160;</span><span style="color: #0000FF;">readonly</span><span style="color: #000000;">&#160;</span><span style="color: #0000FF;">int</span><span style="color: #000000;">&#160;_RunTime&#160;</span><span style="color: #000000;">=</span><span style="color: #000000;">&#160;</span><span style="color: #800080;">10000000</span><span style="color: #000000;">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF;">public</span><span style="color: #000000;">&#160;</span><span style="color: #0000FF;">static</span><span style="color: #000000;">&#160;</span><span style="color: #0000FF;">void</span><span style="color: #000000;">&#160;UseField()<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;DateTime&#160;begin&#160;</span><span style="color: #000000;">=</span><span style="color: #000000;">&#160;DateTime.Now;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF;">int</span><span style="color: #000000;">&#160;milliSecondBegin&#160;</span><span style="color: #000000;">=</span><span style="color: #000000;">&#160;DateTime.Now.Millisecond;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF;">for</span><span style="color: #000000;">&#160;(</span><span style="color: #0000FF;">int</span><span style="color: #000000;">&#160;i&#160;</span><span style="color: #000000;">=</span><span style="color: #000000;">&#160;</span><span style="color: #800080;">0</span><span style="color: #000000;">;&#160;i&#160;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&#160;_RunTime;&#160;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;_TestField&#160;</span><span style="color: #000000;">=</span><span style="color: #000000;">&#160;</span><span style="color: #800080;">1</span><span style="color: #000000;">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;DateTime&#160;end&#160;</span><span style="color: #000000;">=</span><span style="color: #000000;">&#160;DateTime.Now;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;TimeSpan&#160;result&#160;</span><span style="color: #000000;">=</span><span style="color: #000000;">&#160;end&#160;</span><span style="color: #000000;">-</span><span style="color: #000000;">&#160;begin;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Console.WriteLine(result.ToString());<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF;">public</span><span style="color: #000000;">&#160;</span><span style="color: #0000FF;">static</span><span style="color: #000000;">&#160;</span><span style="color: #0000FF;">void</span><span style="color: #000000;">&#160;UseProperty()<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;DateTime&#160;begin&#160;</span><span style="color: #000000;">=</span><span style="color: #000000;">&#160;DateTime.Now;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF;">int</span><span style="color: #000000;">&#160;milliSecondBegin&#160;</span><span style="color: #000000;">=</span><span style="color: #000000;">&#160;DateTime.Now.Millisecond;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF;">for</span><span style="color: #000000;">&#160;(</span><span style="color: #0000FF;">int</span><span style="color: #000000;">&#160;i&#160;</span><span style="color: #000000;">=</span><span style="color: #000000;">&#160;</span><span style="color: #800080;">0</span><span style="color: #000000;">;&#160;i&#160;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&#160;_RunTime;&#160;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;TestField&#160;</span><span style="color: #000000;">=</span><span style="color: #000000;">&#160;</span><span style="color: #800080;">1</span><span style="color: #000000;">;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;DateTime&#160;end&#160;</span><span style="color: #000000;">=</span><span style="color: #000000;">&#160;DateTime.Now;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;TimeSpan&#160;result&#160;</span><span style="color: #000000;">=</span><span style="color: #000000;">&#160;end&#160;</span><span style="color: #000000;">-</span><span style="color: #000000;">&#160;begin;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Console.WriteLine(result.ToString());<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF;">static</span><span style="color: #000000;">&#160;</span><span style="color: #0000FF;">int</span><span style="color: #000000;">&#160;_TestField;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF;">static</span><span style="color: #000000;">&#160;</span><span style="color: #0000FF;">int</span><span style="color: #000000;">&#160;TestField<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF;">set</span><span style="color: #000000;">&#160;&#160;{&#160;_TestField&#160;</span><span style="color: #000000;">=</span><span style="color: #000000;">&#160;value;&#160;}<br />
<p>&#160;&#160; &#160; &#160; &#160; &#160; &#160;get&#160;&#160;{&#160;return&#160;_TestField;&#160;&#160;&#160;}</p>
<p>&#160;&#160; &#160; &#160; &#160;}</p>
<p>&#160;&#160; }</p>
</span></span></div>
<p>&nbsp;</p>
<p>&#160;&#160; &#160; &#160;<span style="font-size: 12px; ">测试方式为对字段和属性循环赋值和读取（以上代码只有赋值部分）。</span></p>
<p><font size="3"><span style="font-size: 12px; ">
<div class="cnblogs_code"><img id="Code_Closed_Image_112243" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_112243').style.display='none'; document.getElementById('Code_Open_Image_112243').style.display='inline'; document.getElementById('Code_Open_Text_112243').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" style="display: none; "><img id="Code_Open_Image_112243" style="display: inline; " onclick="this.style.display='none'; document.getElementById('Code_Open_Text_112243').style.display='none'; getElementById('Code_Closed_Image_112243').style.display='inline'; getElementById('Code_Closed_Text_112243').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span id="Code_Closed_Text_112243" class="cnblogs_code_Collapse" style="display: none; ">Code</span><span id="Code_Open_Text_112243" style="display: inline; "><br />
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&#160;&#160;&#160;&#160;</span><span style="color: #0000FF;">class</span><span style="color: #000000;">&#160;Program<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000FF;">static</span><span style="color: #000000;">&#160;</span><span style="color: #0000FF;">void</span><span style="color: #000000;">&#160;Main(</span><span style="color: #0000FF;">string</span><span style="color: #000000;">[]&#160;args)<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;TestFeildProperty.UseField();<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;TestFeildProperty.UseProperty();<br />
<p>&#160;&#160; &#160; &#160; &#160;}</p>
<p>&#160;&#160; &#160;}</p>
</span></span></div>
</span></font></p>
<p>
</p>
<div style="text-align: center;"><strong><span style="font-size: 9pt">测试结果</span></strong></div>
<strong><span style="font-size: 9pt; ">
<div>
<table style="width: 272px; height: 77px; text-align: left; " cellspacing="1" cellpadding="1" width="272" summary="" border="1" align="center">
    <tr>
        <td>表1</td>
        <td>循环赋值</td>
        <td>&#160;</td>
    </tr>
    <tr>
        <td>&#160;</td>
        <td>一千万次</td>
        <td>一亿次</td>
    </tr>
    <tr>
        <td>字段</td>
        <td>0.03125秒</td>
        <td>
        <p>0.3125秒</p>
        </td>
    </tr>
    <tr>
        <td>属性</td>
        <td>1.702315秒</td>
        <td>17.140625秒</td>
    </tr>
</table>
</div>
<div>
<table style="width: 272px; height: 77px; text-align: left; " cellspacing="1" cellpadding="1" width="272" summary="" border="1" align="center">
    <tr>
        <td>表2</td>
        <td>循环读取</td>
        <td>&#160;</td>
    </tr>
    <tr>
        <td>&#160;</td>
        <td>一千万次</td>
        <td>一亿次</td>
    </tr>
    <tr>
        <td>字段</td>
        <td>0.03125秒</td>
        <td>
        <p>0.2825秒</p>
        </td>
    </tr>
    <tr>
        <td>属性</td>
        <td>0.09375秒</td>
        <td>0.984375秒</td>
    </tr>
</table>
</div>
<div></div>
<p style="text-align: left; ">&#160;&#160; &#160; &#160;结论：使用属性和字段之间的性能差距大概是：赋值，50-60倍左右，读取，3倍左右。</p>
<div><span style="font-weight: normal;">&#160;&#160; &#160; &#160;补充：这个测试结果只是针对int型的，也许对字符串或者其他类型的会有不同结果。</span></div>
<div><span style="font-weight: normal;">&#160;&#160; &#160; &#160;但是可以看出来，对属性赋值一次的时间是一千万分之一秒，所以即使它比字段赋值慢50倍，</span>它不可能成为影响性能的主要瓶颈<span style="font-weight: normal;">。应该可以放心使用。</span></div>
<div></div>
</span></strong>
<p>&nbsp;</p>
<p>&#160;</p><img src="http://www.cnblogs.com/xiaomin/aggbug/1376183.html?type=1" width="1" height="1" alt=""/><p>评论: 23　<a href="http://www.cnblogs.com/xiaomin/archive/2009/01/15/1376183.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/xiaomin/archive/2009/01/15/1376183.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56818/" target="_blank">Google Buzz的优缺点分析</a><span style="color:gray">(2010-02-10 11:39)</span><br/>· <a href="http://news.cnblogs.com/n/56817/" target="_blank">京东商城刘强东：两个回合谈定1.5亿美元融资</a><span style="color:gray">(2010-02-10 11:30)</span><br/>· <a href="http://news.cnblogs.com/n/56816/" target="_blank">Google走到关键时刻：Buzz发布的背后</a><span style="color:gray">(2010-02-10 11:30)</span><br/>· <a href="http://news.cnblogs.com/n/56815/" target="_blank">李开复创新工场发展基金曝光 首单投移动互联</a><span style="color:gray">(2010-02-10 11:28)</span><br/>· <a href="http://news.cnblogs.com/n/56814/" target="_blank">Sun前CEO欲写自传 称经济危机是Sun被购主因</a><span style="color:gray">(2010-02-10 11:25)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" 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>这是博客园的bug吗？</title><link>http://www.cnblogs.com/xiaomin/archive/2009/01/13/1375174.html</link><dc:creator>肖敏</dc:creator><author>肖敏</author><pubDate>Tue, 13 Jan 2009 14:04:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaomin/archive/2009/01/13/1375174.html</guid><description><![CDATA[<p>阅读: 459 评论: 4 作者: <a href="http://www.cnblogs.com/xiaomin/" target="_blank">肖敏</a> 发表于 2009-01-13 22:04 <a href="http://www.cnblogs.com/xiaomin/archive/2009/01/13/1375174.html" target="_blank">原文链接</a></p>&#160;&#160; &#160; 我的随笔<span  style="font-family: Verdana; font-size: 13px; font-weight: bold; line-height: 18px; "><a class="titlelnk" href="http://www.cnblogs.com/xiaomin/archive/2009/01/13/1374717.html" style="padding-left: 2px; color: red; text-decoration: none; ">Sql Server 2005中的架构(Schema)、用户(User)、角色(Role)和登录(Login)(二)</a><span  style="font-weight: normal;">是昨天晚上发布的。今天修改的时候无意中发现可以取消&#8220;<span  style="color: #333333; font-family: arial; font-size: 12px; line-height: normal; "><label for="Editor_Edit_APOptions_chkIsAggregated" style="font-size: 12px; font-weight: normal; margin-top: 0px; margin-right: 0px; margin-bottom: 2px; margin-left: 0px; color: #111111; background: inherit; ">发布到所选网站分类主页</label>&#160;</span>&#8221;的checkbox,然后点击&#8220;存为草稿&#8221;，再重新发布，这篇随笔就又变成最新发布的了。如果这样的话，就可以不断的让帖子放在最前面，这算是一个 BUG吗，我拿我的这篇随笔做了个实验。希望大家讨论一下，不是想搞破坏。</span></span><img src="http://www.cnblogs.com/xiaomin/aggbug/1375174.html?type=1" width="1" height="1" alt=""/><p>评论: 4　<a href="http://www.cnblogs.com/xiaomin/archive/2009/01/13/1375174.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/xiaomin/archive/2009/01/13/1375174.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56818/" target="_blank">Google Buzz的优缺点分析</a><span style="color:gray">(2010-02-10 11:39)</span><br/>· <a href="http://news.cnblogs.com/n/56817/" target="_blank">京东商城刘强东：两个回合谈定1.5亿美元融资</a><span style="color:gray">(2010-02-10 11:30)</span><br/>· <a href="http://news.cnblogs.com/n/56816/" target="_blank">Google走到关键时刻：Buzz发布的背后</a><span style="color:gray">(2010-02-10 11:30)</span><br/>· <a href="http://news.cnblogs.com/n/56815/" target="_blank">李开复创新工场发展基金曝光 首单投移动互联</a><span style="color:gray">(2010-02-10 11:28)</span><br/>· <a href="http://news.cnblogs.com/n/56814/" target="_blank">Sun前CEO欲写自传 称经济危机是Sun被购主因</a><span style="color:gray">(2010-02-10 11:25)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" 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>Sql Server 2005中的架构(Schema)、用户(User)、角色(Role)和登录(Login)(二)</title><link>http://www.cnblogs.com/xiaomin/archive/2009/01/13/1374717.html</link><dc:creator>肖敏</dc:creator><author>肖敏</author><pubDate>Tue, 13 Jan 2009 13:53:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaomin/archive/2009/01/13/1374717.html</guid><description><![CDATA[<p>阅读: 3502 评论: 21 作者: <a href="http://www.cnblogs.com/xiaomin/" target="_blank">肖敏</a> 发表于 2009-01-13 21:53 <a href="http://www.cnblogs.com/xiaomin/archive/2009/01/13/1374717.html" target="_blank">原文链接</a></p><p><font size="3">&#160;&#160;&#160;&#160; </font>在第一节中，我们了解了架构的意义。在第二节的开始，我们暂时忘记架构这个东西。我们假设我们的数据库只有数据库对象。</p>
<p>&#160;&#160; &#160; &#160;李老板开了一个小公司，公司有个仓库，堆放了一些货物，由于仓库小，为了节约成本，这个仓库根本没有锁。只要知道仓库在哪里，就可以去取货。这种情况对应数据库来说，就是只要我知道数据库名和表名，我就可以对它进行操作。这对程序员来说当然是最方便了。这就是数据库的第一阶段：<strong>无权限管理阶段。</strong>假如大家用过Win3.X,那它们基本就是无权限管理阶段。这下小偷就爽翻了。</p>
<p style="text-align: center"><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/xiaomin/%E5%B0%8F%E5%81%B7%E5%85%A5%E5%AE%A42.jpg" border="0" /><br />
</p>
<p>&#160;&#160; &#160; &#160;最近仓库里的东西老是不翼而飞。李老板才明白，就算是员工都是自觉的，但是别的人也可以拿走里面的货物，怎么办呢？老板一咬牙，花一百块钱买了一把锁！并且只给少数几个人配钥匙。这下东西被别的公司的人拿走的情况基本杜绝了。对于数据库来说，相当于把人分成了两种，一种授权用户，一种未授权用户。这时，数据库就有了用户的概念，但是它只有一个用户，就是有钥匙的人，它只对有钥匙的人开放。这就是数据库权限管理的第二阶段：<strong>上锁阶段或者单用户管理阶段。</strong></p>
<p style="text-align: center"><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/xiaomin/%E4%B8%8A%E9%94%812.JPG" border="0" /><strong><br />
</strong></p>
<p><strong>&#160;&#160; &#160; &#160;</strong>好景不长，老板发现仓库的东西还是经常少。明明都是有钥匙的人才能进去呀。但是，谁拿了多少，根本没办法查出来。老板猜测原因有二：一，有些人拿了不该拿的东西。二，有些人偷偷的去配了钥匙。老板一咬牙，没收所有的钥匙。花800块一个月雇个仓库管理员，每个进仓库拿东西的人都要登记。李老板还给给仓库管理员一个清单，谁可以拿什么东西，清单如下：</p>
<p align="center">
<table style="border-collapse: collapse; text-align: center; " cellspacing="0" cellpadding="0" border="1">
    <tr>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 77.7pt; padding-top: 0in; " valign="top" width="104">
        <p><span style="font-family: 宋体">姓名</span></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p><span style="font-family: 宋体">货物1</span></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p><span style="font-family: 宋体">货物2</span></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p><span style="font-family: 宋体">货物3</span></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 79.3pt; padding-top: 0in; " valign="top" width="106">
        <p><span style="font-family: 宋体">货物4</span></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p><span style="font-family: 宋体">货物5</span></p>
        </td>
    </tr>
    <tr>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 77.7pt; padding-top: 0in; " valign="top" width="104">
        <p><span style="font-family: 宋体">张三</span></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p>Y</p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p>Y</p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p>N</p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 79.3pt; padding-top: 0in; " valign="top" width="106">
        <p>N</p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p>N</p>
        </td>
    </tr>
    <tr>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 77.7pt; padding-top: 0in; " valign="top" width="104">
        <p><span style="font-family: 宋体">李四</span></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p>Y</p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p>Y</p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p>Y</p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 79.3pt; padding-top: 0in; " valign="top" width="106">
        <p>N</p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p>N</p>
        </td>
    </tr>
    <tr>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 77.7pt; padding-top: 0in; " valign="top" width="104">
        <p><span style="font-family: 宋体">王五</span></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p>Y</p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p>Y</p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p>Y</p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 79.3pt; padding-top: 0in; " valign="top" width="106">
        <p>Y</p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p>Y</p>
        </td>
    </tr>
    <tr>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 77.7pt; padding-top: 0in; " valign="top" width="104">
        <p><span style="font-family: 宋体">赵六</span></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p>N</p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p>Y</p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p>Y</p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 79.3pt; padding-top: 0in; " valign="top" width="106">
        <p>Y</p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p>Y</p>
        </td>
    </tr>
</table>
</p>
<p>&#160;&#160; &#160; &#160;这时的管理上了一个新台阶，称为<strong>用户-权限管理阶段</strong>。公司再也没发生丢东西的现象。老板非常得意自己英明的决定。这就非常类似windows现在的用户权限管理了。</p>
<p style="text-align: center"><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/xiaomin/%E7%94%A8%E6%88%B7-%E6%9D%83%E9%99%90%E7%AE%A1%E7%90%86.jpg" border="0" /><br />
</p>
<p><br />
</p>
<p>&#160;&#160; &#160; &#160;也许有人细心的发现，你说的不对，windows权限管理中有角色呀！没错，为什么要有角色呢？没有角色不是照样不丢东西吗？这个问题稍后再谈。</p>
<p>&#160;&#160; &#160; &#160;话说过了一年，李老板的生意越做越大，仓库里的东西也越来越多，最近张三反应，去仓库取货老是要排队，而且经常要等很久才能取到货，李老板心想，取货的人一共就这几个人，还要排队，岂有此理！把仓库保管员叫过来！保管员早有准备，递给李老板一份最新的清单：</p>
<p align="center">&#160;</p>
<table style="border-collapse: collapse; " cellspacing="0" cellpadding="0" align="center" border="1">
    <tr>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 77.7pt; padding-top: 0in; " valign="top" width="104">
        <p style="margin: 0px auto 10px; text-align: center" align="center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">姓名</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">货物1</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">货物2</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">货物3</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 79.3pt; padding-top: 0in; " valign="top" width="106">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate"><span style="color: red">货物......</span></span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate"><span style="color: red">货物1000</span></span></font></p>
        </td>
    </tr>
    <tr>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 77.7pt; padding-top: 0in; " valign="top" width="104">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">张三</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">N</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 79.3pt; padding-top: 0in; " valign="top" width="106">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">N</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center" align="center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">N</span></font></p>
        </td>
    </tr>
    <tr>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 77.7pt; padding-top: 0in; " valign="top" width="104">
        <p style="margin: 0px auto 10px; text-align: center" align="center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">李四</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center" align="center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center" align="center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center" align="center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 79.3pt; padding-top: 0in; " valign="top" width="106">
        <p style="margin: 0px auto 10px; text-align: center" align="center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">N</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center" align="center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">N</span></font></p>
        </td>
    </tr>
    <tr>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 77.7pt; padding-top: 0in; " valign="top" width="104">
        <p style="margin: 0px auto 10px; text-align: center" align="center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">王五</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center" align="center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center" align="center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center" align="center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 79.3pt; padding-top: 0in; " valign="top" width="106">
        <p style="margin: 0px auto 10px; text-align: center" align="center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center" align="center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
    </tr>
    <tr>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 77.7pt; padding-top: 0in; " valign="top" width="104">
        <p style="margin: 0px auto 10px; text-align: center" align="center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">赵六</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center" align="center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">N</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center" align="center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center" align="center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 79.3pt; padding-top: 0in; " valign="top" width="106">
        <p style="margin: 0px auto 10px; text-align: center" align="center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center" align="center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
    </tr>
</table>
<p align="left">&#160;&#160; &#160; &#160;每次来一个人取货，保管员都要根据这张清单对一千个货物，幸亏取货的人少，如果再多几个人的话，估计就要在仓库门口打架了。李老板又开始琢磨了。现在东西是不会丢了，但是每次取货慢成这样，等我货再多到一万种，我这生意还能做吗？该怎么才能提高仓库管理员的效率呢？这时仓库管理员早看出李老板的心思，色咪咪看着李老板着说:&#8220;老板，再招一个管理员吧，我老婆刚好生完孩子在家里待业。。。&#8221;。李老板一听就火了：你当招人不用花钱啊！有了！我买5个货架就搞定了！过两天我告诉你新的管理办法，你老婆还是在家多休息几天吧。</p>
<p>&#160;&#160; &#160; &#160;过了几天，老板把5个货架采购回来，放进仓库，然后给管理员一份管理手册。新的管理手册如下：</p>
<p style="text-align: center"><font size="4"><span style="font-size: 16px; line-height: normal; border-collapse: collapse">手册第一页：<span style="color: red">货架权限清单</span></span></font></p>
<p>
<table style="border-collapse: collapse; " cellspacing="0" cellpadding="0" align="center" border="1">
    <tr>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 77.7pt; padding-top: 0in; " valign="top" width="104">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">姓名</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">货架1</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">货架2</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">货架3</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 79.3pt; padding-top: 0in; " valign="top" width="106">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">货架4</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">货架5</span></font></p>
        </td>
    </tr>
    <tr>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 77.7pt; padding-top: 0in; " valign="top" width="104">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">张三</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">N</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 79.3pt; padding-top: 0in; " valign="top" width="106">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">N</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">N</span></font></p>
        </td>
    </tr>
    <tr>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 77.7pt; padding-top: 0in; " valign="top" width="104">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">李四</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 79.3pt; padding-top: 0in; " valign="top" width="106">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">N</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">N</span></font></p>
        </td>
    </tr>
    <tr>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 77.7pt; padding-top: 0in; " valign="top" width="104">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">王五</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 79.3pt; padding-top: 0in; " valign="top" width="106">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
    </tr>
    <tr>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 77.7pt; padding-top: 0in; " valign="top" width="104">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">赵六</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">N</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 79.3pt; padding-top: 0in; " valign="top" width="106">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
    </tr>
</table>
<span style="font-size: 16px; line-height: normal; border-collapse: collapse">
<div style="text-align: center">手册第二页：<span style="color: red">1号<span style="color: red">货架货物清单</span></span></div>
</span>
</p>
<p>&#160;</p>
<p style="text-align: center"></p>
<p style="text-align: center"><font color="#ff0000" size="4"><span style="font-size: 16px; line-height: normal; border-collapse: collapse"><span style="font-size: 14px; color: #000000; line-height: 21px; border-collapse: separate">
<table style="border-collapse: collapse; " cellspacing="0" cellpadding="0" align="center" border="1">
    <tr>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 77.7pt; padding-top: 0in; " valign="top" width="104">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">货物1</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">货物2</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">货物3</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">货物4</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 79.3pt; padding-top: 0in; " valign="top" width="106">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">货物.......</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">货架190</span></font></p>
        </td>
    </tr>
</table>
</span></span></font></p>
<p style="text-align: center"><span style="font-size: 16px; line-height: normal; border-collapse: collapse">&#160;手册第三页：</span><span style="color: red"><span style="font-size: 16px; line-height: normal; border-collapse: collapse">2<span style="color: red">号<span style="color: red">货架货物清单</span></span></span>&#160;</span></p>
<p style="text-align: center"><font color="#ff0000"><span style="color: #000000">
<table style="border-collapse: collapse; " cellspacing="0" cellpadding="0" align="center" border="1">
    <tr>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 77.7pt; padding-top: 0in; " valign="top" width="104">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">货物191</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">货物192</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">货物193</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">货物194</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 79.3pt; padding-top: 0in; " valign="top" width="106">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">货物.......</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">货架390</span></font></p>
        </td>
    </tr>
</table>
</span></font></p>
<p style="text-align: center">&#160;第四页，第五页省略</p>
<p style="text-align: left">&#160;&#160; &#160; &#160;每次货物入库的时候，根据货架货物清单放到相应的货架上，然后贴上标签。出库的时候哦只要看货架号码就可以啦。</p>
<p style="text-align: left">&#160;&#160; &#160; &#160;看到这里，也许有人恍然大悟，这不就是第一节讲的&#8220;架构Schema&#8221;吗？没错，现在我们终于知道，架构概念的引入就是为了解决数据库对象太多不好管理的缺点。到现在为止，我们的数据库管理就变成了<strong>用户-架构-数据库对象</strong>的模式了。</p>
<p style="text-align: left">&#160;&#160; &#160; &#160;在sql server2000中，用户和架构是不分离的，到了2005才分离。其实2000中的用户和架构概念就是给张三、李四分配固定的货架。这是一种更简单的管理方法。</p>
<p style="text-align: left">
<table style="border-collapse: collapse; " cellspacing="0" cellpadding="0" align="center" border="1">
    <tr>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 77.7pt; padding-top: 0in; " valign="top" width="104">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">姓名</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">张三的货架</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">李四的货架</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">王五的货架</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 79.3pt; padding-top: 0in; " valign="top" width="106">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">赵六的货架</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">...的货架</span></font></p>
        </td>
    </tr>
    <tr>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 77.7pt; padding-top: 0in; " valign="top" width="104">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">张三</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">-</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">-</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 79.3pt; padding-top: 0in; " valign="top" width="106">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">-</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">-</span></font></p>
        </td>
    </tr>
    <tr>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 77.7pt; padding-top: 0in; " valign="top" width="104">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">李四</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">-</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">-</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 79.3pt; padding-top: 0in; " valign="top" width="106">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">-</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">-</span></font></p>
        </td>
    </tr>
    <tr>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 77.7pt; padding-top: 0in; " valign="top" width="104">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">王五</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">-</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">-</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 79.3pt; padding-top: 0in; " valign="top" width="106">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">-</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">-</span></font></p>
        </td>
    </tr>
    <tr>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 77.7pt; padding-top: 0in; " valign="top" width="104">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">赵六</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">-</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">-</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">-</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 79.3pt; padding-top: 0in; " valign="top" width="106">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">Y</span></font></p>
        </td>
        <td style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 71.45pt; padding-top: 0in; " valign="top" width="95">
        <p style="margin: 0px auto 10px; text-align: center"><font size="4"><span style="font-size: 14px; line-height: 21px; border-collapse: separate">-</span></font></p>
        </td>
    </tr>
</table>
</p>
<p>&#160;&#160; &#160; &#160; 在李老板的英明领导下，他的小公司不断壮大，人数增加到几十人，张三李四等元老级人物还担任了不同项目部门的主管。但是随着公司的发展，新的麻烦又来考验李老板的智商了，到底还会发生什么危机的情况呢？请看第三节。角色。</p><img src="http://www.cnblogs.com/xiaomin/aggbug/1374717.html?type=1" width="1" height="1" alt=""/><p>评论: 21　<a href="http://www.cnblogs.com/xiaomin/archive/2009/01/13/1374717.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/xiaomin/archive/2009/01/13/1374717.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56818/" target="_blank">Google Buzz的优缺点分析</a><span style="color:gray">(2010-02-10 11:39)</span><br/>· <a href="http://news.cnblogs.com/n/56817/" target="_blank">京东商城刘强东：两个回合谈定1.5亿美元融资</a><span style="color:gray">(2010-02-10 11:30)</span><br/>· <a href="http://news.cnblogs.com/n/56816/" target="_blank">Google走到关键时刻：Buzz发布的背后</a><span style="color:gray">(2010-02-10 11:30)</span><br/>· <a href="http://news.cnblogs.com/n/56815/" target="_blank">李开复创新工场发展基金曝光 首单投移动互联</a><span style="color:gray">(2010-02-10 11:28)</span><br/>· <a href="http://news.cnblogs.com/n/56814/" target="_blank">Sun前CEO欲写自传 称经济危机是Sun被购主因</a><span style="color:gray">(2010-02-10 11:25)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" 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>Sql Server 2005中的架构(Schema)、用户(User)、角色(Role)和登录(Login)(一)</title><link>http://www.cnblogs.com/xiaomin/archive/2009/01/12/1374186.html</link><dc:creator>肖敏</dc:creator><author>肖敏</author><pubDate>Mon, 12 Jan 2009 09:21:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaomin/archive/2009/01/12/1374186.html</guid><description><![CDATA[<p>阅读: 4041 评论: 15 作者: <a href="http://www.cnblogs.com/xiaomin/" target="_blank">肖敏</a> 发表于 2009-01-12 17:21 <a href="http://www.cnblogs.com/xiaomin/archive/2009/01/12/1374186.html" target="_blank">原文链接</a></p><p>&#160;&#160; &#160; &#160;我相信很多人接触这些概念的时候一头雾水。要把这些概念理清楚真不是件容易的事，哪像原始社会，只要能分清楚什么能吃什么不能吃就行了。</p>
<p>&#160;&#160; &#160; &#160;但是我始终坚信，每一个概念的产生必然是因为碰到了无法解决的问题。换句话说，如果没有它，必然会导致某些问题难以解决。所以我想从这个角度切入，希望能把这几个复杂而暧昧的多角关系从最实用的角度来阐述清楚。</p>
<p>&#160;&#160; &#160; &#160;<strong><span style="color: red; ">在问题的最初，我们假定的数据库什么都没有。</span></strong></p>
<p>&#160;&#160; &#160; &#160;<strong>数据库对象。</strong>首先,数据库对象是比较容易懂的。所有的表,视图，存储过程，触发器都称为数据库对象。</p>
<p>&#160;&#160; &#160; &#160;我们可以拿一个网站来做类比。一个网站包含很多的网页，图片，脚本文件，我们姑且称它为网站对象。</p>
<p>&#160;&#160; &#160; &#160;显然，我们不可能把所有的网站对象都放到一个文件夹下面，同样道理，数据库对象也不可能象煮饺子一样就在数据库里这么一锅出。对于网站，我们通常会把不同模块的文件放在不同的子文件夹下，那么谁是存放数据库对象的文件夹呢？答案就是：架构（Schema）.</p>
<p>&#160;&#160; &#160; &#160;<strong>架构<span style="font-weight: normal"><strong>（Schema）。</strong>微软的官方说明（MSDN）： "数据库架构是一个独立于数据库用户的非重复命名空间，您可以将架构视为对象的容器"，详细参考<a href="http://technet.microsoft.com/zh-cn/library/ms190387.aspx">http://technet.microsoft.com/zh-cn/library/ms190387.aspx</a>.我们知道，在JAVA中，命名空间名其实就是文件夹名。因此我们非常明确一点：一个对象只能属于一个架构，就像一个文件只能存放于一个文件夹中一样。与文件夹不同的是，架构是不能嵌套的，如此而已。因此，我们要访问一个数据库对象的时候，通常应该是引用它的全名"<em>架构名. 对象名</em>"，这点非常类似C#。</span></strong></p>
<p>&#160;&#160; &#160; &#160;问：为什么有的时候写select * from tablename也可以执行呢？</p>
<p style="text-align: left">&#160;&#160; &#160; &#160;答:这是因为default schema.当只写tablename时，Sql Server会自动加上当前登录用户的default schema。</p>
<p style="text-align: center"><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/xiaomin/defaultschema.jpg" border="0" /></p>
<p>&#160;&#160; &#160; 如果此表不属于当前登录用户的default schema,将会提示无效的对象名。</p>
<p style="text-align: center"><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/xiaomin/DB.InvalidObjectname.jpg" border="0" /><br />
</p>
<p>&#160;&#160; &#160; 加上shcema以后成功。</p>
<p style="text-align: center"><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/xiaomin/DB.validObjectname.jpg" border="0" /><br />
</p>
<p>&#160;&#160; &#160; 不过我们也可以更改当前用户的default schema，这时就可以不用加前缀了。</p>
<p>&#160;</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_171835" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_171835').style.display='none'; document.getElementById('Code_Open_Image_171835').style.display='inline'; document.getElementById('Code_Open_Text_171835').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_171835" style="display: inline" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_171835').style.display='none'; getElementById('Code_Closed_Image_171835').style.display='inline'; getElementById('Code_Closed_Text_171835').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_171835" style="display: none">Code</span><span id="Code_Open_Text_171835" style="display: inline"><br />
<div style="text-align: left"><span style="color: #0000ff">&#160;&#160; &#160;ALTER</span><span style="color: #000000">&#160;</span><span style="color: #ff00ff">USER</span><span style="color: #000000">&#160;dbo&#160;</span><span style="color: #0000ff">WITH</span><span style="color: #000000">&#160;DEFAULT_SCHEMA&#160;</span><span style="color: #808080">=emdbuser;</span></div>
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--></span></div>
<p>&#160;&#160; &#160; 当然，我们也可以改变此表的schema,相当于把这个表放到另一个文件夹,从emdbuser放到dbo中。</p>
<p>&#160;</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_172514" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_172514').style.display='none'; document.getElementById('Code_Open_Image_172514').style.display='inline'; document.getElementById('Code_Open_Text_172514').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_172514" style="display: inline" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_172514').style.display='none'; getElementById('Code_Closed_Image_172514').style.display='inline'; getElementById('Code_Closed_Text_172514').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_172514" style="display: none">Code</span><span id="Code_Open_Text_172514" style="display: inline"><br />
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">&#160;&#160; &#160;alter</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">schema&#160;</span><font color="#0000ff"><span style="color: #000000"><span style="color: #000000">dbo TRANSFER emdbuser.Borrower</span></span></font></span></div>
<p>&#160;</p>
<p>&#160;&#160; &#160; &#160;以上两种作法在真实项目中都不应该作为解决方案，因为它改变了原来的设置。我们最希望的是，即使我们以dbo登陆，我们也可以伪装成emdbuser来操作数据库对象，伪装完了还能切换回来。在Sql Server中,刚好有这样的语句实现这个功能。</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_102900" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_102900').style.display='none'; document.getElementById('Code_Open_Image_102900').style.display='inline'; document.getElementById('Code_Open_Text_102900').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" style="display: none; "><img id="Code_Open_Image_102900" style="display: inline; " onclick="this.style.display='none'; document.getElementById('Code_Open_Text_102900').style.display='none'; getElementById('Code_Closed_Image_102900').style.display='inline'; getElementById('Code_Closed_Text_102900').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_102900" style="display: none; ">Code</span><span id="Code_Open_Text_102900" style="display: inline; "><br />
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">&#160;&#160;&#160;&#160; EXECUTE</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">AS</span><span style="color: #000000">&#160;</span><span style="color: #ff00ff">USER</span><span style="color: #000000">&#160;</span><span style="color: #808080">=</span><span style="color: #000000">&#160;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">emdbuser</span><span style="color: #ff0000">'</span><span style="color: #000000">;<br />
</span></span></div>
<p>&#160;&#160;&#160; &#160; 这种机制被称为&#8220;上下文切换&#8221;，操作完以后，可以实用REVERT命令切换回来。<span style="color: #c0c0c0; "><span style="color: #c0c0c0; "><span style="color: #c0c0c0; "><span style="color: #c0c0c0; "><span style="color: #808080; "><span style="color: #808080; ">（.NET中也有类似的机制,它们有共同的一个名称叫做<span style="font-family: arial; font-size: 16px; line-height: normal; white-space: pre; ">Impersonate，角色扮演<span style="font-family: verdana; font-size: 14px; line-height: 21px; white-space: normal; ">。）</span></span></span></span></span></span></span></span></p>
<p>&#160;&#160; &#160; &#160;详细解释参照MSDN<a href="http://msdn.microsoft.com/zh-cn/library/bb153640(SQL.90).aspx">http://msdn.microsoft.com/zh-cn/library/bb153640(SQL.90).aspx</a></p>
<p>&#160;&#160; &#160; &#160;<strong>问</strong>：如何根据表名获取一个表的Schema呢？</p>
<p>&#160;&#160; &#160; &#160;<strong>答</strong>：可以参照以下SQL语句从sys.objects视图和sys.schemas视图中获取。</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_103839" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_103839').style.display='none'; document.getElementById('Code_Open_Image_103839').style.display='inline'; document.getElementById('Code_Open_Text_103839').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" style="display: none; "><img id="Code_Open_Image_103839" style="display: inline; " onclick="this.style.display='none'; document.getElementById('Code_Open_Text_103839').style.display='none'; getElementById('Code_Closed_Image_103839').style.display='inline'; getElementById('Code_Closed_Text_103839').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_103839" style="display: none; ">Code</span><span id="Code_Open_Text_103839" style="display: inline; "><br />
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">&#160;&#160;&#160;&#160; select</span><span style="color: #000000">&#160;sys.objects.name,<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; sys.schemas.name<br />
</span><span style="color: #0000ff">&#160;&#160;&#160;&#160; from</span><span style="color: #000000">&#160;&#160;&#160;sys.objects,<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; sys.schemas<br />
</span><span style="color: #0000ff">&#160;&#160;&#160;&#160; where</span><span style="color: #000000">&#160;sys.objects.type</span><span style="color: #808080">=</span><span style="color: #ff0000">'</span><span style="color: #ff0000">U</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #808080">&#160;&#160;&#160;&#160;&#160; and</span><span style="color: #000000">&#160;&#160;&#160;sys.objects.schema_id</span><span style="color: #808080">=</span><span style="color: #000000">sys.schemas.schema_id<br />
&#160;<br />
</span></span></div>
<p>&#160;</p>
<p>&#160;&#160; &#160; &#160;结论：架构就是数据库对象的容器。数据库对象是饮料，架构就是杯子，谁拿杯子喝水呢？当然是用户，那么是不是一个用户只能用一个杯子，一个杯子是不是从一而终，只能给一个人用呢？。请看第二节。 </p><img src="http://www.cnblogs.com/xiaomin/aggbug/1374186.html?type=1" width="1" height="1" alt=""/><p>评论: 15　<a href="http://www.cnblogs.com/xiaomin/archive/2009/01/12/1374186.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/xiaomin/archive/2009/01/12/1374186.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56818/" target="_blank">Google Buzz的优缺点分析</a><span style="color:gray">(2010-02-10 11:39)</span><br/>· <a href="http://news.cnblogs.com/n/56817/" target="_blank">京东商城刘强东：两个回合谈定1.5亿美元融资</a><span style="color:gray">(2010-02-10 11:30)</span><br/>· <a href="http://news.cnblogs.com/n/56816/" target="_blank">Google走到关键时刻：Buzz发布的背后</a><span style="color:gray">(2010-02-10 11:30)</span><br/>· <a href="http://news.cnblogs.com/n/56815/" target="_blank">李开复创新工场发展基金曝光 首单投移动互联</a><span style="color:gray">(2010-02-10 11:28)</span><br/>· <a href="http://news.cnblogs.com/n/56814/" target="_blank">Sun前CEO欲写自传 称经济危机是Sun被购主因</a><span style="color:gray">(2010-02-10 11:25)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" 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>数据库管理对象(SMO)-为什么没有System.Data.DBManagement命名空间？</title><link>http://www.cnblogs.com/xiaomin/archive/2009/01/09/1372920.html</link><dc:creator>肖敏</dc:creator><author>肖敏</author><pubDate>Fri, 09 Jan 2009 13:31:00 GMT</pubDate><guid>http://www.cnblogs.com/xiaomin/archive/2009/01/09/1372920.html</guid><description><![CDATA[<p>阅读: 1797 评论: 15 作者: <a href="http://www.cnblogs.com/xiaomin/" target="_blank">肖敏</a> 发表于 2009-01-09 21:31 <a href="http://www.cnblogs.com/xiaomin/archive/2009/01/09/1372920.html" target="_blank">原文链接</a></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最近要为我们的程序增加数据导出的功能，需用连接数据库，再列出数据库中的表。功能并不复杂，实现也没有难度。而且VS本身就自带了这个东东。如图：</p>
<p align="center"><img height="302" alt="" src="http://www.cnblogs.com/images/cnblogs_com/xiaomin/Snap2.jpg" width="291" border="0" /></p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp; 我所奇怪的是，既然微软已经做了这个工作。为什么没有给出现成的类库给我们使用呢？我觉得非常明显的，应该有一个System.Data.DBManagement命名空间，用于开发者开发出自己的数据库管理程序。如果仅仅因为不同的数据库不一样。那么可以分别有System.Data.DBManagement.Sql,System.Data.DBManagement.Oracle等等。按照我的设想大致应该有如下类：</p>
<p style="text-align: center" align="left"><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/xiaomin/%E7%B1%BB%E5%BA%93%E5%9B%BE.jpg.jpg" border="0" /><br />
</p>
<p>&nbsp;&nbsp; &nbsp; &nbsp;假如我们要获得某个数据库的所有表，我们就可以写以下代码:</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_213050" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_213050').style.display='none'; document.getElementById('Code_Open_Image_213050').style.display='inline'; document.getElementById('Code_Open_Text_213050').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_213050" style="display: inline" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_213050').style.display='none'; getElementById('Code_Closed_Image_213050').style.display='inline'; getElementById('Code_Closed_Text_213050').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_213050" style="display: none">Code</span><span id="Code_Open_Text_213050" style="display: inline"><br />
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Server&nbsp;myServer</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Server();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myServer.Name</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">localhost</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myServer.TrustConnection</span><span style="color: #000000">=</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Database&nbsp;db</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Database();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Database.Server</span><span style="color: #000000">=</span><span style="color: #000000">myServer;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TableCollection&nbsp;tables</span><span style="color: #000000">=</span><span style="color: #000000">Database.GetTables(); </span></span></div>
<p>&nbsp;&nbsp; &nbsp; &nbsp;以上的示例只是简单的意思一下。如果要覆盖所有数据库管理工具的功能，应该是一个比较庞大的类库了。我不知道哪里是不是已经有这样的类库，如果没有，只有自己开发了...</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 帖子发表以后，根据很多朋友的指点(多谢下面的各位同学，具体就不点名了)。一共有三个答案。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.Sql Server的SDK中的SQL Server Management Objects (SMO)应该就是本案的标准答案。美中不足的是，微软只提供Sql Server的数据库管理对象的类库，不支持其他数据库。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这是MSDN上SMO(SQL Server2005)的地址<a href="http://msdn.microsoft.com/zh-cn/library/ms162169(SQL.90).aspx">http://msdn.microsoft.com/zh-cn/library/ms162169(SQL.90).aspx</a></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另外一篇介绍SMO的文章<a href="http://hi.baidu.com/qualylee/blog/item/0e4e0e33a64127fb1a4cff53.html">http://hi.baidu.com/qualylee/blog/item/0e4e0e33a64127fb1a4cff53.html</a></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.MyGeneration的MyMeta.dll中。功能肯定不如SMO强，但是提供了对数据库管理的比较丰富的类，并且支持十几种数据库。尤其可喜的是，MyGeneration现在是开源的。<a href="http://sourceforge.net/projects/mygeneration/">http://sourceforge.net/projects/mygeneration/</a></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不过毕竟MyMeta.dll 的目的并不是用于管理数据库，因此可能对于管理数据库方面的功能少了点。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.SQL Server Web Data Administrator 的SqlAdmin.dll。SQLWebAdm 是在CodeComplex的一个开源项目，也是微软团队开发的，因此也只支持Sql Server。该项目主要是SQL Server管理器的Web版本(不过好像很久没有更新了最近更新时间2007年11月),但是它并没有引用SMO的类库而是自己开发了SqlAdmin.dll，也许是为了独立吧。SqlAdmin.dll中的类跟MyMeta.dll中MyMeta.Sql命名空间的类有些类似，可谓英雄所见略同吧。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.codeplex.com/SqlWebAdmin">http://www.codeplex.com/SqlWebAdmin</a></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 补充：实用ADO.NET的<a id="ctl00_rs1_mainContentContainer_ctl10" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl10',this);" href="http://msdn.microsoft.com/zh-cn/library/system.data.common.dbconnection(VS.80).aspx"><font color="#0033cc">DbConnection</font></a> 类的 GetSchema 方法也可以获取数据库的架构信息。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://msdn.microsoft.com/zh-cn/library/kcax58fh(VS.80).aspx">http://msdn.microsoft.com/zh-cn/library/kcax58fh(VS.80).aspx</a></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们的项目需要自动生成导入数据的脚本，假如目标数据库中已经存在数据，对于自增列值冲突的问题要有特殊的解决，等我研究好了我会在下篇随笔中公布源代码和详细描述，假如哪位朋友已经有现成的解决方案，也希望不吝赐教。</p>
 <img src="http://www.cnblogs.com/xiaomin/aggbug/1372920.html?type=1" width="1" height="1" alt=""/><p>评论: 15　<a href="http://www.cnblogs.com/xiaomin/archive/2009/01/09/1372920.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/xiaomin/archive/2009/01/09/1372920.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/56818/" target="_blank">Google Buzz的优缺点分析</a><span style="color:gray">(2010-02-10 11:39)</span><br/>· <a href="http://news.cnblogs.com/n/56817/" target="_blank">京东商城刘强东：两个回合谈定1.5亿美元融资</a><span style="color:gray">(2010-02-10 11:30)</span><br/>· <a href="http://news.cnblogs.com/n/56816/" target="_blank">Google走到关键时刻：Buzz发布的背后</a><span style="color:gray">(2010-02-10 11:30)</span><br/>· <a href="http://news.cnblogs.com/n/56815/" target="_blank">李开复创新工场发展基金曝光 首单投移动互联</a><span style="color:gray">(2010-02-10 11:28)</span><br/>· <a href="http://news.cnblogs.com/n/56814/" target="_blank">Sun前CEO欲写自传 称经济危机是Sun被购主因</a><span style="color:gray">(2010-02-10 11:25)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/56812/" 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>