??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲AV无码成人精品区蜜桃 ,亚洲理论电影在线观看,亚洲AV无码一区二区二三区软件 http://m.tkk7.com/Wingel/archive/2006/12/14/87819.htmlWingelWingelThu, 14 Dec 2006 13:25:00 GMThttp://m.tkk7.com/Wingel/archive/2006/12/14/87819.htmlhttp://m.tkk7.com/Wingel/comments/87819.htmlhttp://m.tkk7.com/Wingel/archive/2006/12/14/87819.html#Feedback0http://m.tkk7.com/Wingel/comments/commentRss/87819.htmlhttp://m.tkk7.com/Wingel/services/trackbacks/87819.html 链接Q?/strong> W?4章结对编E?rar   或?下蝲

l对~程的好处:

联合两h的知识去对付一个难题?span lang="EN-US">

知识互相传递?span lang="EN-US">

更有效的查错跟纠错?span lang="EN-US">

E序员都很开心?span lang="EN-US">

减少员工职的损失?span lang="EN-US">

 

l对~程需要的一些技能:

用代码解释已有的设计l构?span lang="EN-US">

用例子来解释?span lang="EN-US">

用图表来解释设计思\?span lang="EN-US">

如果你无法把你的设计思\表达清楚Q把代码写出来?span lang="EN-US">

让比较迷惑的搭档来写代码Q这样他可以较好的融入你的概念?span lang="EN-US">

l常的休息?span lang="EN-US">

l常的更换搭?span lang="EN-US">

具体内容请下载pdf观看?img src ="http://m.tkk7.com/Wingel/aggbug/87819.html" width = "1" height = "1" />

