<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_深山老林</title><subtitle type="text">沉稳、细心、胆识、积极、大度、诚信、担当</subtitle><id>http://feed.cnblogs.com/blog/u/33168/rss</id><updated>2011-10-26T02:05:29Z</updated><author><name>深山老林</name><uri>http://www.cnblogs.com/wlb/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wlb/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/33168/rss"/><entry><id>http://www.cnblogs.com/wlb/archive/2011/07/01/2095242.html</id><title type="text">读书笔记：Oracle锁定策略的总结</title><summary type="text">Oracle只在修改时对数据库加行级锁。正常情况下不会升级到块级锁或表级锁（不过两段提交期间的一段很短的时间内除外，这是一个不常见的操作）。如果只是读数据，Oracle绝不会对数据锁定。不会因为简单的读操作在数据行上锁定。写入器（writer）不会阻塞读取器（reader）。换种说法：读（read）不会被写（write)阻塞。这一点几乎与其它所有数据库都不一样。在其它数据库中，读往往会被写阻塞。尽管听上去这个特性似乎很不错（一般情况下确实如此），但是如果你没有充分理解这个思想，而且想通过应用逻辑对应用施加完整性约束，就极有可能做得不对。写入器想写某行数据，但另一个写入器已经锁定了这行数据，此时</summary><published>2011-07-01T01:55:00Z</published><updated>2011-07-01T01:55:00Z</updated><author><name>深山老林</name><uri>http://www.cnblogs.com/wlb/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wlb/archive/2011/07/01/2095242.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wlb/archive/2011/07/01/2095242.html"/><content type="html">&lt;ul&gt;&lt;li&gt;Oracle只在修改时对数据库加行级锁。正常情况下不会升级到块级锁或表级锁（不过两段提交期间的一段很短的时间内除外，这是一个不常见的操作）。&lt;/li&gt;&lt;li&gt;如果只是读数据，Oracle绝不会对数据锁定。不会因为简单的读操作在数据行上锁定。&lt;/li&gt;&lt;li&gt;写入器（writer）不会阻塞读取器（reader）。换种说法：读（read）不会被写（write)阻塞。这一点几乎与其它所有数据库都不一样。在其它数据库中，读往往会被写阻塞。尽管听上去这个特性似乎很不错（一般情况下确实如此），但是如果你没有充分理解这个思想，而且想通过应用逻辑对应用施加完整性约束，就极有可能做得不对。&lt;/li&gt;&lt;li&gt;写入器想写某行数据，但另一个写入器已经锁定了这行数据，此时该写入器才会被阻塞。读取器绝对不会阻塞写入器。&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://www.cnblogs.com/wlb/aggbug/2095242.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wlb/archive/2011/07/01/2095242.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wlb/archive/2011/06/26/2090989.html</id><title type="text">BRD的撰写方法</title><summary type="text">BRD为“商业需求描述”的英语缩写，全称为：Business Requirement Document 　　BRD和MRD，PRD一起被认为是从市场到产品需要建立的文档规范。 　　是产品生命周期中最早的文档，再早就应该是脑中的构思了，其内容涉及市场分析，销售策略，盈利预测等，通常是供决策层们讨论的演示文档，一般比较短小精炼，没有产品细节。</summary><published>2011-06-26T15:32:00Z</published><updated>2011-06-26T15:32:00Z</updated><author><name>深山老林</name><uri>http://www.cnblogs.com/wlb/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wlb/archive/2011/06/26/2090989.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wlb/archive/2011/06/26/2090989.html"/><content type="html">&#xD;
&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: 18pt;"&gt;什么是BRD？&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size: 18pt;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;BRD为&amp;#8220;商业需求描述&amp;#8221;的英语缩写，全称为：Business Requirement Document 　　BRD和MRD，PRD一起被认为是从市场到产品需要建立的文档规范。 　　&lt;/p&gt;&lt;p&gt;是产品生命周期中最早的文档，再早就应该是脑中的构思了，其内容涉及市场分析，销售策略，盈利预测等，通常是供决策层们讨论的演示文档，一般比较短小精炼，没有产品细节。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: 18pt;"&gt;BRD都包括哪些内容？&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size: 18pt;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;BRD包括：项目背景、商业价值、功能需求描述、非功能需求描述、资源评估、风险和对策。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: 18pt;"&gt;BRD中的内容详解&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size: 18pt;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;项目背景：我们在哪里？为什么要做这个项目？解决什么问题？可以列出一些数据说明项目的必要性。&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 14pt;"&gt;商业价值：&lt;/strong&gt;我们去哪里？最关键的重点！做了这个项目以后有什么价值？一般我们还会预测一下相关数字的变化，提出这个项目的商业目标。&lt;/p&gt;&lt;p&gt;功能需求描述：我们怎么去？通过做哪些事情来达到目标，把打包好的需求描述一下，可以用功能列表的形式表达，但最好能画出业务逻辑关系。当然我们也经常会高点技巧性的东西，比如故意加入一些让老板砍的需求，希望老板砍完以后心有愧疚不好意思再砍我们真正想做的东西（俗称李代桃僵）。&lt;/p&gt;&lt;p&gt;非功能需求描述：提一下重要的非功能需求。&lt;/p&gt;&lt;p&gt;&lt;strong style="font-size: 14pt;"&gt;资源评估：&lt;/strong&gt;达成项目的目标需要多大的花费。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong style="font-size: 14pt;"&gt;风险和对策：&lt;/strong&gt;项目中可能存在的风险及应对策略。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: 18pt;"&gt;好的BRD应有的特点&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 商业价值、资源评估、风险和对策三大块是一个BRD最最重要的三部分。好的BRD应当有&lt;strong&gt;&lt;em&gt;&lt;u&gt;煽动性、导向性&lt;/u&gt;&lt;/em&gt;&lt;/strong&gt;。在写BRD时应当充分考虑阅读人（通常是老板）的出身背景、知识结构及思考问题的一般方法，考虑到他在看了BRD后会有什么反应，他是怎样考虑的，而不是仅仅是将要表达的结果做一个简单的信息传递，应当做到未雨绸缪。通常要做到这种程度，需要很深刻的了解老板，了解公司的高端愿望，在企业里做到信息对称，高端愿望解码正确。当然，如果写BRD的人在公司对老板的影响力非常大，也会对BRD增色不少。&lt;/span&gt;&lt;/p&gt;&#xD;
  &#xD;
 &#xD;
 &#xD;
