﻿<?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>IT博客-For things to change, first I must change! -随笔分类-导入文章</title><link>http://www.cnitblog.com/jc213/category/8023.html</link><description>路漫漫其修远兮，吾将上下而求索！</description><language>zh-cn</language><lastBuildDate>Thu, 06 Oct 2011 15:15:03 GMT</lastBuildDate><pubDate>Thu, 06 Oct 2011 15:15:03 GMT</pubDate><ttl>60</ttl><item><title>[导入]伯伯菜园系列 之 “接口”白菜</title><link>http://www.cnitblog.com/jc213/archive/2009/02/05/54267.html</link><dc:creator>winter_IT</dc:creator><author>winter_IT</author><pubDate>Thu, 05 Feb 2009 01:40:00 GMT</pubDate><guid>http://www.cnitblog.com/jc213/archive/2009/02/05/54267.html</guid><wfw:comment>http://www.cnitblog.com/jc213/comments/54267.html</wfw:comment><comments>http://www.cnitblog.com/jc213/archive/2009/02/05/54267.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jc213/comments/commentRss/54267.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jc213/services/trackbacks/54267.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p><strong style="FONT-SIZE: 14pt">前言</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;相信大家对接口是不陌生的，但是你真的理解什么是接口吗？真的能用好吗？我们口口声声说按接口编程，到底如何接口编程呢？接口编程的意义在哪呢？...对于接口的迷茫，经常在三层结构里面看到的，千篇一律的把每一个Dao都写一个接口，每个<font face=Verdana>Service再写一个接口，因为他们看的例子就是这样的，网上很多例子都是这样的，这就叫按接口编程了？！心里没底，到下次自己写项目自己设计的时候再加上赶进度怕是没这么勤奋的复制粘贴了，原因还是没有明白接口到底有什么用！甚着感觉接口这玩意就像脱裤子放屁——多此一举！真的是这样么？那么，接下来我和大家一起来探讨关于接口的种种...</font></p>
<p>&nbsp;</p>
<p><strong style="FONT-SIZE: 14pt">正文</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>一、什么是接口、接口有什么用</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们先看看别人是怎么说接口的，我收集总结了一下，仅列出以下五种说法：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;接口的意义在于顶替多重继承。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;接口的作用，一言以蔽之，就是标志类的类别（type of class）。把不同类型的类归于不同的接口，可以更好的管理他们。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;接口简单理解就是一种约定，使得实现接口的类或结构在形式上保持一致，使用接口可以使程序更加清晰和条理化。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;接口就是定义了一个合同，实现这个接口的类都保证自己符合这个合同要求。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;接口从更深层次的理解，应是定义(规范，约束)与实现(名实分离的原则)的分离。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这里我就不评价这几种说法了，下面说说我理解的接口是什么样子的。这里拿电脑里的主板来讲，主板上有<span lang=EN-US>USB</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">总线接口</span>、基本外设接口（用来连接键盘、鼠标、打印机等传统外设）、驱动器接口（用来连接硬盘驱动器、光盘驱动器和软盘驱动器等）...很眼熟吧！！这些东西都是带接口两字的，我们称之为硬件接口或接口类型，在翻阅关于这些硬件借口资料的时候你经常会发现这些接口都是由许多有名的公司如Microsoft、IBM、Intel、Apple等公司共同约定、开发的一种标准！！例如：USB是Compaq、DEC、IBM、Intel、Microsoft、NEC(日本)、Nothern Telecom(加拿大)等7家公司与1994年11月联合开发的计算机串行接口总线标准；IEEE 1394是1986年由Apple公司和TI(德克萨克仪器)公司开发的高速串行接口标准，命名为&#8220;火线&#8221;(Fire Wire)等。那么为什么要制定这些标准呢？包括现在都在争的3G标准，更有专门的标准组织和标准委员会。全世界硬件厂商多不胜数，随便列几个：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPU:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Intel、AMD</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;内存:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;金士顿、黑金刚、<font face=Verdana>宇瞻</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;硬盘:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;日立、希捷</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;显示器:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;飞利浦、三星、LG、明基、优派等，这么多厂商，这么多品牌，我们没有因为把飞利浦的显示器换成三星的电脑就不能用了，任意换硬盘、换内存，加显卡，接不同牌子的鼠标，用不同牌子的键盘，为什么没有问题？关键就在这里了——他们都遵循了标准，这些硬件都是按标准生产出来的！！所以我们用盗版的硬件(如 鼠标)也可以很爽，因为盗版他也遵循了标准！！可以说没有这些硬件标准——个人电脑也不能像今天如此普及！！现在我们再回过头来看接口，请告诉我你有什么感觉？我的感觉就是接口就是标准，或者称之为标准接口！！在硬件里面是，软件里面也是同样如此。好处是显而易见的，下面我们将上面的硬件接口&#8220;转换&#8221;成下面的软件接口的代码：</p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">&nbsp;&nbsp;&nbsp; #region</span><span style="COLOR: #000000">&nbsp;CPU接口</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;CPU接口&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;针脚式&nbsp;:&nbsp;CPU接口&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;卡式&nbsp;:&nbsp;CPU接口&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;触点式&nbsp;:&nbsp;CPU接口&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;针脚式&nbsp;:&nbsp;CPU接口&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;Socket478&nbsp;:&nbsp;针脚式&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;Socket754&nbsp;:&nbsp;针脚式&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;Socket940&nbsp;:&nbsp;针脚式&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#endregion</span><span style="COLOR: #000000"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#region</span><span style="COLOR: #000000">&nbsp;内存接口</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;内存接口&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;I144Pin&nbsp;:&nbsp;内存接口&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;I168Pin&nbsp;:&nbsp;内存接口&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;I240Pin&nbsp;:&nbsp;内存接口&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#endregion</span><span style="COLOR: #000000"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#region</span><span style="COLOR: #000000">&nbsp;硬盘接口</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;硬盘接口&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;IDE&nbsp;:&nbsp;硬盘接口&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;SCSI&nbsp;:&nbsp;硬盘接口&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;SATA&nbsp;:&nbsp;硬盘接口&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#endregion</span><span style="COLOR: #000000"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;精英A780GM<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;summary&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;构造一块主板<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;/summary&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;param&nbsp;name="cpu"&gt;</span><span style="COLOR: #008000">Socket&nbsp;AM2/AM2+</span><span style="COLOR: #808080">&lt;/param&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;param&nbsp;name="hd"&gt;</span><span style="COLOR: #008000">SATA接口</span><span style="COLOR: #808080">&lt;/param&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;param&nbsp;name="ddr"&gt;</span><span style="COLOR: #008000">DDR2</span><span style="COLOR: #808080">&lt;/param&gt;</span><span style="COLOR: #808080"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;精英A780GM(Socket940&nbsp;cpu,&nbsp;SATA&nbsp;hd,&nbsp;I240Pin&nbsp;ddr)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这款<strong>精英A78GM</strong>主板是我随便从中关村在线里面找的一块板子，而上面的接口就是许多厂商坐在一起约定出来的标准接口，当然这里只是例举了主板的部分组件，但是可以看到，主板厂商都是按标准来进行制造的，他们生产不担心你插什么样的牌子CPU、硬盘、内存到主板上，只要你符合这个标准接口就行！！需要说明的是，上面五种对于接口的说法都是有一定道理的，而这里，我认为接口可以是标准，接口的意义更大体现在制定标准上面！！</p>
<p>&nbsp;</p>
<p><strong>二、如何使用标准</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;标准接口</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在上面的例子中，制定标准体现出良好的兼容性，有效降低了组合成本，更促进厂商按照标准专注本身等，下面我们再从软件编程中找更加贴切的例子来说明这一点。在跨数据库或数据库切换的时候我们可以用标准的接口来约束和规范数据库操作，以达到无缝切换（实际中可能有部分需要特殊处理）和跨数据库应用。下面给出一段无缝切换数据库的例子：</p>
<div class=cnblogs_code>
<p><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">&nbsp;&nbsp;&nbsp; public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;IDAL<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;summary&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;根据主键删除数据<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;/summary&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;param&nbsp;name="pk"&gt;</span><span style="COLOR: #008000">主键</span><span style="COLOR: #808080">&lt;/param&gt;</span><span style="COLOR: #808080"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Delete(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;pk);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;SqlDAL&nbsp;:&nbsp;IDAL<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#region</span><span style="COLOR: #000000">&nbsp;IDAL&nbsp;成员</span><span style="COLOR: #000000"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Delete(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;pk)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SqlHelper.ExecuteNonQuery(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">.Concat(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">DELETE&nbsp;TABLE&nbsp;[TEST]&nbsp;WHERE&nbsp;ID&nbsp;=&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">,&nbsp;pk));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#endregion</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;OracleDAL&nbsp;:&nbsp;IDAL<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#region</span><span style="COLOR: #000000">&nbsp;IDAL&nbsp;成员</span><span style="COLOR: #000000"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Delete(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;pk)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OracleHelper.ExecuteNonQuery(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">.Concat(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">DELETE&nbsp;TABLE&nbsp;[TEST]&nbsp;WHERE&nbsp;ID&nbsp;=&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">,&nbsp;pk));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#endregion</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;MySqlDAL&nbsp;:&nbsp;IDAL<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#region</span><span style="COLOR: #000000">&nbsp;IDAL&nbsp;成员</span><span style="COLOR: #000000"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Delete(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;pk)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySqlHelper.ExecuteNonQuery(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">.Concat(</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">DELETE&nbsp;TABLE&nbsp;[TEST]&nbsp;WHERE&nbsp;ID&nbsp;=&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">,&nbsp;pk));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#endregion</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Business<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#region</span><span style="COLOR: #000000">&nbsp;变量</span><span style="COLOR: #000000"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;Type&nbsp;dalType;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;IDAL&nbsp;dal;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#endregion</span><span style="COLOR: #000000"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#region</span><span style="COLOR: #000000">&nbsp;构造函数</span><span style="COLOR: #000000"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Business()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dal&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Activator.CreateInstance(dalType)&nbsp;</span><span style="COLOR: #0000ff">as</span><span style="COLOR: #000000">&nbsp;IDAL;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;Business()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span></p>
<p><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//web.config:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font face=Verdana>&lt;add key="DatabaseType" value="sqlserver" /&gt;</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;DatabaseType&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ConfigurationManager.AppSettings[</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">DatabaseType</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">.IsNullOrEmpty(DatabaseType))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000">&nbsp;(DatabaseType.ToLower())<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">sqlserver</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dalType&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">(SqlDAL);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">mysql</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dalType&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">(MySqlDAL);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">oracle</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dalType&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">(OracleDAL);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">default</span><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dalType&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">(SqlDAL);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dalType&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">(SqlDAL);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">#endregion</span><span style="COLOR: #000000"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;summary&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;删除一笔数据<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;/summary&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;param&nbsp;name="id"&gt;&lt;/param&gt;</span><span style="COLOR: #808080"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Remove(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;id)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dal.Delete(id);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}</span></p>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注意：这段代码不考虑SQL语句安全、效率等问题，关键是体现接口的作用。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;说明：好处是显而易见的，可维护性高，这段业务代码在切换数据库时是不需要更改任何代码的，只需轻松的把web.config的<font face=Verdana>DatabaseType指定为其他的数据库类型就行了。这得益于SqlDAL、MySqlDAL、OracleDAL都是按标准的方式来实现的数据库操作的。</font><font face=Verdana>便于分工，我们可以把这三个类分别交给三个人精通各自数据库的人来编写，这样同时也将业务层和数据层解耦了，只要标准一出，数据层和业务层的员工就可以同时开始编写代码，业务层员工只管按标准调用，而数据层员工只管按标准来编写。</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;参数传递</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对于接口的用途我最早是在java里面用于参数传递的，Java和C#都是强类型语言，也就是你传一个参数过来的时候需要明确指定一个类型。但是有一个类型非常特别，那就是如果我将参数的类型指定为object的时候，你不管传什么参数都可以，因为所有类型都继承自object！而将接口用于参数传递实现方式同object是一样的，只要你继承了你就可以被传输，所以大家经常能看到空的接口。接下来也会贴Java下使用Hibernate的一个例子&nbsp;，也是我第一次认识到接口作用的例子：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DaoBase.java</p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;DaoBase&nbsp;</span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000">&nbsp;HibernateDaoSupport&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">boolean</span><span style="COLOR: #000000">&nbsp;add(IModel&nbsp;model)&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;MyException&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.getHibernateTemplate().save(model);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(Exception&nbsp;e)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;MyException(e);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">boolean</span><span style="COLOR: #000000">&nbsp;modified(IModel&nbsp;model)</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;MyException&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.getHibernateTemplate().update(model);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(Exception&nbsp;e)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;MyException(e);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IModel.java</p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;IModel&nbsp;</span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000">&nbsp;java.io.Serializable&nbsp;{<br><br>}</span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font face=Verdana>Account</font>.java</p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Account&nbsp;</span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000">&nbsp;IModel&nbsp;{<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Fields&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;Integer&nbsp;id;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;String&nbsp;password;<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Constructors</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000">&nbsp;default&nbsp;constructor&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Account()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Property&nbsp;accessors</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Integer&nbsp;getId()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.id;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;setId(Integer&nbsp;id)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.id&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;id;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;String&nbsp;getPassword()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.password;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;setPassword(String&nbsp;password)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.password&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;password;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}</span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;说明：<font face=Verdana>DaoBase</font>中<font face=Verdana>HibernateDaoSupport</font>在这里就不介绍了，主要是<font face=Verdana>this.getHibernateTemplate()</font>的两个方法<font face=Verdana>save</font>和<font face=Verdana>update，这两个方法的所需参数均是Object，以前的做法就是每一个表写一个Dao，每个Dao里面写一个add方法，然后参数为特定Model或者说是VO，极其繁琐，经过这样改装后就可以有一个通用的Dao了，也减少了许多代码量，而且比起直接用Object参数更加安全，因为它帮助<font face=Verdana>save</font>和<font face=Verdana>update</font>明确指定了只有继承了这个接口的VO才能传递进来！</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;身份</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在我的一篇文章中曾今探讨过这种用法：<a class=postTitle2 id=homepage1_HomePageDays_DaysList_ctl06_DayItem_DayList_ctl00_TitleUrl href="http://www.cnblogs.com/over140/archive/2008/12/27/1363491.html">IHttpHandler中使用Session实现原理[ASP.NET | IHttpHandler |IRequiresSessionState]</a>，为什么叫这种用法叫身份呢，主要是便于解说，&nbsp;以下示例取材于&#8220;广东公务员考试黑幕事件&#8221;：</p>
<div class=cnblogs_code><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="COLOR: #0000ff">&nbsp;&nbsp;&nbsp; public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;公务员考生身份&nbsp;{&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;summary&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;打过招呼的<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;/summary&gt;</span><span style="COLOR: #808080"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;备注&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;警院万安中副院长&nbsp;:&nbsp;备注&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;中警院人事处咸逢清处长亲戚&nbsp;:&nbsp;备注&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;编办吴青川副处长&nbsp;:&nbsp;备注&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;司法厅吕恩处长转&nbsp;:&nbsp;备注&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;徐晓霞转省委办公厅信息处熊&nbsp;:&nbsp;备注&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;王小平转陈育生亲戚&nbsp;:&nbsp;备注&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;张新达委员转省财厅_办公厅等有关部门&nbsp;:&nbsp;备注&nbsp;{&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;阳春监狱警察梁志忠儿子&nbsp;:&nbsp;备注&nbsp;{&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">enum</span><span style="COLOR: #000000">&nbsp;考试结果<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;没考上&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800080">0</span><span style="COLOR: #000000">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;普通狱警,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;狱警组长,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;狱警大队长,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;狱警副主任,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;其他职位<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;政府机关<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;summary&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;考试<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;/summary&gt;</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;param&nbsp;name="ks"&gt;</span><span style="COLOR: #008000">必须已经报考了公务员考试</span><span style="COLOR: #808080">&lt;/param&gt;</span><span style="COLOR: #808080"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;考试(公务员考生身份&nbsp;ks)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"><img alt="" src="http://www.cnblogs.com/Images/dot.gif"><img alt="" src="http://www.cnblogs.com/Images/dot.gif">.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;考试结果&nbsp;审核(公务员考生身份&nbsp;ks)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">有&#8220;备注&#8221;的61个考生，一个没落，全部录取进入体检阶段。</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(ks&nbsp;</span><span style="COLOR: #0000ff">is</span><span style="COLOR: #000000">&nbsp;备注)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(ks&nbsp;</span><span style="COLOR: #0000ff">is</span><span style="COLOR: #000000">&nbsp;警院万安中副院长)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;考试结果.普通狱警;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(ks&nbsp;</span><span style="COLOR: #0000ff">is</span><span style="COLOR: #000000">&nbsp;中警院人事处咸逢清处长亲戚)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;考试结果.普通狱警;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(ks&nbsp;</span><span style="COLOR: #0000ff">is</span><span style="COLOR: #000000">&nbsp;编办吴青川副处长)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;考试结果.普通狱警;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(ks&nbsp;</span><span style="COLOR: #0000ff">is</span><span style="COLOR: #000000">&nbsp;司法厅吕恩处长转)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;考试结果.狱警组长;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(ks&nbsp;</span><span style="COLOR: #0000ff">is</span><span style="COLOR: #000000">&nbsp;张新达委员转省财厅_办公厅等有关部门)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;考试结果.狱警副主任;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(ks&nbsp;</span><span style="COLOR: #0000ff">is</span><span style="COLOR: #000000">&nbsp;徐晓霞转省委办公厅信息处熊)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;考试结果.狱警大队长;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(ks&nbsp;</span><span style="COLOR: #0000ff">is</span><span style="COLOR: #000000">&nbsp;王小平转陈育生亲戚)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;考试结果.普通狱警;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(ks&nbsp;</span><span style="COLOR: #0000ff">is</span><span style="COLOR: #000000">&nbsp;阳春监狱警察梁志忠儿子)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;考试结果.普通狱警;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"><img alt="" src="http://www.cnblogs.com/Images/dot.gif">.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;考试结果.其他职位;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">正常程序审理</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;(考试结果)(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Random().Next(</span><span style="COLOR: #800080">2</span><span style="COLOR: #000000">));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为了体现取材的严谨性，给出两个链接:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a).<font face=Verdana>http://hi.baidu.com/pol1ce/blog/item/046e7adacf6ea8deb7fd4831.html</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b).<font face=Verdana>http://news.xinhuanet.com/local/2008-06/03/content_8303411.htm</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;说明：从上面例子可以看出，同样是具有考生身份的人，当他具有别的身份的时候比如备注过的身份，程序执行结果是不一样的，对于考生结果是横不等于没考上的！！is的作用很大，他能辨别得出来具有什么样身份的人，今年公务员考试你备注了吗？如果没有！赶紧继承吧O(&#8745;_&#8745;)O哈哈~</p>
<p>&nbsp;</p>
<p><strong style="FONT-SIZE: 14pt">结束</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;写的时候苦于找不到合适的例子来说服自己，一直努力的阐述关于接口的所见所闻和所想，希望能带给你多一份关于接口的收获，热烈欢迎交流心得！！</p>
<img height=1 src="http://www.cnblogs.com/over140/aggbug/1383493.html?type=1" width=1><br><br>--------------------------<br>新闻：<a href="http://news.cnblogs.com/n/44673/" target=_blank>雅虎推搜索簿产品 模仿Google抛弃的Notebook</a><br>导航：<a href="http://www.cnblogs.com/" target=_blank>博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com/" target=_blank>知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com/" target=_blank>新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target=_blank>招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/" target=_blank>社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target=_blank>小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target=_blank>博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target=_blank>网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com/" target=_blank>找找看</a><br>文章来源:<a href="http://www.cnblogs.com/over140/archive/2009/02/05/1383493.html">http://www.cnblogs.com/over140/archive/2009/02/05/1383493.html</a> 
<img src ="http://www.cnitblog.com/jc213/aggbug/54267.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jc213/" target="_blank">winter_IT</a> 2009-02-05 09:40 <a href="http://www.cnitblog.com/jc213/archive/2009/02/05/54267.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]项目那点儿事(五) ---胜负在此一举[需求分析]之斗智斗勇</title><link>http://www.cnitblog.com/jc213/archive/2009/02/04/54238.html</link><dc:creator>winter_IT</dc:creator><author>winter_IT</author><pubDate>Wed, 04 Feb 2009 08:25:00 GMT</pubDate><guid>http://www.cnitblog.com/jc213/archive/2009/02/04/54238.html</guid><wfw:comment>http://www.cnitblog.com/jc213/comments/54238.html</wfw:comment><comments>http://www.cnitblog.com/jc213/archive/2009/02/04/54238.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jc213/comments/commentRss/54238.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jc213/services/trackbacks/54238.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 按说需求调研好了，应该由乙方整理后提交《需求规格说明书》。那甲方这时候干什么呢？我找了很多资料，没有发现对这时甲方的工作要求。换言之就是甲方这时没事干。甲方没事干对我来说是件非常可怕的事，比我那闲置的五万丘八还可怕。丘八闲置只是浪费一点钱，不会出事，客户闲下来是要闹事的。</p>
<p>&nbsp;&nbsp;&nbsp; &#8220;温饱思X欲&#8221;，这可是圣人言啊。当然了客户不可能对我那个啥的（IT项目好像也没有这种潜规则），但是他无聊时，就会想很多，他想得多了，就会给你找活干。你看看你们公司给你安排工作的人都是不做实际事的，天天就是想着让你干啥活，今天出个考核表，明天搞个测评，后天让你写程序员日记。自己人都这样，何况是当爷爷的客户呢。找你干活没商量。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 所以我的做法就是我工作时，客户也不能闲着。所以我会安排很多事给他们做，比如流程图的确认工作、所有报表EXCEL化并写清每列的计算方法、功能列表的确认。总之我会把整个《需求规格说明书》拆成几个部分来确认，像报表这个部分基本就是让客户做的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 不过一开始客户不太高兴呢，毕竟傻子都知道花报表这个是挺大的工作量，反正我说了如果我做了报表你们再看再修改那时间肯定不够用了，而且报表大部分是给领导看的，如果不合领导心意肯定不好，再说你做的报表，让领导知道，会对你大加表扬的。客户权衡利弊后，决得还是自己做划算一些。从此这个项目中的报表都是客户做的，大概120多张吧。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 现在客户有事忙了。我要开始做《需求规格说明书》了。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 所说《需求规格说明书》，就是包含项目目标、背景、功能列表、用例的文档。现在我们要做的就是从客户一大堆的流程和描述中，分别找出功能来。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 有个简单的办法，把客户描述中的名词都标出来，每个名词就是一个对象，而名词所做的动作就是方法。将具有同类的对象设计为一个功能。看功能列表和用例数都出来了。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 好了要写用例了，说到用例我要罗索一点了。</p>
<p>&nbsp;&nbsp;&nbsp; 春秋时有个叫孙子的人，当然了本名不叫孙子，叫孙武，后来的人尊敬他就叫他孙子了（原来古代是这样尊敬人的，汗啊）。在他的一本书里说&#8220;知已知彼，百战不贻（dai 同带，不是台啊，我认识位仁兄就读错了）&#8221;。所说知己，就是说，了解自己的实力。我们做项目自己这边的斤两还是清楚的。那知彼就难了，要了解对方的体重了，怎么了解啊，在项目里当然不能用体重秤了，好在这个世界上聪明人很多，有几位大侠就发明了一种工具，专门来了解客户的需求，这几位大侠是......（都是老外，也不用多了解，反正会用工具就行了，如果有想了解的同志，可以去找UML发展史看一下。）。这种工具就是UML，准确的讲，是UML当中的用例部分。</p>
<p>&nbsp;&nbsp;&nbsp; 用例是一个工具，估计大多数人都用过，可是你知道这个工具除了能描述需求外还能完善需求吗？我最喜欢的就是用例能完善需求的功能。</p>
<p>&nbsp;&nbsp;&nbsp; 用例怎么做，我就不说了，回去找一本《UML模型与设计》看一下就知道。完善需求是我在做项目体会到的。<br>&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; 我们将用例完整的填写到用例说明的时候，会发现有时这个说明写不下去了，写不下去的原因是因为你根本不知道这里该如何处理。比如某个用例的扩展流程&#8220;当无法找到当前记录时，系统应......&#8221;这时你发现系统要怎么做是不知道的，因为需求里没有写明，这时就要和客户沟通了。当你把所有的用例都填写完成后，基本上产品的样式就出来了。</p>
<p>&nbsp;&nbsp;&nbsp; 我见过有人只写主流程，而不写扩展流程的，我的经验告诉我，如果不写扩展流程你会死得很惨。就像我们出门旅行，你只带了必用品，没有带&#8220;谢丽婷&#8221;，到时你的旅行就行可能变成公厕观光游，还是付费的。</p>
<p>&nbsp;&nbsp;&nbsp; 所以必须写完扩展流程。不过工作量和风险是成正比的，因为扩展流程往往是主流程的三到五倍。</p>
<p>&nbsp;&nbsp;&nbsp; 用例图画一个主体的就行了，千万别给每个用例画图，因为那样会变成一个小人用长矛插一个鸡蛋，很难看的，同时也没啥大用处。有空多写点用例说明吧。</p>
<p>&nbsp;&nbsp;&nbsp; 好像这样做要写很多用例了，这次我做项目就写了200多页用例，如果这个用例只是给客户看看的实在是太浪费了。别急后面我会讲这个用例怎么用到开发中。</p>
<p>&nbsp;&nbsp;&nbsp; 好了用例写好了，《需求规格说明书》完成了，现在要做一件很重要的事---签字。</p>
<p>&nbsp;&nbsp;&nbsp; 找到客户，客户说这么多要看一下才能签字。<br>&nbsp;&nbsp;&nbsp; 好，给你们看吧。这一看就是一星期。</p>
<p>&nbsp;&nbsp;&nbsp; 其实给客户签字的东西写得越多就越有利。你想一本200页的文档，你会逐项逐字的看吗？最终客户同意签字了。</p>
<p>&nbsp;&nbsp;&nbsp; 为什么说签字重要呢，写《需求规格说明书》就是草拟圣旨，圣旨不盖玉玺是没用的，签字就是盖章了。很多人感觉到给客户签字后，客户的需求依然想变就变，细毫不为以前的签字而脸红，项目管理的书上说签字就是确认，是不应改变的，书上还说签字是对客户的约束，但现实根本和书上说的不一样啊。其实大可不必为这种事大惊小怪。因为客户从来没看过项目管理的书啊。</p>
<p>&nbsp;&nbsp;&nbsp; 其实这个问题要从圣经说起。上帝造人后，亚当和夏娃的子孙，决定通过自己的能力建造一座塔，一座通到天堂的塔，圣经里称为巴比伦塔。上帝这老小子挺缺德的，他不想大家都上天堂，于是给不同的人类赋于了不同语言，好家伙。大家不能沟通了，那造塔计划也就失败了。这是历史上记载最早的失败项目，失败原因是沟通不畅。之后语言们各自发展直到现在。现在我们看到最大的文化差异就是象型文字的代表汉语与拼音文字的代表英语两者产生的。<br>&nbsp;&nbsp;&nbsp; 签字文化发展于英语也就是中国人眼里的西方世界，原因很简单，英文仅有26个字母，每个书写不同的主要点在字母与字母间的连接，而老外签名一般都是一笔就写好了。这样造成老外的签名模仿难度极大，被肉眼分辩的成功率较高。<br>&nbsp;&nbsp;&nbsp; 再看看中国人签名，中国的汉字是方块字，字与字之间一般不连，而汉字发展了5000多年，还优雅的发展出大量的书法门派，中国人把写字提升到艺术层次（我是没见过西方人搞书法展的）。导致临摹胜行（小时候我还写过《庞中华字帖》呢）。经过这么多年，中国人多少都有临摹的基因，所以用心学个人的笔迹不是很困难，但是发现两者不同却要笔迹专家的水平（小时候在考卷上模仿家长签字，老师都很难发现）。久而久之，中国人对签字变得不再用心了，签字认证也就不被世面接受。</p>
<p>&nbsp;&nbsp;&nbsp; 在这种环境下，你一定要求客户签字认证，是很困难的。当然了项目管理的书没有说错，毕竟那是老外的东西。所以要控制客户的疯狂变更，还要想别的办法？后面我将详细说一下，我是怎么控制客户变更的。</p>
<p>&nbsp;&nbsp;&nbsp; 在我的勇气（敢给客户安排工作）和智慧（写了厚厚的需求说明）下，需求总算确定下来了。</p>
<p>PS：本文有对上帝不尊重的地方，在此向上帝和基督徒们致歉</p>
<img height=1 src="http://www.cnblogs.com/Pegasus_cc/aggbug/1383415.html?type=1" width=1><br><br>--------------------------<br>新闻：<a href="http://news.cnblogs.com/n/44667/" target=_blank>为何微软该发布Linux版IE?</a><br>导航：<a href="http://www.cnblogs.com/" target=_blank>博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com/" target=_blank>知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com/" target=_blank>新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target=_blank>招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/" target=_blank>社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target=_blank>小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target=_blank>博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target=_blank>网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com/" target=_blank>找找看</a><br>文章来源:<a href="http://www.cnblogs.com/Pegasus_cc/archive/2009/02/03/1383415.html">http://www.cnblogs.com/Pegasus_cc/archive/2009/02/03/1383415.html</a> 
<img src ="http://www.cnitblog.com/jc213/aggbug/54238.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jc213/" target="_blank">winter_IT</a> 2009-02-04 16:25 <a href="http://www.cnitblog.com/jc213/archive/2009/02/04/54238.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]项目那点儿事(四) ---胜负在此一举[需求分析]之看破对手</title><link>http://www.cnitblog.com/jc213/archive/2009/02/04/54239.html</link><dc:creator>winter_IT</dc:creator><author>winter_IT</author><pubDate>Wed, 04 Feb 2009 08:25:00 GMT</pubDate><guid>http://www.cnitblog.com/jc213/archive/2009/02/04/54239.html</guid><wfw:comment>http://www.cnitblog.com/jc213/comments/54239.html</wfw:comment><comments>http://www.cnitblog.com/jc213/archive/2009/02/04/54239.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jc213/comments/commentRss/54239.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jc213/services/trackbacks/54239.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 自从第一次交手完毕后，毕（其实是鄙，我不想用这个字，就私自换了一个）人回到公司，先与首辅同志汇报一下，再看看我那五万丘八练得如何，之后拿出&#8220;锦囊&#8221;开始着手整理客户的需求。整理需求也是很有学问的，首先是要区分里面的有用的需求和无用的废话。怎么区分啊，当然不是用SELECT语句或者把这句话通过泛型引入到类的方法里，之后等待系统返回是true还是false了。能看出里面真正的需求，与找到对手破绽都要用到一样本领，我们一般把这种本领称为行业经验。</p>
<p>&nbsp;&nbsp;&nbsp; 行业经验是如何炼成的?</p>
<p>&nbsp;&nbsp;&nbsp; 我们知道战争是分军种的，比如海军、陆军等。项目也是分行业的。比如制造业、物流业、政府行业、金融行业等等。<br>&nbsp;&nbsp;&nbsp; 做为IT产业，属于服务型行业。我们知道服务型行业必须依附于生活需要所存在，如饭店、桑那以及那些路边亮红灯小店里招手的。那IT产业也同样了，比如这家公司是给政府做电子政务，那家公司是给制造业做ERP。一个项目经理在同样的行业时间久了，形成对这个行业结构和业务形态的了解就是他的行业经验。行业经验越多，做起来同行业的业务就越熟练越快，成功机率也就越高。当然了也存在那些无师自通的猛人，我们称为天才。我这里只讲一般性，超人和蜘蛛侠不在我讲的范围。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有了行业经验，在需求分析时就体现出这种经验的重要性了（说明一点需求分析应该是BA做的，但在国内现状很多时候这种工作都是项目经理代劳的）。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 回到我&#8220;锦囊&#8221;里的那些需求吧。由于我做物流行业7年了，所以较容易分析出其中的需求和废话。并发现其中有多种破绽（业务流程有漏洞、需求之间相互矛盾、需求不清晰）<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; 那要是没有行业经验怎么办呢？<br>&nbsp;&nbsp;&nbsp; 如果你现在到一个新的行业，不能依赖原有的行业经验来判断，千万别以为ERP和物流都是供应链的应该差不多吧。在行业里可别认亲戚，因为我们的祖先早就告诉我们了&#8220;隔行如隔山&#8221;。所以在新行业中，要放弃原来的行业经验，从零开始。当然了困难肯定是有的（没有困难找项目经理做啥），缺少行业知识时，最重要的一点，就是在和客户交手时，你根本没法招架，就像你是少林派，非得和西洋拳交手，不出半分钟你就被罚下场了，理由是伤害对方腰带以下，而且用的是脚。</p>
<p>&nbsp;&nbsp;&nbsp; 我们玩帝国时，在不明了敌人数量和位置的时候，你应该要尽量收缩你的部队做好防卫，之后派出侦骑（斥侯）去探明对手的虚实。<br>&nbsp;&nbsp;&nbsp; 同理在和客户交手时，把他们所有的招数都记下来，一定要记到&#8220;锦囊&#8221;里，如果记到哪张报纸上后来不见了，你自己想办法吧。记下后，回到公司逐招分析，不会就百度一下，做到尽量理解，如果能发现对手招数中的破绽，恭喜你，你现在可以看到对手（客户）的破绽了。用笔在破绽的地方标出来。</p>
<p>&nbsp;&nbsp;&nbsp; 在双方第二次面对面时，我提出业务流程的漏洞，客户开始边和我讨论边思考，但我明显感觉到讨论时向我学习的成分在增加。因为这就像打仗时看破对手的阵型一样，对方觉得你很专业，至少比他强。而我告知他漏洞的行为让他觉得，你在为他着想，对你的好感和信任都会大增。<br>&nbsp;&nbsp;&nbsp; 这是个机会，战场上要时刻占据主动，但项目中有时要以退为进。之后我摆出第二招&#8220;欲擒故纵&#8221;。<br>&nbsp;&nbsp;&nbsp; 把相互矛盾的需求提了出来。并把解决问题的决定权交给客户了。这回客户就有活干了。当敌人不动时是不会有破绽的，破绽总是出现在出招后。客户为了解决矛盾的需求，开始变更原来的说法，这时我又抓住一个新的漏洞，彻底捍卫了我在这次战场上的主动权。<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; 最后把几个需求不清晰的部分，交给客户。对方的回答时，回去再好好仔细想想。我知道鸣金的时候到了。</p>
<p>&nbsp;&nbsp;&nbsp; 我们是做项目又不是真的打仗，得了便宜就跑。收队！</p>
<p>&nbsp;&nbsp;&nbsp; 这次交手可是收获颇丰啊，现在形势很好啊，是大好不是小好。以后我再和客户沟通就不用担心了。俗话说：人的名，树的影。意思就是关羽没劈华雄、战吕布、斩颜良、诛文丑时，连出战单挑的机会都很难，而成名后找关羽的人就要抬棺材才能上阵。所以此次之后，客户将会对我的业务能力有一个肯定。在未来这个肯定会带来意想不到的结果。</p>
<p>&nbsp;&nbsp;&nbsp; <br>篇后话</p>
<p>&nbsp;&nbsp;&nbsp; 昨天Sail跟我说，需求这段我写得战争味太浓了。我是很想写的花香水美的，但是这种两者对抗除了战争，我实在找不到再精准的比喻了。<br>&nbsp;&nbsp;&nbsp; 其实看破对方需求破绽的主要用途不是为了项目的进度，而是为了让你，就是乙方占据项目的主动权，不让项目失控。从看破对手的行为体现出你高人一等的水平，使对方对你的能力进行肯定并且相信你。就像股票一样，有个人说明天大盘会到XXXX点，你不信，结果预言成真。第二次他又预言中了，到第三天还是一样，如此5、6次，你会认为这个人很牛是股神，并且完全的相信这个人讲述关于股票的一切吗？看看带头大哥的事件就知道了，这种心理作用还是很大的。</p>
<img height=1 src="http://www.cnblogs.com/Pegasus_cc/aggbug/1382777.html?type=1" width=1><br><br>--------------------------<br>新闻：<a href="http://news.cnblogs.com/n/44666/" target=_blank>MOTO CEO称Windows Mobile 7在2010年推出</a><br>导航：<a href="http://www.cnblogs.com/" target=_blank>博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com/" target=_blank>知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com/" target=_blank>新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target=_blank>招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/" target=_blank>社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target=_blank>小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target=_blank>博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target=_blank>网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com/" target=_blank>找找看</a><br>文章来源:<a href="http://www.cnblogs.com/Pegasus_cc/archive/2009/02/02/1382777.html">http://www.cnblogs.com/Pegasus_cc/archive/2009/02/02/1382777.html</a> 
<img src ="http://www.cnitblog.com/jc213/aggbug/54239.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jc213/" target="_blank">winter_IT</a> 2009-02-04 16:25 <a href="http://www.cnitblog.com/jc213/archive/2009/02/04/54239.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]项目那点儿事(三) ---胜负在此一举[需求分析]之角斗开始</title><link>http://www.cnitblog.com/jc213/archive/2009/02/04/54240.html</link><dc:creator>winter_IT</dc:creator><author>winter_IT</author><pubDate>Wed, 04 Feb 2009 08:25:00 GMT</pubDate><guid>http://www.cnitblog.com/jc213/archive/2009/02/04/54240.html</guid><wfw:comment>http://www.cnitblog.com/jc213/comments/54240.html</wfw:comment><comments>http://www.cnitblog.com/jc213/archive/2009/02/04/54240.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jc213/comments/commentRss/54240.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jc213/services/trackbacks/54240.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 上回书说到，我们准备好资料，到客户处进行第一次面谈。一路上换了地铁换公交，终于到客户单位了。<br>&nbsp;&nbsp;&nbsp; 大家分宾主落座，双方就项目情况进行了亲切友好的会谈，为加强甲乙关系和物流项目的成功做出了贡献。</p>
<p>&nbsp;&nbsp;&nbsp; 好了，套话（官话）讲完了。现在要说正事了，真正做事，可不像上面说得那么好看。</p>
<p>&nbsp;&nbsp;&nbsp; 这是第一次见面，但双主的角斗在见面前就开始了。这是争夺项目主夺权的战斗。首先出场的是希望少花钱多办事的甲方，上身休闲夹克，下身西裤，手里拿着一个茶杯，还有一个记事本，嘴里还叼着香烟。之后出场的希望多赚钱少办事的乙方，全身西装，内着衬衫领带，手夹公事包。</p>
<p>&nbsp;&nbsp;&nbsp; 看到双方阵容了吧。记得穿西装卖东西肯定比穿休闲装卖的贵，即使西装卖的东西比休闲装的差一些。所以这身穿束是我仔细考虑后才穿上的。</p>
<p>&nbsp;&nbsp;&nbsp; 大家发现了吗，甲方的人叼着香烟呢。大家知道啊，香烟有害健康。如果这时我发挥环境保护组织和绿色和平组织的精神，上去讲道理列图表，再把那个子弹和香烟的比较图拿出来，那我肯定是疯了。香烟有害，也要看香烟在谁的嘴上，在客户嘴上，你说什么也不能把烟抢过来，扔到地上，再狠狠的踩两脚。那怎么办啊？<br>&nbsp;&nbsp;&nbsp; 医学上说吸二手烟的危害最大，那为了不吸二手烟，我也把烟点上好了。声明一下，本人平常是不抽烟的。当然了和客户一起抽烟，绝不仅仅是因为二手烟的原因。</p>
<p>&nbsp;&nbsp;&nbsp; 人其实是很奇怪的动物，比如你要是喜欢上网，可是对方却不爱上网；你要是喜欢玩网游，但对方搬出一堆玩物丧志的道理，我想你也不太会喜欢和这样的人在一起的。同理，如果你喜欢抽烟，你当然觉得和抽烟的人沟通更好了。其实这是种暗示心理，就是说我和你是同类人，我们有共同的爱好。</p>
<p>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; 在双方各自释放烟雾弹的情况下，正式的交战开始了。首先乙方进攻。很奇怪的，我和甲方进行过多年战争，一直以来首先发动进攻的总是乙方，有次我故意不说话，发现连甲方也不说话了，在等着我。<br>&nbsp;&nbsp;&nbsp; 先介绍一下自己吧，以及自己对这个合同的看法，并提出征求甲方的意见。<br>&nbsp;&nbsp;&nbsp; 甲方的意见很快就回复了。按合同做。<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; 要是按合同做，我过来干什么啊，这个合同哪有可执行性啊，按照合同写的，我就算把SAP的产品线都拉过还不一定够呢。</p>
<p>&nbsp;&nbsp;&nbsp; 看来甲方是想吃定我了。</p>
<p>&nbsp;&nbsp;&nbsp; 不行，按合同做肯定是个死，不过还好我们合同里有一条，&#8220;实际开发以《需求规格说明书》为准&#8221;。利用这一条无数的IT企业忽悠过甲方客户。</p>
<p>&nbsp;&nbsp;&nbsp; 先签了合同，其实合同里面除了时间、金额、付款方式外就没有别的有用的东西了。合同中的系统要求、功能描述统统会被《需求规格说明书》所代替。而甲方在这份文件签字时，乙方一般会说这是公司必要的程序，只是签字确认没有别的意思。晕乎乎的甲方就签了，到验收时才发现原来验收是按照《需求规格说明书》来做的，不是按照合同。</p>
<p>　　当然也存在老油条甲方，来个将计就计，利用这个规则把乙方涮了的。</p>
<p>&nbsp;&nbsp;&nbsp; 鉴于历史的经验，我决定绕开合同，先做实际的需求调研。</p>
<p>&nbsp;&nbsp;&nbsp; 本次参与谈判的甲方都是总公司的管理人员，这些人员是不参与下边实际操作的。由于合同是他们签定的，那就从他们开始调研吧。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 相关部门的负责人和技术人员都到场了，我翻开自己的&#8220;锦囊&#8221;（不知道此是何物者，请查《项目那点儿事二）》），把我准备好的问题一个一个的询问。甲方也算配合，是有什么说什么，不过明显废话多于实话。先不管废话还是实话都记上。顺便再问一下，他们实际工作是怎么做的，记下来。<br>&nbsp;&nbsp;&nbsp;&nbsp; 这次进攻还算顺利，虽说没抓到对方的什么将领，至少锣鼓帐篷还是得了一些的，同时了解了一下对手的基本情况。那咱们见好就收，与甲方主帅（甲方项目负责人）打个照呼，改日再战（定下下步工作计划，未来项目安排，项目例会安排等等）。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 至此第一次见面算是结束了。</p>
<p>篇外话<br>&nbsp;&nbsp;&nbsp;&nbsp; 有人问我，为什么一定要站到客户的对立面上，难道不能双赢吗？如果有同样想法的同志，请翻一下400年前，亚当.斯密写的《国富论》，里面提到一个真理——人天生，并将永远，是自私的动物。<br>&nbsp;&nbsp;&nbsp;&nbsp; 换句话说，每个人都会站在自己的角度想事情。做为项目的甲乙双方，两者的利益点是不同，双方都希望用最少的代价换来最大的成果，不同的是对代价和成果的理解正好是相反的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 而项目经理就是要让双方在代价和成果上取得平衡。就是说你不能让客户占太多便宜，也不能让公司得太大的实惠，因为一方的获胜总是以另一方的失败为代价的。这就是PMBOK里面讲到的控制。项目经理要能够控制整个项目，一但你无法控制客户，那你的项目就要失控了。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 有人就说客户是项目的出资方，是你的衣食父母啊。可实际上你的衣食父母是你的老板。<br>&nbsp;&nbsp;&nbsp;&nbsp; 按照家族关系算，客户是你老板的父母，就是你爷爷。现在你爷爷出钱买你爸的东西，这件事正好由你来负责，而你知道你爸之所以卖东西给你爷爷是因为他想赚钱，那你要怎么做呢。尤其当你爸说，事成后分20%利润给你时。<br>&nbsp;&nbsp;&nbsp;&nbsp; 所以我们要平衡，爷爷不开心时，肯定爸爸会来收拾你，爸爸不开心时，肯定你要挨打了。所以这种关系就是由项目经理来操心了。关于爸爸和爷爷，PMBOK里称为项目干系人，维护项目干系人的利益是项目经理的职责，这是PMP的道德准则。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 我之所以把和客户的沟通形容为战争，是让大家清醒的认识到，不管你和客户有多好，要知道客户就是客户，不可能成为自己人。在项目中除了你的公司，你没有自己人。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 对于需求调研，古人有话证：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-FAMILY: 隶书"><span style="FONT-FAMILY: 幼圆">&#8220;兵者，国之大事。死生之地，存亡之道。不可不察也&#8221; --孙子兵法 <span style="FONT-SIZE: x-small">始计</span></span></span></p>
<img height=1 src="http://www.cnblogs.com/Pegasus_cc/aggbug/1380402.html?type=1" width=1><br><br>--------------------------<br>新闻：<a href="http://news.cnblogs.com/n/44664/" target=_blank>微软CEO鲍尔默：科技产业终将成为经济救世主</a><br>导航：<a href="http://www.cnblogs.com/" target=_blank>博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com/" target=_blank>知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com/" target=_blank>新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target=_blank>招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/" target=_blank>社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target=_blank>小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target=_blank>博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target=_blank>网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com/" target=_blank>找找看</a><br>文章来源:<a href="http://www.cnblogs.com/Pegasus_cc/archive/2009/02/01/1380402.html">http://www.cnblogs.com/Pegasus_cc/archive/2009/02/01/1380402.html</a> 
<img src ="http://www.cnitblog.com/jc213/aggbug/54240.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jc213/" target="_blank">winter_IT</a> 2009-02-04 16:25 <a href="http://www.cnitblog.com/jc213/archive/2009/02/04/54240.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]项目那点儿事(二) -- 早朝的决定</title><link>http://www.cnitblog.com/jc213/archive/2009/02/04/54241.html</link><dc:creator>winter_IT</dc:creator><author>winter_IT</author><pubDate>Wed, 04 Feb 2009 08:25:00 GMT</pubDate><guid>http://www.cnitblog.com/jc213/archive/2009/02/04/54241.html</guid><wfw:comment>http://www.cnitblog.com/jc213/comments/54241.html</wfw:comment><comments>http://www.cnitblog.com/jc213/archive/2009/02/04/54241.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jc213/comments/commentRss/54241.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jc213/services/trackbacks/54241.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 先说一下项目情况吧，也没啥太复杂的，就是个物流的业务系统，主要是一个总公司下面有几家分公司，分公司使用WMS系统，总公司有个共用的数据库。</p>
<p>&nbsp;&nbsp;&nbsp; 项目情况说完了。那就开始正题吧。</p>
<p>&nbsp;&nbsp;&nbsp; 那一天，老板把我叫到他的金銮殿（办公室），说要给我个项目做，先说好，半年内结束（正常是一年多结束的），这种情况大家都遇到过，那我们就摆事实讲道理和老板讲可以吗，我提醒各位，这样做是没用的，一般领导给你项目期限是不太会改的，当然他也知道你不能完成，可这样做对领导有两个好处。首先，他可以给你压力，让你尽量往前赶。其次，他可以有把柄来约束你，到时不想要你了或要减你工资了，就说：&#8220;给你项目，让你半年做完，结果你做了九个月......&#8221;，说得你觉得拿工资都不好意思，到时在年终奖、项目奖上扣你一些，你又没话说。</p>
<p>&nbsp;&nbsp;&nbsp; 之后老板又说一大堆做好项目后怎样怎样的承诺。其实我知道，以前曹操就用过这招，叫望梅止渴（参看《三国演义》青梅煮酒论英雄那一章），是忽悠人用的。所以我也没在乎，毕竟要吃饭，所以就接下来了。</p>
<p>&nbsp;&nbsp;&nbsp; 还等我刚倒身从老板的金銮殿出来时，内阁首辅（公司副总）过来了，说让我看看我的团队。我就跟着，看到面前这5个程序员，那时我的感觉就是，我连敌人是谁都不知道，你给我5万军队干什么啊？</p>
<p>&nbsp;&nbsp;&nbsp; 我马上找首辅同志沟通，我说，这个现在好像不是安排程序员的时候，首辅同志很无奈，人都招过来了，现在他们又没事，你给他们安排点工作吧。</p>
<p>&nbsp;&nbsp;&nbsp; 敢情人不是饿死的，也不是撑死的，是晕死的。那安排什么啊，那就让他们先看看兵法（物流知识）吧。</p>
<p>&nbsp;&nbsp;&nbsp; 还是去了解一下这个项目吧。我们公司做项目有时是会签合同的，说有时，意思就是也有不签合同就开工的项目，这个现象在国内可能比较多。到质量部一问，不错这个项目还是签了合同的。既然有合同，就先看合同吧。</p>
<p>&nbsp;&nbsp;&nbsp; 翻开合同一看，真是豁然开朗，如果你想了解物流业务那就看这份合同吧，几乎把所有的物流业务都写在合同上了，不管是制造业还是第三方的，不管是保税的还是货代的，像部物流百科全书。估计这个做合同的人与明朝的永乐皇帝是亲戚，除了都爱编全书，还都是姓&#8220;猪&#8221;的。</p>
<p>&nbsp;&nbsp;&nbsp; 看来合同上是指不上了，那只能去客户现场了。</p>
<p>&nbsp;&nbsp;&nbsp; 先去个电话，约好见面时间、地点、人物三要素后，就准备了。</p>
<p>&nbsp;&nbsp;&nbsp; 准备什么？准备的可多了，要知道这种第一次见面，和政治谈判差不多，很多决定性的东西，就是这时候确定下来。<br>&nbsp;&nbsp;&nbsp; 1、还是先看看那本&#8220;全书&#8221;吧，不管怎么说，这个东西还是法律效应的，毕竟两个血红的大章在上面呢。先让公司的影后（影印皇后，如果是男的就是影帝，影印小弟），把合同复印一份，原件还是归还质量部存档吧。<br>&nbsp;&nbsp;&nbsp; 2、在全书的赝品上，把笔拿出来，当然了，萤光笔最好了，其他的笔也行，毛笔也可以。把上面和功能相关的都标记上。并看一遍相关的内容和要求。<br>&nbsp;&nbsp; 3、遇到不懂的功能，就百度一下，毕竟是21世纪嘛。<br>&nbsp;&nbsp; 4、搞懂合同了，就上网看看这家客户的主页，看看客户是做啥的，最近的新闻。当然了这些都是忽悠人的，多了解些总是好了<br>&nbsp;&nbsp; 5、把想到的问题都写到自己的本子上。这里要说一下，记事本是项目经理的法宝，比word、excel都要有用的多，这个要随身携带，像&#8220;锦囊&#8221;一样，搞不好从里面就能找到一条&#8220;妙计&#8221;。记到本上的问题，是要在见面时和客户沟通用的。<br>&nbsp;&nbsp; 6、把项目的规定都写在本子上，到时和客户商量。这包括，例会的安排、项目组织的情况、甲乙双方的沟通方式，项目的计划安排，前期调研安排等</p>
<p>&nbsp;</p>
<p>准备好了，现在出发吧</p>
<img height=1 src="http://www.cnblogs.com/Pegasus_cc/aggbug/1380348.html?type=1" width=1><br><br>--------------------------<br>新闻：<a href="http://news.cnblogs.com/n/44663/" target=_blank>传苹果下一代iPhone将于6月推出</a><br>导航：<a href="http://www.cnblogs.com/" target=_blank>博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com/" target=_blank>知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com/" target=_blank>新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target=_blank>招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/" target=_blank>社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target=_blank>小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target=_blank>博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target=_blank>网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com/" target=_blank>找找看</a><br>文章来源:<a href="http://www.cnblogs.com/Pegasus_cc/archive/2009/01/23/1380348.html">http://www.cnblogs.com/Pegasus_cc/archive/2009/01/23/1380348.html</a> 
<img src ="http://www.cnitblog.com/jc213/aggbug/54241.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jc213/" target="_blank">winter_IT</a> 2009-02-04 16:25 <a href="http://www.cnitblog.com/jc213/archive/2009/02/04/54241.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]项目那点儿事(一) --- 个案分析是个啥?</title><link>http://www.cnitblog.com/jc213/archive/2009/02/04/54242.html</link><dc:creator>winter_IT</dc:creator><author>winter_IT</author><pubDate>Wed, 04 Feb 2009 08:25:00 GMT</pubDate><guid>http://www.cnitblog.com/jc213/archive/2009/02/04/54242.html</guid><wfw:comment>http://www.cnitblog.com/jc213/comments/54242.html</wfw:comment><comments>http://www.cnitblog.com/jc213/archive/2009/02/04/54242.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jc213/comments/commentRss/54242.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jc213/services/trackbacks/54242.html</trackback:ping><description><![CDATA[<p><span style="FONT-FAMILY: Comic Sans MS">最近手里的项目结束，虽然公司没有规定要写个案分析，想一下自己还是总结一下吧。记录一下自己的历程也好啊。</span></p>
<p><span style="FONT-FAMILY: Comic Sans MS"><span style="FONT-FAMILY: Arial"><span style="FONT-FAMILY: Courier"><span style="FONT-FAMILY: Georgia">准备要写的时候，有同事来问我，什么是个案分析。这才发现，敢情很多人还不太了解呢？</span></span></span></span></p>
<p><span style="FONT-FAMILY: Comic Sans MS"><span style="FONT-FAMILY: Arial"><span style="FONT-FAMILY: Courier"><span style="FONT-FAMILY: Georgia">怎么说呢，看过《人月神话》吧，那就是一个个案分析。不过人家分析的是IBM的大项目，大项目的个案分析就像炸弹扔到粪池里，分量十足。咱这个，顶多算是扔块石头到粪池，能溅到哪位的身体中下部就算成功了。</span></span></span></span></p>
<p><span style="FONT-FAMILY: Comic Sans MS"><span style="FONT-FAMILY: Arial"><span style="FONT-FAMILY: Courier"><span style="FONT-FAMILY: Georgia">好了，不讨论粪池水花的问题了，说说个案分析吧。<br>其实，老外对个案分析有自己的说法，更牛的是居然有两个说法：一个说是Case Analysis，还一个说是A case study。按字面上看，第一种说法就是个案分析，而第二种应该是个案学习。其实我个人更倾向后者。因为这个分析来分析去，目的不就是为了学习吗。</span></span></span></span></p>
<p><span style="FONT-FAMILY: Comic Sans MS"><span style="FONT-FAMILY: Arial"><span style="FONT-FAMILY: Courier"><span style="FONT-FAMILY: Georgia">学习以后不吃亏啊。毕竟亏不是谁都愿意吃的，而且我相信，大多数人是不愿意吃亏的。</span></span></span></span></p>
<p><span style="FONT-FAMILY: Comic Sans MS"><span style="FONT-FAMILY: Arial"><span style="FONT-FAMILY: Courier"><span style="FONT-FAMILY: Georgia">现在我们知道啥是个案分析了，那做这个东西有啥用呢？</span></span></span></span></p>
<p><span style="FONT-FAMILY: Comic Sans MS"><span style="FONT-FAMILY: Arial"><span style="FONT-FAMILY: Courier"><span style="FONT-FAMILY: Georgia">这就要从项目管理的目标说起了，放心吧，我会用很通俗的说法来讲的。包学包会。</span></span></span></span></p>
<p><span style="FONT-FAMILY: Comic Sans MS"><span style="FONT-FAMILY: Arial"><span style="FONT-FAMILY: Courier"><span style="FONT-FAMILY: Georgia">首先，大家知道项目经理做得最多的是什么工作啊？有人说开发，有人说需求，还有人说是骂人。</span></span></span></span></p>
<p><span style="FONT-FAMILY: Comic Sans MS"><span style="FONT-FAMILY: Arial"><span style="FONT-FAMILY: Courier"><span style="FONT-FAMILY: Georgia">别笑，说骂人的这个还真答对了。但是我们不叫骂人，标准说法叫沟通。</span></span></span></span></p>
<p><span style="FONT-FAMILY: Comic Sans MS"><span style="FONT-FAMILY: Arial"><span style="FONT-FAMILY: Courier"><span style="FONT-FAMILY: Georgia">个案分析其实也是一种沟通，大家互相沟一下，就通了，通则不痛嘛。大家都通了，项目的问题也就少了。总而言之，总结前面的经验，再接再励。</span></span></span></span></p>
<p><span style="FONT-FAMILY: Comic Sans MS"><span style="FONT-FAMILY: Arial"><span style="FONT-FAMILY: Courier"><span style="FONT-FAMILY: Georgia">其次，大家都知道皇帝死了，要写遗诏，国家亡了，要写X史，这是什么，这是文化沉淀。项目结束了也要写个案分析，也就是项目总结。由于皇帝死了，遗诏大部不是自己写的，所以骂人的较多，而我们的个案分析就是在职的项目经理写的，相对表扬的较多。这样也好，咱也学学别人是怎么干的。</span></span></span></span></p>
<p><span style="FONT-FAMILY: Comic Sans MS"><span style="FONT-FAMILY: Arial"><span style="FONT-FAMILY: Courier"><span style="FONT-FAMILY: Georgia">最后，这个东东是项目价值的最后体现。这个物尽其用啊，项目验收了，钱收回来了，奖金也发了，产品也得了，团队也有了，公司的战略也实现了。但是还有一条啊，要把项目总结成个案，为下一个项目打好基础。这也是项目价值啊。</span></span></span></span></p>
<p><br><span style="FONT-FAMILY: Comic Sans MS"><span style="FONT-FAMILY: Arial"><span style="FONT-FAMILY: Courier"><span style="FONT-FAMILY: Georgia">PS：后面我将会描述项目情况，以及在项目的各个阶段我们是如何做的，怎么样结束的。经历了什么。哦，对了，先说一下，这个项目是用.net+sql2005开发的。</span></span></span></span></p>
<img height=1 src="http://www.cnblogs.com/Pegasus_cc/aggbug/1379969.html?type=1" width=1><br><br>--------------------------<br>新闻：<a href="http://news.cnblogs.com/n/44662/" target=_blank>微软宣布Windows 7六大版本 专业版取代商业版</a><br>导航：<a href="http://www.cnblogs.com/" target=_blank>博客园首页</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com/" target=_blank>知识库</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com/" target=_blank>新闻</a>&nbsp;&nbsp;<a href="http://job.cnblogs.com/" target=_blank>招聘</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/" target=_blank>社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/group.htm" target=_blank>小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q" target=_blank>博问</a>&nbsp;&nbsp;<a href="http://wz.cnblogs.com/" target=_blank>网摘</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com/" target=_blank>找找看</a><br>文章来源:<a href="http://www.cnblogs.com/Pegasus_cc/archive/2009/01/22/1379969.html">http://www.cnblogs.com/Pegasus_cc/archive/2009/01/22/1379969.html</a> 
<img src ="http://www.cnitblog.com/jc213/aggbug/54242.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jc213/" target="_blank">winter_IT</a> 2009-02-04 16:25 <a href="http://www.cnitblog.com/jc213/archive/2009/02/04/54242.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>