Wingel 2006-12-14 21:25 发表评论
]]>
Q原创翻译)敏捷开发的必要技?3Q测试驱动编E(TDDQ?/title><link>http://m.tkk7.com/Wingel/archive/2006/12/11/86952.html</link><dc:creator>Wingel</dc:creator><author>Wingel</author><pubDate>Mon, 11 Dec 2006 08:50:00 GMT</pubDate><guid>http://m.tkk7.com/Wingel/archive/2006/12/11/86952.html</guid><wfw:comment>http://m.tkk7.com/Wingel/comments/86952.html</wfw:comment><comments>http://m.tkk7.com/Wingel/archive/2006/12/11/86952.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/Wingel/comments/commentRss/86952.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/Wingel/services/trackbacks/86952.html</trackback:ping><description><![CDATA[下蝲地址Q?<a href="/Files/Wingel/W?3章测试驱动编E?rar"><font color="#002c99">W?3章测试驱动编E?rar</font></a>  或者?<a ><b>下蝲</b></a><br /><br /><p class="MsoNormal"><strong><span lang="EN-US" style="FONT-FAMILY: 宋体">TDD</span></strong><strong><span style="FONT-FAMILY: 宋体">及它的优?span lang="EN-US"><?xml:namespace prefix = o /?><o:p></o:p></span></span></strong></p><p class="MsoNormal"><span lang="EN-US" style="FONT-FAMILY: 宋体"><o:p> </o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="FONT-FAMILY: 宋体"><span>    </span></span><span style="FONT-FAMILY: 宋体">上面q种~程的方式,叫“测试驱动编E?span lang="EN-US">Test Driven Development (TDD)</span>”,因ؓ我们L在写真正代码之前写一个通不q的试Q然后再写真正的代码Q让试通过?span lang="EN-US"><o:p></o:p></span></span></p><p class="MsoNormal"><span lang="EN-US" style="FONT-FAMILY: 宋体"><span>    </span></span><span style="FONT-FAMILY: 宋体">跟测试后行的开发方式相比,它有如下好处Q?span lang="EN-US"><o:p></o:p></span></span></p><p class="MsoNormal"><span lang="EN-US" style="FONT-FAMILY: 宋体"><span>                                                       </span><o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="FONT-FAMILY: 宋体"><span>    </span>1.</span><span style="FONT-FAMILY: 宋体">Z更容易的写单元测试,我们会广泛的使用接口Q比?span lang="EN-US">StudentRegistryChecker</span>{)。这个会让单元测试代码很Ҏ读跟写,因ؓ试代码里面没有多余的数据。如果我们不?span lang="EN-US">TDD</span>而是直接写实现的话,我们l常会用现成的c(比如<span lang="EN-US">StudentSet</span>Q,试Z调用现成的类Q就不得不创建很多多余的数据Q创建很巨型的对象,像<span lang="EN-US">Student</span>或?span lang="EN-US">Course</span>?span lang="EN-US"><o:p></o:p></span></span></p><p class="MsoNormal"><span lang="EN-US" style="FONT-FAMILY: 宋体"><span>    </span><o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="FONT-FAMILY: 宋体"><span>    </span>2.</span><span style="FONT-FAMILY: 宋体">因ؓq泛的用接口,我们的类之间׃会藕合(比如<span lang="EN-US">EnrollmentSet</span>׃炚w不知?span lang="EN-US">StudentSet</span>的存在)Q因此重用性更好?span lang="EN-US"><o:p></o:p></span></span></p><p class="MsoNormal"><span lang="EN-US" style="FONT-FAMILY: 宋体"><o:p> </o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="FONT-FAMILY: 宋体"><span>    </span>3.</span><span style="FONT-FAMILY: 宋体">写单元测试的时候,很容易就可以Z个行为写一个测试用例,让它通过Q然后ؓ另一U行为写另一个测试用例。也是_整个d会被划分成很多小的Q务,独立完成。如果我们不?span lang="EN-US">TDD</span>而直接实现的话,我们很容易就会同时把所有的行ؓ都实C。这栯的时间长Q而且在这相当长的旉里面Q写的代码都是没有测试过Q不能保证准性的。相反的Q用<span lang="EN-US">TDD</span>的话Q我们只实现要测的行为的代码。它只花费很的旉Q几分钟Q,而且可以马上试?/span></p><img src ="http://m.tkk7.com/Wingel/aggbug/86952.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/Wingel/" target="_blank">Wingel</a> 2006-12-11 16:50 <a href="http://m.tkk7.com/Wingel/archive/2006/12/11/86952.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Q原创翻译)敏捷开发的必要技?2Q单元测?/title><link>http://m.tkk7.com/Wingel/archive/2006/12/09/86506.html</link><dc:creator>Wingel</dc:creator><author>Wingel</author><pubDate>Sat, 09 Dec 2006 02:01:00 GMT</pubDate><guid>http://m.tkk7.com/Wingel/archive/2006/12/09/86506.html</guid><wfw:comment>http://m.tkk7.com/Wingel/comments/86506.html</wfw:comment><comments>http://m.tkk7.com/Wingel/archive/2006/12/09/86506.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/Wingel/comments/commentRss/86506.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/Wingel/services/trackbacks/86506.html</trackback:ping><description><![CDATA[ <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-weight: bold"> <span style="mso-spacerun: yes"> <font color="#ff0000">?/font> <a href="/Files/Wingel/W?2章单元测?rar"> <font color="#ff0000">W?2章单元测?rar</font> </a> <font color="#ff0000"> 或?</font> <a > <b> <font color="#ff0000">下蝲</font> </b> </a> <font color="#ff0000">  下蝲pdf?/font> <br /> <br />    </span> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-weight: bold">单元试跟验收测试有什么区别?验收试试的是pȝ的外部行为,而单元测试是试pȝ内部l构Q它只测一个单元(c,甚至一个方法)。验收测试属于客LQ我们没有权利决定验收测试的内容。我们顶多只是帮忙客h据用户例事写出验收测试。单元测试属于我们,因ؓpȝ里面有什么类Q每个类都做什么,是由我们军_的。客户就没有权利涉及了,而且我们也不需要他的参与。我们只是根据我们对q个单元Q类Q的期望写出单元试。因此,q种试又叫“程序员试”?span lang="EN-US"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span></span> </p> <img src ="http://m.tkk7.com/Wingel/aggbug/86506.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/Wingel/" target="_blank">Wingel</a> 2006-12-09 10:01 <a href="http://m.tkk7.com/Wingel/archive/2006/12/09/86506.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Q原创翻译)敏捷开发的必要技?1Q对UIq行验收试QAcceptance TestQ?/title><link>http://m.tkk7.com/Wingel/archive/2006/12/08/86452.html</link><dc:creator>Wingel</dc:creator><author>Wingel</author><pubDate>Fri, 08 Dec 2006 13:21:00 GMT</pubDate><guid>http://m.tkk7.com/Wingel/archive/2006/12/08/86452.html</guid><wfw:comment>http://m.tkk7.com/Wingel/comments/86452.html</wfw:comment><comments>http://m.tkk7.com/Wingel/archive/2006/12/08/86452.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/Wingel/comments/commentRss/86452.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/Wingel/services/trackbacks/86452.html</trackback:ping><description><![CDATA[     摘要: 之前讲了怎么对代码进行验收测试,但如果代码跟UI相关的话Q验收测试又要怎么写?  <a href='http://m.tkk7.com/Wingel/archive/2006/12/08/86452.html'>阅读全文</a><img src ="http://m.tkk7.com/Wingel/aggbug/86452.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/Wingel/" target="_blank">Wingel</a> 2006-12-08 21:21 <a href="http://m.tkk7.com/Wingel/archive/2006/12/08/86452.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Q原创翻译)敏捷开发的必要技?0Q验收测试(Acceptance TestQ?/title><link>http://m.tkk7.com/Wingel/archive/2006/12/07/86034.html</link><dc:creator>Wingel</dc:creator><author>Wingel</author><pubDate>Thu, 07 Dec 2006 03:17:00 GMT</pubDate><guid>http://m.tkk7.com/Wingel/archive/2006/12/07/86034.html</guid><wfw:comment>http://m.tkk7.com/Wingel/comments/86034.html</wfw:comment><comments>http://m.tkk7.com/Wingel/archive/2006/12/07/86034.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/Wingel/comments/commentRss/86034.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/Wingel/services/trackbacks/86034.html</trackback:ping><description><![CDATA[     摘要: 当你实现了一个用户例事(user storyQ,你怎么判断你的代码是真正的Q是用户真正惌的?  <a href='http://m.tkk7.com/Wingel/archive/2006/12/07/86034.html'>阅读全文</a><img src ="http://m.tkk7.com/Wingel/aggbug/86034.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/Wingel/" target="_blank">Wingel</a> 2006-12-07 11:17 <a href="http://m.tkk7.com/Wingel/archive/2006/12/07/86034.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(原创译)敏捷开发的必要技?Q用CRC卡协助设? http://m.tkk7.com/Wingel/archive/2006/12/05/85515.htmlWingelWingelTue, 05 Dec 2006 02:51:00 GMThttp://m.tkk7.com/Wingel/archive/2006/12/05/85515.htmlhttp://m.tkk7.com/Wingel/comments/85515.htmlhttp://m.tkk7.com/Wingel/archive/2006/12/05/85515.html#Feedback0http://m.tkk7.com/Wingel/comments/commentRss/85515.htmlhttp://m.tkk7.com/Wingel/services/trackbacks/85515.htmlpdf下蝲地址Q W?章用CRC卡协助设?rar
或者: 下蝲

摘录一些东西,具体请下附g观看Q?br />

因ؓ在这些卡里面Q我们写上了cdQ它的职责,以及它的协作关系Q我们管q样的卡片叫?span lang="EN-US">CRC卡”?span lang="EN-US">CRC是ClassQ?span lang="EN-US">Responsibility?span lang="EN-US">Collaboration的简U?span lang="EN-US">

CRC 卡的典型应用 

Z么用CRC卡,而不用文档或者更先进?span lang="EN-US">UML工具Q?span lang="EN-US">

1. 卡片上面的空间很,q样可以防止我们给q个cd多的职责。如果一个类的职责太多的话(比如Q超q?span lang="EN-US">4个)Q尝试以更抽象的方式去考虑一下,职责划分?span lang="EN-US">

2.CRC 卡主要是用在探烦或者讨论类的设计的阶段。如果我们觉得这个设计不行的话,我们既不用修Ҏ,也不用修改类图,只要把卡片丢了就行了。此外,一旦设计完成,我们可以把所有的卡丢了。它们不是用来做文档的?span lang="EN-US">

   3. 如果我们觉得现在的卡片不合适,之前设计的比较好Q我们只要简单的把之前的卡片拿出来组合就行了?/span>



Wingel 2006-12-05 10:51 发表评论
]]>
Q原创翻译)敏捷开发的必要技?Q用用户例事(user story)来管理项?/title><link>http://m.tkk7.com/Wingel/archive/2006/12/04/85312.html</link><dc:creator>Wingel</dc:creator><author>Wingel</author><pubDate>Mon, 04 Dec 2006 03:28:00 GMT</pubDate><guid>http://m.tkk7.com/Wingel/archive/2006/12/04/85312.html</guid><wfw:comment>http://m.tkk7.com/Wingel/comments/85312.html</wfw:comment><comments>http://m.tkk7.com/Wingel/archive/2006/12/04/85312.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/Wingel/comments/commentRss/85312.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/Wingel/services/trackbacks/85312.html</trackback:ping><description><![CDATA[ <h2 style="MARGIN: 13pt 0cm; TEXT-ALIGN: center" align="center"> <span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">W?/span> <span lang="EN-US"> <font face="Arial">8</font> </span> <span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">?/span> <font face="Arial"> </font> <span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">以用户例事管理项?/span> </h2> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US"> <span style="mso-spacerun: yes">                                                  </span> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <b style="mso-bidi-font-weight: normal"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">什么是用户例事</span> <span lang="EN-US">(user story)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span> </b> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">假定q个目的客h个饮料自动售货机的制造商。他们要求我们ؓ他们的售货机开发一ƾY件。我们可以找他们的市场经理了解这个Y件的需求?/span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">因此Q我们的客户是他们的市场经理。谈需求的时候,有一回他q样_“用户往售货机每塞一个硬币,售货机都要显C当前该客户已经投了多少钱。当用户投的钱够买某一N料时Q代表这N料的按钮的灯׃亮。如果那个用h了这个按钮,售货机就放一|饮料到出口Q然后找雉l他。?/span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上面的话描述的是一件事情,一件用户通过pȝ完成他一个有价值的目标Q买一|饮料)的事。这Lq程叫“用h?/span> <span lang="EN-US">(user case)</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”或者“用户例?/span> <span lang="EN-US">(user story)</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”。也是_上面我们的客h说的话,是在描qC个用户例事(</span> <span lang="EN-US">user story</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q?/span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"> <span lang="EN-US">(</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我解释一下ؓ什么用例事q个词,没兴也可以忽略。在一个系l面前,每个用户要完成同L目标Q都要做q个pȝ讑֮的例行的事,qg事情不是一个例子,所以不叫事例,q也不是故事Q也不能一D历E,而是一个例行的事?/span> <span lang="EN-US">)<br /><br /> pdf下蝲地址Q <a href="/Files/Wingel/W?章以用户例事理目.rar">W?章以用户例事理目.rar</a></span> </p> <img src ="http://m.tkk7.com/Wingel/aggbug/85312.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/Wingel/" target="_blank">Wingel</a> 2006-12-04 11:28 <a href="http://m.tkk7.com/Wingel/archive/2006/12/04/85312.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Q原创翻译)敏捷开发的必要技?Q-分离数据库访问,UI和域逻辑http://m.tkk7.com/Wingel/archive/2006/12/01/84879.htmlWingelWingelFri, 01 Dec 2006 08:16:00 GMThttp://m.tkk7.com/Wingel/archive/2006/12/01/84879.htmlhttp://m.tkk7.com/Wingel/comments/84879.htmlhttp://m.tkk7.com/Wingel/archive/2006/12/01/84879.html#Feedback0http://m.tkk7.com/Wingel/comments/commentRss/84879.htmlhttp://m.tkk7.com/Wingel/services/trackbacks/84879.html具体pdf的下载地址Q?br />分离数据库访问,UI和域逻辑