&lt;img src="http://www.cnblogs.com/wlb/aggbug/2090989.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wlb/archive/2011/06/26/2090989.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wlb/archive/2011/04/22/2024821.html</id><title type="text">jQuery formValidator不支持新版手机的解决办法</title><summary type="text">问题：今天在看项目的时候，发现jquery formValidator不支持新版手机的验证，我判断应该是正则表达式里写的都是验证旧版手机，像1881003****这样的手机无法通过验证。解决办法：打开formValidatorRegex.js，将mobile:&amp;quot;^(13|15)[0-9]{9}$&amp;quot;, //手机号码替换为：mobile:&amp;quot;^(13|15|18|14)[0-9]{9}$&amp;quot;, //手机号码保存，然后按CTRL+F5刷新后即可。</summary><published>2011-04-22T05:30:00Z</published><updated>2011-04-22T05:30:00Z</updated><author><name>深山老林</name><uri>http://www.cnblogs.com/wlb/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wlb/archive/2011/04/22/2024821.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wlb/archive/2011/04/22/2024821.html"/><content type="html">&lt;p&gt;问题：&lt;br /&gt;今天在看项目的时候，发现jquery formValidator不支持新版手机的验证，我判断应该是正则表达式里写的都是验证旧版手机，像1881003****这样的手机无法通过验证。&lt;/p&gt;&lt;p&gt;解决办法：&lt;/p&gt;&lt;p&gt;打开formValidatorRegex.js，将&lt;font face="Courier New"&gt;mobile:"^(13|15)[0-9]{9}$",&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//手机号码&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;替换为：mobile:"^(13|15|18|14)[0-9]{9}$",&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //手机号码&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;保存，然后按CTRL+F5刷新后即可。&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wlb/aggbug/2024821.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wlb/archive/2011/04/22/2024821.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wlb/archive/2010/09/25/1834519.html</id><title type="text">TFS Workspace错误解决办法</title><summary type="text">今天在给组员部署TFS客户端的时候遇到了错误，错误格式为：The Path &amp;lt;local path&amp;gt; is already mapped in workspace &amp;lt;machine name [old tfs server]&amp;gt;。如下图所示：解决的办法如下：打开Visual Studio Command Prompt输入命令：tf workspaces /remove:*重新...</summary><published>2010-09-25T06:04:00Z</published><updated>2010-09-25T06:04:00Z</updated><author><name>深山老林</name><uri>http://www.cnblogs.com/wlb/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wlb/archive/2010/09/25/1834519.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wlb/archive/2010/09/25/1834519.html"/><content type="html">&lt;p&gt;今天在给组员部署TFS客户端的时候遇到了错误，错误格式为：The Path &amp;lt;local path&amp;gt; is already mapped in workspace &amp;lt;machine name [old tfs server]&amp;gt;。如下图所示：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wlb/2010-9-25-1.png" width="605" height="197" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;解决的办法如下：&lt;/p&gt;&#xD;
&lt;ol&gt;&lt;li&gt;打开Visual Studio Command Prompt输入命令：tf workspaces /remove:*&lt;/li&gt;&lt;li&gt;重新启动VS，重新进行工作区映射，就不会出现这样的问题了。&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wlb/aggbug/1834519.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wlb/archive/2010/09/25/1834519.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wlb/archive/2010/09/05/1818523.html</id><title type="text">Mindjet.MindManager.v9.0“参数错误”解决办法</title><summary type="text">MindManager最新版9.0出来了，但是在应用个别模板的时候会提示&amp;#8220;参数错误&amp;#8221;，然后自动关闭。解决办法： 如果是win7系统，可以进入C:\Users\（用户名）\AppData\Local\Mindjet\MindManager\9\Library\ENU\Templates，可以看到有4个文件夹：Communication、Personal Productivit...</summary><published>2010-09-05T09:53:00Z</published><updated>2010-09-05T09:53:00Z</updated><author><name>深山老林</name><uri>http://www.cnblogs.com/wlb/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wlb/archive/2010/09/05/1818523.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wlb/archive/2010/09/05/1818523.html"/><content type="html">&lt;p&gt;MindManager最新版9.0出来了，但是在应用个别模板的时候会提示&amp;#8220;参数错误&amp;#8221;，然后自动关闭。&lt;/p&gt;&#xD;
&lt;p&gt;解决办法：&lt;/p&gt;&#xD;
&lt;p&gt;如果是win7系统，可以进入C:\Users\（用户名）\AppData\Local\Mindjet\MindManager\9\Library\ENU\Templates，可以看到有4个文件夹：Communication、Personal Productivity、 Strategy、Team Productivity，将这些模板文件（*.mmat）用MindManager逐一打开，在最上面可以看到有个Tip，稍微靠右面有个注释的小框，我们将鼠标放在注释上，右键、删除，然后将模板保存。按照这样的操作将所有的模板中的注释全部删除，并保存，再打开就不会提示参数错误了。&lt;br /&gt;&amp;nbsp;&amp;nbsp; 　　如果是2003系统，路径是C:\Documents and Settings\Administrator.B141469207BC41A\Local Settings\Application Data\Mindjet\MindManager\9\Library\ENU\Templates。注意用户名可能不一定是Administrator，到时候根据实际情况进行替换。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如果是XP系统，路径是C:\Documents and Settings\Administrator\Local Settings\Application Data\Mindjet\MindManager\9\Library\ENU&lt;/p&gt;&#xD;
&lt;p&gt;如果实在是找不到，可以在c盘下进行搜索。&lt;/p&gt;&#xD;
&lt;p&gt;看下没有参数错误的运行结果吧，真的好惬意。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wlb/2010-9-5.jpg" /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wlb/aggbug/1818523.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wlb/archive/2010/09/05/1818523.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wlb/archive/2010/07/18/1780293.html</id><title type="text">c#3.0提供的扩展方法</title><summary type="text">在c#3.0之前，想要为内置的类型添加一个方法显然是不可能的。但是，c#3.0提供的扩展方法可以解决这个问题。具体代码如下：</summary><published>2010-07-18T12:32:00Z</published><updated>2010-07-18T12:32:00Z</updated><author><name>深山老林</name><uri>http://www.cnblogs.com/wlb/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wlb/archive/2010/07/18/1780293.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wlb/archive/2010/07/18/1780293.html"/><content type="html">&lt;p&gt;在c#3.0之前，想要为内置的类型添加一个方法显然是不可能的。但是，c#3.0提供的扩展方法可以解决这个问题。具体代码如下：&lt;/p&gt;  &lt;pre&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; ExtendedClass&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; ToKevin(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; str)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; "&lt;span style="color: #8b0000;"&gt;hello,kevin&lt;/span&gt;";&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; Program&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Main(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;        {&lt;br /&gt;            DateTime dt = DateTime.Now;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; str1 = dt.ToShortDateString().ToKevin();&lt;br /&gt;            Console.WriteLine(str1);&lt;br /&gt;        }&lt;br /&gt;    }&lt;/pre&gt;&lt;img src="http://www.cnblogs.com/wlb/aggbug/1780293.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wlb/archive/2010/07/18/1780293.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wlb/archive/2010/06/26/1765620.html</id><title type="text">Entityframework提供的处理并发冲突方式</title><summary type="text">Entityframework提供了两种处理并发冲突的方式：放任不管、开放式并发处理。1.放任不管 其实就是没有对并发冲突做任何处理，EF默认就是使用这种处理方式。2.开放式并发处理  乐观并发。一旦冲突发生，系统会捕获冲突，根据策略自动处理。实现开放式并发处理也很简单，就是将相应字段的Concurrency Mode属性设置为Fixed，当然默认是None。如下图所示：</summary><published>2010-06-26T00:21:00Z</published><updated>2010-06-26T00:21:00Z</updated><author><name>深山老林</name><uri>http://www.cnblogs.com/wlb/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wlb/archive/2010/06/26/1765620.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wlb/archive/2010/06/26/1765620.html"/><content type="html">&lt;p&gt;Entityframework提供了两种处理并发冲突的方式：放任不管、开放式并发处理。&lt;/p&gt;&lt;p&gt;1.放任不管&amp;nbsp; 其实就是没有对并发冲突做任何处理，EF默认就是使用这种处理方式。&lt;/p&gt;&lt;p&gt;2.开放式并发处理 &amp;nbsp;&amp;nbsp; 乐观并发。一旦冲突发生，系统会捕获冲突，根据策略自动处理。&lt;/p&gt;&lt;p&gt;实现开放式并发处理也很简单，就是将相应字段的Concurrency Mode属性设置为Fixed，当然默认是None。如下图所示：&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/wlb/2010-6-26-1.jpg" width="376" height="427" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wlb/aggbug/1765620.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wlb/archive/2010/06/26/1765620.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wlb/archive/2010/06/25/1764845.html</id><title type="text">ASP.NET MVC2中返回Json异常的解决办法</title><summary type="text">在ASP.NET MVC1.0中，我们在前段通常会这样做。[代码]　　　　　　　　　　});或者[代码]后端我们会做这样的代码：[代码]同样的代码如果放到ASP.NET MVC2中，就会报如下异常：[InvalidOperationException]: This request has been blocked because sensitive information could be dis...</summary><published>2010-06-24T23:57:00Z</published><updated>2010-06-24T23:57:00Z</updated><author><name>深山老林</name><uri>http://www.cnblogs.com/wlb/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wlb/archive/2010/06/25/1764845.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wlb/archive/2010/06/25/1764845.html"/><content type="html">&lt;p&gt;在ASP.NET MVC1.0中，我们在前段通常会这样做。&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$.ajax({&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;type:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;GET&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;url:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;/role/SaveRoleResource&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data:&amp;nbsp;{&amp;nbsp;roleId:&amp;nbsp;roleId,&amp;nbsp;array:&amp;nbsp;item&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;datatype:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;json&lt;/span&gt;&lt;span style="color: #000000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;success:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(result)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(result);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;error:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(result1)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(result1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="color: #000000"&gt;　　　　　　　　　　&amp;nbsp;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;或者&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p style="background-color: highlight"&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$.getJSON(&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;/role/SaveRoleResource&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;{&amp;nbsp;roleId:&amp;nbsp;roleId,&amp;nbsp;array:&amp;nbsp;item&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(data)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(data);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;后端我们会做这样的代码：&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ActionResult&amp;nbsp;SaveRoleResource(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;roleId,Array&amp;nbsp;array)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;count&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;RoleResourceDal.Update(roleId,&amp;nbsp;array);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Json(count);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;同样的代码如果放到ASP.NET MVC2中，就会报如下异常：&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[InvalidOperationException]: This request has been blocked because sensitive information could be disclosed to third party web sites when this is used in a GET request. To allow GET requests, set JsonRequestBehavior to AllowGet.&lt;/p&gt;&#xD;
&lt;p&gt;解决方法，将后端代码改成如下 &lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ActionResult&amp;nbsp;SaveRoleResource(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;roleId,Array&amp;nbsp;array)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;count&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;RoleResourceDal.Update(roleId,&amp;nbsp;array);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Json(count,JsonRequestBehavior.AllowGet);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;看到这里，可能您就会明白，ASP.NET MVC2中&lt;span style="color: #000000"&gt;JsonRequestBehavior&lt;/span&gt;默认是JsonRequestBehavior.DenyGet。&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wlb/aggbug/1764845.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wlb/archive/2010/06/25/1764845.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wlb/archive/2010/06/24/1764466.html</id><title type="text">Visual studio 配置文件下载</title><summary type="text">http://studiostyles.info/是一个提供Visual studio 配置文件的网站，提供很多配置文件，可以对编辑器的字体样式进行个性化定制。</summary><published>2010-06-24T07:32:00Z</published><updated>2010-06-24T07:32:00Z</updated><author><name>深山老林</name><uri>http://www.cnblogs.com/wlb/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wlb/archive/2010/06/24/1764466.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wlb/archive/2010/06/24/1764466.html"/><content type="html">&lt;p&gt;&lt;a href="http://studiostyles.info/" target="_blank"&gt;http://studiostyles.info/&lt;/a&gt;是一个提供Visual studio 配置文件的网站，提供很多配置文件，可以对编辑器的字体样式进行个性化定制。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wlb/aggbug/1764466.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wlb/archive/2010/06/24/1764466.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wlb/archive/2010/05/10/1731567.html</id><title type="text">也谈应对需求变化</title><summary type="text">起因偶然看到博客园一位朋友写的一篇应对需求变化的文章，顿时来了兴趣，需求变化是软件开发过程中很常见的事情，也是最让程序员朋友们头疼的一个问题，如果这个问题能够很好的解决，对软件开发一定是一件非常好的事情，虽然谈不上是创新，但是至少可以归结为一项技术改革，因此，如果能够有一种或多种好的方案来应对需求变化，那么，它的重要性不言而喻。因为任何办法或方案都没有银弹，因此，方案的实用型、行业适用性就成为了我...</summary><published>2010-05-10T02:43:00Z</published><updated>2010-05-10T02:43:00Z</updated><author><name>深山老林</name><uri>http://www.cnblogs.com/wlb/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wlb/archive/2010/05/10/1731567.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wlb/archive/2010/05/10/1731567.html"/><content type="html">&lt;p&gt;&lt;strong&gt;起因&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;偶然看到博客园一位朋友写的一篇应对需求变化的文章，顿时来了兴趣，需求变化是软件开发过程中很常见的事情，也是最让程序员朋友们头疼的一个问题，如果这个问题能够很好的解决，对软件开发一定是一件非常好的事情，虽然谈不上是创新，但是至少可以归结为一项技术改革，因此，如果能够有一种或多种好的方案来应对需求变化，那么，它的重要性不言而喻。因为任何办法或方案都没有银弹，因此，方案的实用型、行业适用性就成为了我们要考虑的问题。&lt;/p&gt;&#xD;
&lt;p&gt;当我看到了这位园友的文章，于是兴致勃勃的发了如下回复：&amp;#8220;只给出了思想，没有给出解决方案。&amp;#8221;&lt;/p&gt;&#xD;
&lt;p&gt;我在今天早晨的时候收到如下回复：&amp;#8220;思想比方案重要&amp;#8221;。&lt;/p&gt;&#xD;
&lt;p&gt;于是我又做出了如下回复：&amp;#8220;文章的实操性差一些&amp;#8221;。&lt;/p&gt;&#xD;
&lt;p&gt;很明显，这样下去很容易陷入一个固执、偏见、口水仗&amp;#8230;&amp;#8230;的怪圈，自己的所想很难用一两句话概括的清楚，也不是十几行文字就可以概括的清楚的。&lt;/p&gt;&#xD;
&lt;p&gt;我写本文的目的也只是想起到抛砖引玉的作用，希望跟大家多讨论讨论大家是怎么想的，以及大家在面对这样的问题的时候是怎么去应对这种需求变化的。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;议程&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ol&gt;&lt;li&gt;园友的那篇文章及观点跟我想的有哪些不同&lt;/li&gt;&lt;li&gt;引起需求变化的原因有哪些&lt;/li&gt;&lt;li&gt;针对这些需求变化的原因我们应该如何应对&lt;/li&gt;&lt;li&gt;应对的案例 &lt;/li&gt;&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;strong&gt;一、园友的那篇文章及观点跟我想的有哪些不同&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;1.考虑问题的广度不够，有一定的狭隘性&lt;/p&gt;&#xD;
&lt;p&gt;需求包括功能性需求跟非功能性需求，那位园友只给出了功能性需求中的如何应对CRUD的一些不算很成熟的想法。很多时候，一些非功能性需求才是最具有颠覆性的，更加难以应对的。举个例子，架构师常常需要考虑性能、并发性、安全性、可扩展性、易维护性等等，在做项目之前，这些非功能性的需求是最应该先考虑进来的，一个项目辛苦做完，测试没有问题正式上线了，却发现并发性、性能根本就无法满足企业的要求，导致整个项目无法应用，架构一旦定型，最终要改架构无异于重新开发。因此，考虑需求变化的应对不能仅仅考虑功能性的变化对程序的影响，也应当考虑非功能性需求的变化带来的影响。&lt;/p&gt;&lt;/blockquote&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;2.成熟度差一些&lt;/p&gt;&#xD;
&lt;p&gt;该文仅仅是作者的一些不成熟的想法，离真正的在企业中应用还差很远，极有可能造成昙花一现，就连微软本身也常说想法不等于办法不等于方案。&lt;/p&gt;&lt;/blockquote&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;3.没有给出具体的解决方案，仅仅是抛出了问题&lt;/p&gt;&#xD;
&lt;p&gt;最终企业最需要得到的是怎么做，而不是仅仅抛出问题，却不给出解决办法，哪怕仅仅是指导性的办法也可以。&lt;/p&gt;&lt;/blockquote&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;4.观点对园友有一定的误导性&lt;/p&gt;&#xD;
&lt;p&gt;思想真的比方案重要吗？&lt;/p&gt;&#xD;
&lt;p&gt;坦白说，寻求一项新的解决办法来应对需求变化，这本身就是一项技术改革，虽然谈不上真正创新，至少大家都从观念上认为这是创新。我也姑且把这个当做是创新吧。有这种想法的原因主要是因为不了解创新过程及创新过程的管理。&lt;/p&gt;&#xD;
&lt;p&gt;创新过程要展开谈的话，主要分为以下几个方面：&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;什么是创新&lt;/li&gt;&lt;li&gt;为什么要创新&lt;/li&gt;&lt;li&gt;管理中的创造力&lt;/li&gt;&lt;li&gt;管理创新过程 &lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;由于篇幅影响，本文就不展开来谈这个很大的话题了。&lt;/p&gt;&#xD;
&lt;p&gt;我主要想说的是如下的一些总结：&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;创新是一个生产过程，信息是它的原料，必须提高信息搜集的效率，以及利用信息的创造力。&lt;/li&gt;&lt;li&gt;信息的搜集固然重要，但是信息的创造加工以及加工后的结果（解决方案）更加的有价值。 &lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;strong&gt;二、引起需求变化的原因有哪些&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;IT168的李倩编辑把引起需求变化的原因分为如下几类，有兴趣的读者可以参考原文《&lt;a href="http://tech.it168.com/a2009/0430/274/000000274427.shtml" target="_blank"&gt;软件项目的需求开发与管理&lt;/a&gt;》&lt;/p&gt;&lt;/blockquote&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;1.用户不能正确表达自身的需求&lt;/p&gt;&#xD;
&lt;p&gt;2.业务人员配合力度不够&lt;/p&gt;&#xD;
&lt;p&gt;3.用户需求的不断变更&lt;/p&gt;&#xD;
&lt;p&gt;4.需求的完整程度&lt;/p&gt;&#xD;
&lt;p&gt;5.需求的细化程度&lt;/p&gt;&#xD;
&lt;p&gt;6.需求描述的多义性&lt;/p&gt;&#xD;
&lt;p&gt;7.忽略了用户的特点&lt;/p&gt;&#xD;
&lt;p&gt;8.需求开发的时间保障不充分&lt;/p&gt;&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;strong&gt;三、针对这些需求变化的原因我们应该如何应对&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;ol&gt;&lt;li&gt;心态上要保持一个良好的心态，要把这个看成是一个常态。&lt;/li&gt;&lt;li&gt;针对不同的问题来解决问题。战略决策上、团队打造上、架构设计上、程序设计上&amp;#8230;&amp;#8230;&lt;/li&gt;&lt;li&gt;在程序设计上优先考虑设计不同的解决方案及软件架构来应对一些变化。&lt;/li&gt;&lt;li&gt;更改开发流程，把风险降低到最低。&lt;/li&gt;&lt;li&gt;在设计的时候做好扩展，避免再改动的时候造成改动过大。很好的应用面向对象与设计模式的思想来解决问题。 &lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;strong&gt;四、应对的案例&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;面对需求变化的挑战，我们之前公司在架构设计上提前做过考虑，程序设计上也做过考虑，不过我在这里主要想跟大家分享的是开发流程。&lt;/p&gt;&#xD;
&lt;p&gt;开发流程上不采用传统的瀑布模式开发，而是采用原型模式。&lt;/p&gt;&#xD;
&lt;p&gt;在开发之前，由开发经理或产品经理用模型设计软件做好模型，然后给客户做演示，在给客户演示的时候，不断的跟客户做沟通、交流。等原型相对稳定的时候，再进入开发阶段。这样做的好处主要有：&lt;/p&gt;&#xD;
&lt;ol&gt;&lt;li&gt;客户很多时候不知道自己想要什么，客户只知道自己不想要什么。通过这样的不断演示、沟通，逐步的离客户想要的东西无限接近。&lt;/li&gt;&lt;li&gt;大大降低了开发成本，毕竟改文档或模型比该代码要容易的多，快的多。绝对不能在需求不明确的时候提前进入编码阶段。 &lt;/li&gt;&lt;/ol&gt;&#xD;
&lt;p&gt;总结：无论是从哪个方面去应对需求的变化，不同公司总归是有自己的一套东西的，很多时候知道不代表可以做到或能够很好的解决，我们更希望通过知道的信息，然后探讨出好的应对策略来，希望本文能够起到抛砖引玉的作用，也希望大家把自己的想法踊跃的分享出来。&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://www.cnblogs.com/wlb/aggbug/1731567.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wlb/archive/2010/05/10/1731567.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