http://wingel.javaeye.com/topics/download/ce15b67a-1df7-4a75-8f03-1a505aca35d8

请从链接中下载,下面的内容只是摘要?br />
处理三种cd的代码都混在了一P

   1.UI: JDialog, JTextField, 响应用户事g的代码?br />
   2.数据库访? Connection, PreparedStatement, SQL statements, ResultSet {等?br />
   3.域逻辑: 参会者的默认idQ参会者的名字必填Q所属地区的限制{等。域逻辑又称为“域模型”或者“业务逻辑”?br />
q三个不同类别的代码混在一P会造成下面的问题:
1.代码很复杂?br />2.代码很难重用。如果我们想创徏一个EditParticipantDialogQ让用户更改参会者的信息Q我们就想重用部分域逻辑Q比如,地区的限Ӟ。但实现q部分域逻辑的代码跟AddParticipantDialog混在了一PҎ不能重用。如果是在一个webpȝ中,更N用了?br />3.代码很难试。每ơ要这L一D代码,我们都要Z个数据库Q还要通过一个用h作界面来试?br />     4.如果数据库表l构更改了,AddParticipantDialogq个c,q有其他的很多地斚w要跟着更改?br />5.它导致我们一直在考虑一些低层的太细节的概念Q比如数据库字段Q表的记录之cȝQ而不是类Q对象,Ҏ和属性这一cȝ概念。或者说白了一点,一直在考虑怎么往数据库里面装数据Q而没有了面向对象的概念,没有了徏立业务模型的思维?br />
因此Q我们应该将q三U类别的代码分离开QUIQ数据库讉KQ域逻辑Q。       ?a href="/Files/Wingel/%E7%AC%AC7%E7%AB%A0%E5%B0%86%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%BF%E9%97%AE%EF%BC%8CUI%E5%92%8C%E5%9F%9F%E9%80%BB%E8%BE%91%E5%88%86%E7%A6%BB.rar">



Wingel 2006-12-01 16:16 发表评论
]]>
(原创译)敏捷开发的必要技? 处理不合适的依赖http://m.tkk7.com/Wingel/archive/2006/12/01/84733.htmlWingelWingelFri, 01 Dec 2006 01:28:00 GMThttp://m.tkk7.com/Wingel/archive/2006/12/01/84733.htmlhttp://m.tkk7.com/Wingel/comments/84733.htmlhttp://m.tkk7.com/Wingel/archive/2006/12/01/84733.html#Feedback0http://m.tkk7.com/Wingel/comments/commentRss/84733.htmlhttp://m.tkk7.com/Wingel/services/trackbacks/84733.html下蝲Q?br />http://m.tkk7.com/Files/Wingel/W?章处理不合适的引用.rar
or
http://wingel.javaeye.com/topics/download/afd36f87-a11b-4d18-a01b-a843092ec1bc

  如果现在有一个类ParentQ里面有个属性的cd是ChildQadd的方法里面还有个参数的类型是GirlQ?br />  class Parent{
        Child child;
 void add(Girl girl){
    ...
 }
     }
     因ؓ上面Parent里面用到了Child跟Girlq两个类Q我们就_Parent引用了类Child跟类Girl。现在的问题是,如果Childq个cL者Girlq个cȝ译不q的话,那么Parentq个cM~译不了了。也是_Parent依赖于Child跟Girl。这章讲q的Q就是因Z些类的依赖造成的无法重用的问题?br />
具体的内容在上面的下载链接里面的pdf文g里,内容较多?/font>



Wingel 2006-12-01 09:28 发表评论
]]>
《敏捷开发的必要技巧》各章节都在“敏捷开发”这个分cMhttp://m.tkk7.com/Wingel/archive/2006/12/01/84728.htmlWingelWingelFri, 01 Dec 2006 01:22:00 GMThttp://m.tkk7.com/Wingel/archive/2006/12/01/84728.htmlhttp://m.tkk7.com/Wingel/comments/84728.htmlhttp://m.tkk7.com/Wingel/archive/2006/12/01/84728.html#Feedback2http://m.tkk7.com/Wingel/comments/commentRss/84728.htmlhttp://m.tkk7.com/Wingel/services/trackbacks/84728.html或者点q个链接Q?br />
http://m.tkk7.com/Wingel/category/17919.html



Wingel 2006-12-01 09:22 发表评论
]]>
Q原创翻译) 敏捷开发的必要技?Q慎用?/title><link>http://m.tkk7.com/Wingel/archive/2006/11/29/84419.html</link><dc:creator>Wingel</dc:creator><author>Wingel</author><pubDate>Wed, 29 Nov 2006 12:40:00 GMT</pubDate><guid>http://m.tkk7.com/Wingel/archive/2006/11/29/84419.html</guid><wfw:comment>http://m.tkk7.com/Wingel/comments/84419.html</wfw:comment><comments>http://m.tkk7.com/Wingel/archive/2006/11/29/84419.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://m.tkk7.com/Wingel/comments/commentRss/84419.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/Wingel/services/trackbacks/84419.html</trackback:ping><description><![CDATA[     摘要: 当我们要l承一个父cLQ我们要保证父类里面所有了publicҎ都是子类惌的,它不应该ȝ承一些它不用的功能?nbsp; <a href='http://m.tkk7.com/Wingel/archive/2006/11/29/84419.html'>阅读全文</a><img src ="http://m.tkk7.com/Wingel/aggbug/84419.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/Wingel/" target="_blank">Wingel</a> 2006-11-29 20:40 <a href="http://m.tkk7.com/Wingel/archive/2006/11/29/84419.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(原创译)敏捷开发的必要技?Q保持代码的z?/title><link>http://m.tkk7.com/Wingel/archive/2006/11/28/84137.html</link><dc:creator>Wingel</dc:creator><author>Wingel</author><pubDate>Tue, 28 Nov 2006 12:51:00 GMT</pubDate><guid>http://m.tkk7.com/Wingel/archive/2006/11/28/84137.html</guid><wfw:comment>http://m.tkk7.com/Wingel/comments/84137.html</wfw:comment><comments>http://m.tkk7.com/Wingel/archive/2006/11/28/84137.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://m.tkk7.com/Wingel/comments/commentRss/84137.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/Wingel/services/trackbacks/84137.html</trackback:ping><description><![CDATA[完整书籍<br /><a href="../../Files/Wingel/%E7%AC%AC4%E7%AB%A0%E4%BF%9D%E6%8C%81%E4%BB%A3%E7%A0%81%E7%AE%80%E6%B4%81.rar">http://m.tkk7.com/Files/Wingel/W??保持代码z?rar</a><br /><br /><a >W??保持代码z?/a><a ></a><br /><br />W?章?保持代码z?br /><br />     <br />CZ<br /><br />    q是一个会议管理系l。它用来理所有参会者的信息。刚开始的时候,我们只需要记录每个参会者的IDQ这是会议组l者分配的Q,姓名Q电话和地址p。于是,我们写了如下的代码:<br />    <br />    class Participant {                                                                            <br />       String id;                                                                                  <br />       String name;                                                                                <br />       String telNo;                                                                               <br />       String address;                                                                             <br />    }    <br />    <br />    class ConferenceSystem {                                                                       <br />       Participant participants[];                                                                 <br />    }                                                                                              <br /><br />    接着Q新的需求来了:现在每个参会者都可以让组l者帮忙预订酒店,所以我们要记录下他想预订的酒店名,入住日期Q离开日期Q房间类型(单h房或者双人房Q。于是我们又扩充成如下的代码Q  ?<br /><br />    class Participant {                                                                            <br />       String id;                                                                                  <br />       String name;                                                                                <br />       String telNo;                                                                               <br />       String address;                                                                             <br />       boolean bookHotelForHim;                                                                    <br />       String hotelName;                                                                           <br />       Date checkInDate;                                                                           <br />       Date checkOutDate;                                                                          <br />       boolean isSingleRoom;                                                                       <br />       void setHotelBooking(String hotelName, Date checkInDate, ...) {                             <br />           ...                                                                                     <br />       }                                                                                           <br />    }                                                                                              <br /><br />    接着Q又有一个新的需求来了:参会者可以参加不同的研讨会,所以我们要记录下参会者参加的研讨会。对于他要参加的每一场研讨会Q我们还要记录下他的登记旉Q同时他q需要什么翻译设备。于是代码又扩充成:<br /><br /><a href="/Files/Wingel/%E7%AC%AC4%E7%AB%A0%E4%BF%9D%E6%8C%81%E4%BB%A3%E7%A0%81%E7%AE%80%E6%B4%81.rar"><font face="Verdana" color="#ff0000"><strong>具体的内容在上面的下载链接里面的pdf文g里?/strong></font></a><br /><br />完整书籍<br /><a href="/Files/Wingel/%E7%AC%AC4%E7%AB%A0%E4%BF%9D%E6%8C%81%E4%BB%A3%E7%A0%81%E7%AE%80%E6%B4%81.rar">http://m.tkk7.com/Files/Wingel/%E7%AC%AC4%E7%AB%A0%E4%BF%9D%E6%8C%81%E4%BB%A3%E7%A0%81%E7%AE%80%E6%B4%81.rar<br /></a><img src ="http://m.tkk7.com/Wingel/aggbug/84137.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/Wingel/" target="_blank">Wingel</a> 2006-11-28 20:51 <a href="http://m.tkk7.com/Wingel/archive/2006/11/28/84137.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Q原创翻译)敏捷开发的必要技?---消除代码异味http://m.tkk7.com/Wingel/archive/2006/11/27/83886.htmlWingelWingelMon, 27 Nov 2006 13:23:00 GMThttp://m.tkk7.com/Wingel/archive/2006/11/27/83886.htmlhttp://m.tkk7.com/Wingel/comments/83886.htmlhttp://m.tkk7.com/Wingel/archive/2006/11/27/83886.html#Feedback3http://m.tkk7.com/Wingel/comments/commentRss/83886.htmlhttp://m.tkk7.com/Wingel/services/trackbacks/83886.htmlhttp://m.tkk7.com/Files/Wingel/W??20除去代码异味.rar
                W??除去代码异味 


    异味q个?可能有点抽象,我们先看一下下面的例子

    q是一个CADpȝ. 现在,它已l可以画三种形状?U条,长方?跟圆.
先认真的看一下下面的代码:

    class Shape {                                                                                  
       final static int TYPELINE = 0;                                                              
       final static int TYPERECTANGLE = 1;                                                         
       final static int TYPECIRCLE = 2;                                                            
       int shapeType;                                                                              
       //U条的开始点
       //长方形左下角的点
       //圆心
       Point p1;                                                                                   
       //U条的结束点
       //长方形的右上角的?br />       //如果是圆的话,q个属性不?br />       Point p2;                                                                                   
       int radius;                                                                                 
    }                                                                                              
    class CADApp {                                                                                 
       void drawShapes(Graphics graphics, Shape shapes[]) {                                        
           for (int i = 0; i < shapes.length; i++) {                                               
               switch (shapes[i].getType()) {                                                      
                  case Shape.TYPELINE:                                                             
                      graphics.drawLine(shapes[i].getP1(), shapes[i].getP2());                     
                      break;                                                                       
                  case Shape.TYPERECTANGLE:                                                        
                      //d条边
                      graphics.drawLine(...);                                                      
                      graphics.drawLine(...);                                                      
                      graphics.drawLine(...);                                                      
                      graphics.drawLine(...);                                                      
                      break;                                                                       
                  case Shape.TYPECIRCLE:                                                           
                      graphics.drawCircle(shapes[i].getP1(), shapes[i].getRadius());               
                      break;                                                                       
               }                                                                                   
           }                                                                                       
       }                                                                                           
    }                                                                                              


    代码都是一直在改变?而这也是上面的代码会到的一个问?

    现在我们有一个问? 如果我们需要支持更多的形状(比如三角?, 那么肯定要改动Shapeq个c? CADApp里面的drawShapesq个Ҏ也要?
?改ؓ如下的样?
  
......


    如果我们惌支持更多的图形(比如Q三角ŞQ,上面没有一个类需要修攏V我们只需要创Z个新的类Trianglep了?br />
具体的内容在上面的下载链接里面的pdf文g里,看pdf比较舒服?/strong>

http://m.tkk7.com/Files/Wingel/W??20除去代码异味.rar

Wingel 2006-11-27 21:23 发表评论
]]>
Q原创翻译)敏捷开发的必要技?---U除重复代码Q将注释转ؓ代码http://m.tkk7.com/Wingel/archive/2006/11/27/83885.htmlWingelWingelMon, 27 Nov 2006 13:22:00 GMThttp://m.tkk7.com/Wingel/archive/2006/11/27/83885.htmlhttp://m.tkk7.com/Wingel/comments/83885.htmlhttp://m.tkk7.com/Wingel/archive/2006/11/27/83885.html#Feedback0http://m.tkk7.com/Wingel/comments/commentRss/83885.htmlhttp://m.tkk7.com/Wingel/services/trackbacks/83885.htmlhttp://m.tkk7.com/Files/Wingel/敏捷开发的必要技巧第1,2?rar                                                                                                                   
                W?章 U除重复代码
                                                                               
重复代码是怎么产生的?

误察下面的代码Q我们已l有一个根据出U记录的id取出U用客户的姓名的Ҏ:getCustomerName?br />
    public class BookRental { //该类描述出租记录
        String id;
        String customerName;

        ...

    }
    public class BookRentals {
       private Vector rentals;
       public String getCustomerName(String rentalId) { Ҏ出租id取出客户姓名
           for (int i = 0; i < rentals.size(); i++) {
              BookRental rental = (BookRental) rentals.elementAt(i);
              if (rental.getId().equals(rentalId)) {
                  return rental.getCustomerName();
               }
           }
           throw new RentalNotFoundException();
        }
    }
    public class RentalNotFoundException extends Exception {

        ...

    }

假定现在你要增加一个新的方法,该方法是Ҏ出租记录的id删除该记?然后把它命名为deleteRental(String rentalId)。现在你已经考虑刎ͼ像getCustomerNameq个Ҏ一P你要一个一个遍历出U记录。所以你将getCustomerNameq个Ҏ里面的一些代码拷出来Q然后稍微修改一下:

  
.....


Z么我们要U除重复代码Q?

我来向各位程序员同学E微说一下,在BookRentalsq个cMQrentalsq个属性的cd是VentorQ如果我们需要将它改为数l,那我们就必须所有的"rentals.size()"改ؓ"rentals.length". 在重构以后的版本中,我们只需要在getRentalIdxByIdq个Ҏ中修改一ơ,而在原来的版本,我们得在getCustomerName跟deleteRental两个Ҏ中都改一ơ。类似的Q我们还要将所有的"rentals.elementAt(i)" 改ؓ "rentals[i]". 又是改一ơ跟改两ơ的比较Q?br />
大多数情况中Q如果类DL代码?0个地斚w复,当我们修改代码的时候,p修改10个地方,我们q不能保证能把这10个地斚wC了,而一旦漏掉了几个地方Q等待我们的Q是一处一处的错误M复。而最致命的是,当我们修改的是业务逻辑?q时候,不管我们漏掉了几个地方,IDE都不会报错,那么Q等待我们的Q将一堆去查,而造成的一些bug?很可能是短时间内q发C了了.?_-!!

具体的内容在上面的下载链接里面的pdf文g里,看pdf比较舒服?/strong>

http://m.tkk7.com/Files/Wingel/敏捷开发的必要技巧第1,2?rar

Wingel 2006-11-27 21:22 发表评论
]]>
վ֩ģ壺 ޴߶ר| ޹Ʒ߲| ˳ͼƬС˵վ| ȫ߲ëƬ| ޹һƵվ| ŮƵƵaѴȫƵ| ձվ| AVרAV鶹Ѿ| ëƬѲ| ߵƵѹۿ| ˳ɹƷ| 㽶Ƶ| ޹þþþþþ| 91Ʒѹۿ| ˳վ18ֹ| СƵ߹ۿ| һëƬڵȫ| AVһDV| 51ƷƵѹר| ޾ƷAMMëƬ| Ļ޼| Сӵ߹ۿ| þþƷަvDz| ҹƵ| ѾþþƷѾѾ| þþƷĻ鶹 | ޹Ӱavַ| ձѾƷһ| ŷ޹Ʒ㽶| ˾ƷƵ| ɫַ߹ۿ| С˵ͼƬ| ձڵƵӰ| һѹۿƵ| þҹɫƷAV̬ͼ| www.ɫվ| ѹۿվ| ëƬѹۿ| պƷƵ߹ۿ| һػaѴƬ| ˳ӰԺ77777|