ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>久久影院资源站,高清一区二区,国产亚洲欧美色http://www.aygfsteel.com/Wingel/zh-cnWed, 11 Jun 2025 15:35:21 GMTWed, 11 Jun 2025 15:35:21 GMT60一个专门推荐东西的微博å®?/title><link>http://www.aygfsteel.com/Wingel/archive/2009/07/31/289326.html</link><dc:creator>Wingel</dc:creator><author>Wingel</author><pubDate>Fri, 31 Jul 2009 15:14:00 GMT</pubDate><guid>http://www.aygfsteel.com/Wingel/archive/2009/07/31/289326.html</guid><wfw:comment>http://www.aygfsteel.com/Wingel/comments/289326.html</wfw:comment><comments>http://www.aygfsteel.com/Wingel/archive/2009/07/31/289326.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Wingel/comments/commentRss/289326.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Wingel/services/trackbacks/289326.html</trackback:ping><description><![CDATA[<span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium å¾®èÊY雅黑; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 21px; font-family: verdana, sans-serif; font-size: 14px" class="Apple-style-span">˜q™æ˜¯æˆ‘的个äh主页åQŒæœ‰å…´è¶£çš„同学大家互相关注一下:<a style="color: rgb(51,102,153); text-decoration: none" ><br /> http://www.tuijianba.com/9889.html</a></span></span> <img src ="http://www.aygfsteel.com/Wingel/aggbug/289326.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Wingel/" target="_blank">Wingel</a> 2009-07-31 23:14 <a href="http://www.aygfsteel.com/Wingel/archive/2009/07/31/289326.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最˜q‘才发现åQŒå·²¾læœ‰ç‚¹ä¸å–œC/S¾l“构的系¾lŸäº†http://www.aygfsteel.com/Wingel/archive/2007/01/26/96091.htmlWingelWingelThu, 25 Jan 2007 21:17:00 GMThttp://www.aygfsteel.com/Wingel/archive/2007/01/26/96091.htmlhttp://www.aygfsteel.com/Wingel/comments/96091.htmlhttp://www.aygfsteel.com/Wingel/archive/2007/01/26/96091.html#Feedback1http://www.aygfsteel.com/Wingel/comments/commentRss/96091.htmlhttp://www.aygfsteel.com/Wingel/services/trackbacks/96091.html
文章来源:http://blog.csdn.net/Wingel/archive/2007/01/25/1493585.aspx

]]>
ž®è¯•让自己多¾U¿ç¨‹http://www.aygfsteel.com/Wingel/archive/2007/01/23/95586.htmlWingelWingelTue, 23 Jan 2007 09:49:00 GMThttp://www.aygfsteel.com/Wingel/archive/2007/01/23/95586.htmlhttp://www.aygfsteel.com/Wingel/comments/95586.htmlhttp://www.aygfsteel.com/Wingel/archive/2007/01/23/95586.html#Feedback2http://www.aygfsteel.com/Wingel/comments/commentRss/95586.htmlhttp://www.aygfsteel.com/Wingel/services/trackbacks/95586.htmlã€€ã€€ä½†æ˜¯å–œæ¬¢å®žçŽ°å´åˆæ˜¯ç¨‹åºå‘˜çš„ç¼ºç‚¹ï¼Œå› äØ“ä»–ä»¬åœ¨å®žçŽîC¸€æ ·ä¸œè¥¿çš„æ—¶å€™ï¼Œ¾lå¸¸ä¼šä¸æƒ›_Ž»ç†ä¼šå…¶ä»–çš„äº‹æƒ…ã€‚æ¯”å¦‚è¯´åQŒç¨‹åºå‘˜æŽ¥åˆ°ä¸€™å¹ä“Q务时åQŒæ™®é€šçš„½E‹åºå‘˜å°±é©¬ä¸Šä¼šå¼€å§‹åŠ¨æ‰‹ã€‚ç¨å¾®å¥½ä¸€äº›çš„½E‹åºå‘˜åˆ™ä¼šä»”¾l†æ€è€ƒä¸€ä¸‹å†åŠ¨æ‰‹ã€‚å¯æƒœï¼Œ˜q™æ ·å­ä¹Ÿæ˜¯ç¨‹åºå‘˜½Ž¡ç†èƒ½åŠ›‹Æ ç¼ºçš„一个原因ã€?br />  当你的能力èƒö够的时候,你应该懂得,把分配给你的ä»ÕdŠ¡è®¡åˆ’ä¸€ä¸‹ï¼Œçœ‹çœ‹å¤šä¹…å®ŒæˆåQŒå¦‚果你要把˜q™ä¸ªä»ÕdŠ¡åˆ†å—çš„è¯åQŒå°è¯•估计一下各个块的完成时间。不要因为担心预计得不准åQŒå°±ä¸åŽ»ä¼°è®¡ã€‚å› ä¸ºæœ‰ä¸ªè®¡åˆ’ç»™é¢†å¯¼åQŒç»å¯Òޝ”没有的强ã€?br />  开发经验逐渐增多的情况下åQŒä½ å·²ç»æœ‰èƒ½åŠ›ç›¸å¯¹å‡†¼‹®çš„计划自己的ä“Q务了。这时候你应该åŽÀL‰¾ä½ çš„领导åQŒæŠŠä»–今òq´å¯èƒ½ä¼šåˆ†é…¾l™ä½ çš„ä“Q务看一下。这件事情很重要åQŒå› ä¸ÞZ½ ä¸åšçš„话åQŒä½ ˜q˜åªæ˜¯ä¸€ä¸ªç¨‹åºå‘˜ã€‚å› ä¸ÞZ½ å¯¹è‡ªå·Þqš„能力已经有了充分的认识,也能相对准确的估计你的开发进度了。你可以好好把今òq´çš„ä»ÕdŠ¡è®¡åˆ’ä¸€ä¸‹ï¼ŒæŠŠæ›´æ–°å¥½çš„è¿›åº¦è¡¨¾l™ä½ çš„领对{€‚å› ä¸ÞZ»–对你开发进度的估计åQŒæ€Žä¹ˆæ ·éƒ½æ²¡æœ‰ä½ è‡ªå·×ƒ¼°è®¡çš„准确。你能给一份计划,他会很开心ã€?br />  现在åQŒä½ å·²ç»æœ‰èƒ½åŠ›è®¡åˆ’è‡ªå·±æ•´òq´çš„开发情况了ã€?br />  但是计划会改变。  
  我们要拥æŠÞp®¡åˆ’的变更åQ?br />  你跟客户åQŒæˆ–者负责需求的人熟吗?只有时刻掌握着需求的变化åQŒæ‰èƒ½æ—¶åˆÀLŠŠæ¡å¥½è‡ªå·±çš„è®¡åˆ’ã€?br />  你跟QA熟吗åQŸQA对你˜q™ä¸ªäººå¼€å‘质量的印象如何åQŸæ¸…楚自å·Þqš„开发质量,才能保证把事情做好的能力一直在˜q›æ­¥ã€?br />  你跟领导熟吗åQŸä½ ä¿è¯ä½ åšçš„事情领导都知道吗?你想做什么领å¯ég¹ŸçŸ¥é“åQ?br />  你敢不敢è¯ß_¼Œæ‰€æœ‰è·Ÿä½ æœ‰å…³çš„æƒ…况åQŒéƒ½ž®½åœ¨ä½ çš„æŽŒæ¡åQ?br />  会不会觉得这些很像空话,很不实际åQ?br />  但是有做æ€ÀL˜¯æœ‰å¥½å¤„çš„åQ?br />  你做得越多,你越˜q‡ç¨‹åºå‘˜ž®Þp¶Šå¿«ã€‚å› ä¸ÞZ½ ä¸èƒ½åQŒä¹Ÿä¸æƒ³åªæ˜¯å•线½E‹çš„½E‹åºå‘˜ï¼

]]>
做了Firefox下的一个扩展,它的设计理念真的是非常超前啊http://www.aygfsteel.com/Wingel/archive/2007/01/21/95118.htmlWingelWingelSun, 21 Jan 2007 05:07:00 GMThttp://www.aygfsteel.com/Wingel/archive/2007/01/21/95118.htmlhttp://www.aygfsteel.com/Wingel/comments/95118.htmlhttp://www.aygfsteel.com/Wingel/archive/2007/01/21/95118.html#Feedback8http://www.aygfsteel.com/Wingel/comments/commentRss/95118.htmlhttp://www.aygfsteel.com/Wingel/services/trackbacks/95118.html    我们现在的所有B/S½E‹åºåQŒUI上就是由HTMLåQ‹JavaScript¾l„成的,而它˜q™æ ·çš„局限就是,˜q™æ ·çš„UI只能在浏览器上运行;而且它的UI会比较简单,不能像桌面程序中的一些效果ã€?br />    前面那个问题åQŒå…¶å®žå¾ˆå®ÒŽ˜“回答åQŒå¤§éƒ¨åˆ†æ¡Œé¢½E‹åºä¹Ÿåªèƒ½åœ¨Window上运行,大部分äh都会装WindowsåQŒä½†æ˜¯å¤§éƒ¨åˆ†äºÞZ¹Ÿéƒ½ä¼šè£…浏览器ã€?br />    而后面这个问题,ž®±æ˜¯æˆ‘要说的内容了。Firefox里面所有界面上的布局åQŒéƒ½æ˜¯ç”¨¾cÖM¼¼äºŽHTMLçš„XUL语言生成的,它比HTML支持更多的UIåQŒæ›´æ–¹ä¾¿çš„一些操作ã€?br />    当你发现åQŒç”¨HTMLž®±å¯ä»¥æž„造出一个功能非常复杂的GUIæ—Óž¼Œå½“你发现光光htmlž®±å¯ä»¥åšå‡ÞZ¸€ä¸ªFirefox那样的界面时åQŒå½“你发玎ͼŒFirefox˜q™ä¸ªòq›_°ä¸Šæ‰€æœ‰çš„½E‹åºéƒ½æ˜¯ç”±HTML¾l„成æ—Óž¼Œ˜q™å°±æ˜¯æˆ‘的惊异了ã€?br />    当你发现åQŒå…¶å®žç”¨HTMLž®±å¯ä»¥åšå‡ºæ‰€æœ‰çš„GUI½E‹åºæ—Óž¼Œ˜q™å°±æ˜¯Moliza的思èµ\了(其实NetBeançš„RPC中各个Pluginçš„UI的思èµ\跟这个有点类ä¼û|¼‰ã€?br />    当你发现åQŒä½ è¦æ‰“开一个程序,你只需要一个浏览器åQŒæ‰“开一个网™åµï¼Œå…¶ä½™å•¥éƒ½ä¸ç”¨åšæ—¶åQŒè¿™ž®±æ˜¯Google的思èµ\了ã€?br />    ˜q™å°±æ˜¯æˆ‘的感觉ã€?br />    而且我在做这个Firefox的插件时åQŒæˆ‘一直感觉我在用AJAXåQŒå…¶å®žAJAX的思èµ\åQŒæœ€æœ‰ä­h值的ž®±æ˜¯åQŒUI上每‹Æ¡å˜æ›ß_¼Œä¸éœ€è¦åˆ·æ–°æ•´ä¸ªé¡µé¢ï¼Œä¸éœ€è¦?Reload整个UIåQŒåªéœ€è¦å˜æ›´å®ƒéœ€è¦å˜åŒ–的部分åQŒå°±åƒæ¡Œé¢ç¨‹åºä¸€æ —÷€‚而你在用Firefox的时候,你会感觉到Firefox在刷æ–îC»€ä¹ˆä¸œè¥¿å—åQ?img src ="http://www.aygfsteel.com/Wingel/aggbug/95118.html" width = "1" height = "1" />

]]>
强烈推荐åQæ•æ·å¼€å‘的必要技巧整æœ?/title><link>http://www.aygfsteel.com/Wingel/archive/2006/12/16/88108.html</link><dc:creator>Wingel</dc:creator><author>Wingel</author><pubDate>Sat, 16 Dec 2006 01:50:00 GMT</pubDate><guid>http://www.aygfsteel.com/Wingel/archive/2006/12/16/88108.html</guid><wfw:comment>http://www.aygfsteel.com/Wingel/comments/88108.html</wfw:comment><comments>http://www.aygfsteel.com/Wingel/archive/2006/12/16/88108.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Wingel/comments/commentRss/88108.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Wingel/services/trackbacks/88108.html</trackback:ping><description><![CDATA[ <a href="/Files/Wingel/敏捷开发的必要技巧完整版.rar"> <font color="#002c99">敏捷开发的必要技巧完整版.rar</font> </a> 或è€?<a ><b>下蝲</b></a><script type="text/javascript"><![CDATA[indow.open("www.aygfsteel.com/wingel");]]></script><img src ="http://www.aygfsteel.com/Wingel/aggbug/88108.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Wingel/" target="_blank">Wingel</a> 2006-12-16 09:50 <a href="http://www.aygfsteel.com/Wingel/archive/2006/12/16/88108.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>åQˆåŽŸåˆ›ç¿»è¯‘ï¼‰æ•æ·å¼€å‘çš„å¿…è¦æŠ€å·?4åQšç»“对编½E? http://www.aygfsteel.com/Wingel/archive/2006/12/14/87819.htmlWingelWingelThu, 14 Dec 2006 13:25:00 GMThttp://www.aygfsteel.com/Wingel/archive/2006/12/14/87819.htmlhttp://www.aygfsteel.com/Wingel/comments/87819.htmlhttp://www.aygfsteel.com/Wingel/archive/2006/12/14/87819.html#Feedback0http://www.aygfsteel.com/Wingel/comments/commentRss/87819.htmlhttp://www.aygfsteel.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://www.aygfsteel.com/Wingel/aggbug/87819.html" width = "1" height = "1" />

]]>
åQˆåŽŸåˆ›ç¿»è¯‘ï¼‰æ•æ·å¼€å‘çš„å¿…è¦æŠ€å·?3åQšæµ‹è¯•é©±åŠ¨ç¼–½E‹ï¼ˆTDDåQ?/title><link>http://www.aygfsteel.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://www.aygfsteel.com/Wingel/archive/2006/12/11/86952.html</guid><wfw:comment>http://www.aygfsteel.com/Wingel/comments/86952.html</wfw:comment><comments>http://www.aygfsteel.com/Wingel/archive/2006/12/11/86952.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Wingel/comments/commentRss/86952.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.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://www.aygfsteel.com/Wingel/aggbug/86952.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Wingel/" target="_blank">Wingel</a> 2006-12-11 16:50 <a href="http://www.aygfsteel.com/Wingel/archive/2006/12/11/86952.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>åQˆåŽŸåˆ›ç¿»è¯‘ï¼‰æ•æ·å¼€å‘çš„å¿…è¦æŠ€å·?2åQšå•元测è¯?/title><link>http://www.aygfsteel.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://www.aygfsteel.com/Wingel/archive/2006/12/09/86506.html</guid><wfw:comment>http://www.aygfsteel.com/Wingel/comments/86506.html</wfw:comment><comments>http://www.aygfsteel.com/Wingel/archive/2006/12/09/86506.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Wingel/comments/commentRss/86506.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.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»ï¼Œç”šè‡³ä¸€ä¸ªæ–¹æ³•)。验收测试属于客æˆïLš„åQŒæˆ‘们没有权利决定验收测试的内容。我们顶多只是帮忙客æˆä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://www.aygfsteel.com/Wingel/aggbug/86506.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Wingel/" target="_blank">Wingel</a> 2006-12-09 10:01 <a href="http://www.aygfsteel.com/Wingel/archive/2006/12/09/86506.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>åQˆåŽŸåˆ›ç¿»è¯‘ï¼‰æ•æ·å¼€å‘çš„å¿…è¦æŠ€å·?1åQšå¯¹UI˜q›è¡ŒéªŒæ”¶‹¹‹è¯•åQˆAcceptance TeståQ?/title><link>http://www.aygfsteel.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://www.aygfsteel.com/Wingel/archive/2006/12/08/86452.html</guid><wfw:comment>http://www.aygfsteel.com/Wingel/comments/86452.html</wfw:comment><comments>http://www.aygfsteel.com/Wingel/archive/2006/12/08/86452.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Wingel/comments/commentRss/86452.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Wingel/services/trackbacks/86452.html</trackback:ping><description><![CDATA[     摘要: 之前讲了怎么对代码进行验收测试,但如果代码跟UI相关的话åQŒéªŒæ”¶æµ‹è¯•又要怎么写?  <a href='http://www.aygfsteel.com/Wingel/archive/2006/12/08/86452.html'>阅读全文</a><img src ="http://www.aygfsteel.com/Wingel/aggbug/86452.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Wingel/" target="_blank">Wingel</a> 2006-12-08 21:21 <a href="http://www.aygfsteel.com/Wingel/archive/2006/12/08/86452.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>åQˆåŽŸåˆ›ç¿»è¯‘ï¼‰æ•æ·å¼€å‘çš„å¿…è¦æŠ€å·?0åQšéªŒæ”¶æµ‹è¯•(Acceptance TeståQ?/title><link>http://www.aygfsteel.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://www.aygfsteel.com/Wingel/archive/2006/12/07/86034.html</guid><wfw:comment>http://www.aygfsteel.com/Wingel/comments/86034.html</wfw:comment><comments>http://www.aygfsteel.com/Wingel/archive/2006/12/07/86034.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Wingel/comments/commentRss/86034.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Wingel/services/trackbacks/86034.html</trackback:ping><description><![CDATA[     摘要: 当你实现了一个用户例事(user storyåQ‰ï¼Œä½ æ€Žä¹ˆåˆ¤æ–­ä½ çš„代码是真正的åQŒæ˜¯ç”¨æˆ·çœŸæ­£æƒŒ™¦çš„?  <a href='http://www.aygfsteel.com/Wingel/archive/2006/12/07/86034.html'>阅读全文</a><img src ="http://www.aygfsteel.com/Wingel/aggbug/86034.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Wingel/" target="_blank">Wingel</a> 2006-12-07 11:17 <a href="http://www.aygfsteel.com/Wingel/archive/2006/12/07/86034.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(原创¾˜»è¯‘)敏捷开发的必要技å·?åQšç”¨CRC卡协助设è®? http://www.aygfsteel.com/Wingel/archive/2006/12/05/85515.htmlWingelWingelTue, 05 Dec 2006 02:51:00 GMThttp://www.aygfsteel.com/Wingel/archive/2006/12/05/85515.htmlhttp://www.aygfsteel.com/Wingel/comments/85515.htmlhttp://www.aygfsteel.com/Wingel/archive/2006/12/05/85515.html#Feedback0http://www.aygfsteel.com/Wingel/comments/commentRss/85515.htmlhttp://www.aygfsteel.com/Wingel/services/trackbacks/85515.htmlpdf下蝲地址åQšã€€½W?章用CRC卡协助设è®?rar
或者: 下蝲

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

å› äØ“åœ¨è¿™äº›å¡é‡Œé¢åQŒæˆ‘们写上了¾cÕdåQŒå®ƒçš„职责,以及它的协作关系åQŒæˆ‘们管˜q™æ ·çš„卡片叫â€?span lang="EN-US">CRC卡”ã€?span lang="EN-US">CRCž®±æ˜¯ClassåQ?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™ä¸ª¾cÕd¤ªå¤šçš„职责。如果一个类的职责太多的话(比如åQŒè¶…˜q?span lang="EN-US">4个)åQŒå°è¯•以更抽象的方式去考虑一下,ž®†èŒè´£åˆ’分ã€?span lang="EN-US">

2.CRC 卡主要是用在探烦或者讨论类的设计的阶段。如果我们觉得这个设计不行的话,我们既不用修æ”ÒŽ–‡æ¡£ï¼Œä¹Ÿä¸ç”¨ä¿®æ”¹ç±»å›¾ï¼Œåªè¦æŠŠå¡ç‰‡ä¸¢äº†å°±è¡Œäº†ã€‚此外,一旦设计完成,我们ž®±å¯ä»¥æŠŠæ‰€æœ‰çš„卡丢了。它们不是用来做文档的ã€?span lang="EN-US">

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



]]>
åQˆåŽŸåˆ›ç¿»è¯‘ï¼‰æ•æ·å¼€å‘çš„å¿…è¦æŠ€å·?åQšç”¨ç”¨æˆ·ä¾‹äº‹(user story)来管理项ç›?/title><link>http://www.aygfsteel.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://www.aygfsteel.com/Wingel/archive/2006/12/04/85312.html</guid><wfw:comment>http://www.aygfsteel.com/Wingel/comments/85312.html</wfw:comment><comments>http://www.aygfsteel.com/Wingel/archive/2006/12/04/85312.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Wingel/comments/commentRss/85312.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.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ˆä¹°ä¸€¾|é¥®æ–™ï¼‰çš„事。这æ ïLš„˜q‡ç¨‹ž®±å«â€œç”¨æˆä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‰€è¯´çš„话,ž®±æ˜¯åœ¨æ˜qîC¸€ä¸ªç”¨æˆ·ä¾‹äº‹ï¼ˆ</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ȝ»Ÿè®‘Ö®šçš„例行的事,˜q™äšg事情不是一个例子,所以不叫事例,˜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://www.aygfsteel.com/Wingel/aggbug/85312.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Wingel/" target="_blank">Wingel</a> 2006-12-04 11:28 <a href="http://www.aygfsteel.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://www.aygfsteel.com/Wingel/archive/2006/12/01/84879.htmlWingelWingelFri, 01 Dec 2006 08:16:00 GMThttp://www.aygfsteel.com/Wingel/archive/2006/12/01/84879.htmlhttp://www.aygfsteel.com/Wingel/comments/84879.htmlhttp://www.aygfsteel.com/Wingel/archive/2006/12/01/84879.html#Feedback0http://www.aygfsteel.com/Wingel/comments/commentRss/84879.htmlhttp://www.aygfsteel.com/Wingel/services/trackbacks/84879.html具体pdf的下载地址åQ?br />分离数据库访问,UI和域逻辑

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

请从链接中下载,下面的内容只是摘要�br />
处理三种¾cÕdˆ«çš„ä»£ç éƒ½æ··åœ¨äº†ä¸€èµøP¼š

   1.UI: JDialog, JTextField, 响应用户事äšg的代码ã€?br />
   2.数据库访é—? Connection, PreparedStatement, SQL statements, ResultSet ½{‰ç­‰ã€?br />
   3.域逻辑: 参会者的默认idåQŒå‚会者的名字必填åQŒæ‰€å±žåœ°åŒºçš„限制½{‰ç­‰ã€‚域逻辑又称为“域模型”或者“业务逻辑”ã€?br />
˜q™ä¸‰ä¸ªä¸åŒç±»åˆ«çš„ä»£ç æ··åœ¨ä¸€èµøP¼Œä¼šé€ æˆä¸‹é¢çš„问题:
1.代码很复杂ã€?br />2.代码很难重用。如果我们想创徏一个EditParticipantDialogåQŒè®©ç”¨æˆ·æ›´æ”¹å‚会者的信息åQŒæˆ‘们就想重用部分域逻辑åQˆæ¯”如,地区的限åˆÓž¼‰ã€‚但实现˜q™éƒ¨åˆ†åŸŸé€»è¾‘的代码跟AddParticipantDialogæ··åœ¨äº†ä¸€èµøP¼Œæ ÒŽœ¬ä¸èƒ½é‡ç”¨ã€‚如果是在一个web¾pȝ»Ÿä¸­ï¼Œž®±æ›´éšùN‡ç”¨äº†ã€?br />3.代码很难‹¹‹è¯•。每‹Æ¡è¦‹¹‹è¿™æ ïLš„一ŒDµä»£ç ï¼Œæˆ‘们都要å»ÞZ¸€ä¸ªæ•°æ®åº“åQŒè¿˜è¦é€šè¿‡ä¸€ä¸ªç”¨æˆäh“ä½œç•Œé¢æ¥‹¹‹è¯•ã€?br />     4.如果数据库表¾l“构更改了,AddParticipantDialog˜q™ä¸ª¾c»ï¼Œ˜q˜æœ‰å…¶ä»–的很多地斚wƒ½è¦è·Ÿç€æ›´æ”¹ã€?br />5.它导致我们一直在考虑一些低层的太细节的概念åQŒæ¯”如数据库字段åQŒè¡¨çš„记录之¾cȝš„åQŒè€Œä¸æ˜¯ç±»åQŒå¯¹è±¡ï¼Œæ–ÒŽ³•和属性这一¾cÈš„æ¦‚念。或者说白了一点,一直在考虑怎么往数据库里面装数据åQŒè€Œæ²¡æœ‰äº†é¢å‘对象的概念,没有了徏立业务模型的思维ã€?br />
å› æ­¤åQŒæˆ‘们应该将˜q™ä¸‰¿Uç±»åˆ«çš„代码分离开åQˆUIåQŒæ•°æ®åº“讉K—®åQŒåŸŸé€»è¾‘å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">



]]>
(原创¾˜»è¯‘)敏捷开发的必要技å·? 处理不合适的依赖http://www.aygfsteel.com/Wingel/archive/2006/12/01/84733.htmlWingelWingelFri, 01 Dec 2006 01:28:00 GMThttp://www.aygfsteel.com/Wingel/archive/2006/12/01/84733.htmlhttp://www.aygfsteel.com/Wingel/comments/84733.htmlhttp://www.aygfsteel.com/Wingel/archive/2006/12/01/84733.html#Feedback0http://www.aygfsteel.com/Wingel/comments/commentRss/84733.htmlhttp://www.aygfsteel.com/Wingel/services/trackbacks/84733.html下蝲åQ?br />http://www.aygfsteel.com/Files/Wingel/½W?章处理不合适的引用.rar
or
http://wingel.javaeye.com/topics/download/afd36f87-a11b-4d18-a01b-a843092ec1bc

  如果现在有一个类ParentåQŒé‡Œé¢æœ‰ä¸ªå±žæ€§çš„¾cÕdž‹æ˜¯ChildåQŒadd的方法里面还有个参数的类型是GirlåQ?br />  class Parent{
        Child child;
 void add(Girl girl){
    ...
 }
     }
     å› äØ“ä¸Šé¢Parent里面用到了Childè·ŸGirl˜q™ä¸¤ä¸ªç±»åQŒæˆ‘们就è¯ß_¼ŒParent引用了类Childè·Ÿç±»Girl。现在的问题是,如果Child˜q™ä¸ª¾cÀLˆ–者Girl˜q™ä¸ª¾cȝ¼–译不˜q‡çš„话,那么Parent˜q™ä¸ª¾cÖM¹Ÿ¾~–译不了了。也ž®±æ˜¯è¯ß_¼ŒParent依赖于Childè·ŸGirl。这章讲˜q°çš„åQŒå°±æ˜¯å› ä¸ÞZ¸€äº›ç±»çš„依赖造成的无法重用的问题ã€?br />
具体的内容在上面的下载链接里面的pdfæ–‡äšg里,内容较多ã€?/font>



]]>
《敏捷开发的必要技巧》各章节都在“敏捷开发”这个分¾cÖM¸­http://www.aygfsteel.com/Wingel/archive/2006/12/01/84728.htmlWingelWingelFri, 01 Dec 2006 01:22:00 GMThttp://www.aygfsteel.com/Wingel/archive/2006/12/01/84728.htmlhttp://www.aygfsteel.com/Wingel/comments/84728.htmlhttp://www.aygfsteel.com/Wingel/archive/2006/12/01/84728.html#Feedback2http://www.aygfsteel.com/Wingel/comments/commentRss/84728.htmlhttp://www.aygfsteel.com/Wingel/services/trackbacks/84728.html或者点˜q™ä¸ªé“¾æŽ¥åQ?br />
http://www.aygfsteel.com/Wingel/category/17919.html



]]>
åQˆåŽŸåˆ›ç¿»è¯‘ï¼‰ 敏捷开发的必要技å·?åQšæ…Žç”¨ç‘ôæ‰?/title><link>http://www.aygfsteel.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://www.aygfsteel.com/Wingel/archive/2006/11/29/84419.html</guid><wfw:comment>http://www.aygfsteel.com/Wingel/comments/84419.html</wfw:comment><comments>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84419.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Wingel/comments/commentRss/84419.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Wingel/services/trackbacks/84419.html</trackback:ping><description><![CDATA[     摘要: 当我们要¾l§æ‰¿ä¸€ä¸ªçˆ¶¾cÀL—¶åQŒæˆ‘们要保证父类里面所有了publicæ–ÒŽ³•都是子类惌™¦çš„,它不应该åŽÈ‘ô承一些它不用的功能ã€?nbsp; <a href='http://www.aygfsteel.com/Wingel/archive/2006/11/29/84419.html'>阅读全文</a><img src ="http://www.aygfsteel.com/Wingel/aggbug/84419.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Wingel/" target="_blank">Wingel</a> 2006-11-29 20:40 <a href="http://www.aygfsteel.com/Wingel/archive/2006/11/29/84419.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]GWT,YUI,dojo,jQuery中挑了jQueryhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84300.htmlWingelWingelWed, 29 Nov 2006 03:21:00 GMThttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84300.htmlhttp://www.aygfsteel.com/Wingel/comments/84300.htmlhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84300.html#Feedback0http://www.aygfsteel.com/Wingel/comments/commentRss/84300.htmlhttp://www.aygfsteel.com/Wingel/services/trackbacks/84300.html  仔细回想了这四个框架åQŒæƒ³æƒŒ™‡ªå·×ƒØ“什么会选中jQuery。才发现åQŒå› ä¸ºjQuery的源代码是最½Ž€‹zçš„åQŒç»“构上也是最å®ÒŽ˜“全部掌握了,写JavaScript代码的时候,æ€ÀL˜¯å¸Œæœ›æ‰€æœ‰çš„代码都是在自å·Þqš„æ‰‹é‡Œé¢æŽ§åˆ¶çš„åQŒè¿™¿Uæƒ³æ³•,跟一òq´å‰çš„æƒ³æ³•ä¸€æ¨¡ä¸€æ øP¼Œå½“æ—¶AJAX刚火的时候,也想去试一些开源的框架åQŒä½†ç”¨äº†ä¸€ŒD‰|—¶é—´ä»¥åŽï¼Œž®±æ”¾å¼ƒäº†åQŒå…¨éƒ¨ä‹É用了自己设计的框æžÓž¼Œå› äؓ框架掌握在自己手里面åQŒèˆ’坦ã€?br />  JavaScript库丰富固然好åQŒä½†æ˜¯è¶Šä¸°å¯ŒåQŒè‡ªå·±å°±­‘Šä¸äº†è§£å…¨éƒ¨å±‚次åQŒå†…心就­‘Šä¸å®‰ã€‚不懂这是不是大多数人的通病。可是仔¾l†æƒ³æƒ»I¼Œä¸ÞZ»€ä¹ˆJava的开源库用得˜q™ä¹ˆè‡ªåœ¨åQŒäؓ什么JavaScript的就自在不è“v来呢ã€?nbsp;
文章来源:http://blog.csdn.net/Wingel/archive/2006/11/26/1414843.aspx

]]>
[导入]validate for jqueryhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84299.htmlWingelWingelWed, 29 Nov 2006 03:21:00 GMThttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84299.htmlhttp://www.aygfsteel.com/Wingel/comments/84299.htmlhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84299.html#Feedback0http://www.aygfsteel.com/Wingel/comments/commentRss/84299.htmlhttp://www.aygfsteel.com/Wingel/services/trackbacks/84299.html目前jQuery¾|‘站上已¾læœ‰äº†From的验证框æžÓž¼ŒFromValidationåQŒä½†æ˜¯ä¸€ç›´è§‰å¾—å®ƒçš„æ¡†æž¶åÆˆä¸å¥½ç”¨ï¼Œå› äØ“é‡å¤å†™çš„ä¸œè¥¿å¤ªå¤šäº†ã€?br />于是ž®±å†‹Æ¡å†™äº†è‡ªå·Þqš„JavaScript验证框架åQŒå®Œå…¨åºŸå¼ƒæŽ‰ä»¥å‰çš„ã€?br />在新的框架下åQŒæ˜¯ä»¥è¿™æ ·å­çš„用法设计的åQ?br />首先åQŒè¦åŒ…括自己的jsæ–‡äšgåQˆè¿™ç‚¹ä¸å¿…说åQ‰ï¼Œè€Œä¸”在包括自己写åQŒè¦å…ˆåŒ…括jQuery的,如下

<link rel="stylesheet" type="text/css" href="<ww:url value="/layout/css/style.css"/>">
<link rel="stylesheet" type="text/css" href="<ww:url value="/layout/css/thickbox.css"/>" media="screen">
<script type="text/javascript" src="<ww:url value="/layout/js/jquery-latest.js"/>"></script>
<script type="text/javascript" src="<ww:url value="/layout/js/thickbox.js"/>"></script>
<script type="text/javascript" src="<ww:url value="/layout/js/wingel.js"/>"></script>
<decorator:head/>


然后在要验证的Form里面加个属性validatable=true,如下åQ?br />

<form id="registerForm" action="user-register.action" validatable="true">

注意åQŒè¿™è¾¹ä¸è¦åŠ onsubmitæ–ÒŽ³•

接下来,ž®±å¥½äº†ï¼Œæ¯”如说有个输入框åQ?br /><ww:textfield name="name" id="name"/>
我想验证åQŒè®©å®ƒå¿…填,如下ž®±å¯ä»¥äº†åQ?br /><label for="name" validate="required">请填写名¿U?lt;/label>  其中 for属性里面填的要是验证的输入框idåQŒvalidate填的是验证方æ³?;label里面的文本就是验证不˜q‡çš„æ—¶å€™è¦æ˜„¡¤ºçš„信息ã€?br />如果我想验证一个输入框的输入值长度怎么办,˜q™æ ·å­å°±è¡Œäº†

<label for="password" validate="lengthRange:6;20">

后面的参数用åQ›å·éš”å¼€åQŒéªŒè¯çš„æ–ÒŽ³•名跟参数ç”? 隔开ã€?br />wingel.js里面已经包括了一些常用的验证æ–ÒŽ³•åQŒçŽ°åœ¨é—®é¢˜æ¥äº†ï¼Œå¦‚æžœè¦è‡ªå®šä¹‰éªŒè¯æ–ÒŽ³•怎么办,如下办:
比如你想加个验证æ–ÒŽ³•是hello
则label里面的validate属性写成hello,
然后加一个JavaScriptæ–ÒŽ³•åQ?br />

<script type="text/javascript">
    wingel.validator.rules.hello
= function(value, element, parameters,utility) {
             ...    }

</script>


里面三个参数,shit , couldn't input Chinese. now English will be used.

The first parameter is the value of the input element you want to validate,the second one is the validated element, the third one, is the parameters you add in validate label, the last one, is a utility class, you can invoke its method to make your code easier.






 
文章来源:http://blog.csdn.net/Wingel/archive/2006/11/26/1414856.aspx

]]>
[导入]2005òq´Java技术记å½?/title><link>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84298.html</link><dc:creator>Wingel</dc:creator><author>Wingel</author><pubDate>Wed, 29 Nov 2006 03:21:00 GMT</pubDate><guid>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84298.html</guid><wfw:comment>http://www.aygfsteel.com/Wingel/comments/84298.html</wfw:comment><comments>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84298.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Wingel/comments/commentRss/84298.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Wingel/services/trackbacks/84298.html</trackback:ping><description><![CDATA[<p>HTML解析:Use javax.swing.text.html package, especially HTMLEditorKit.ParserCallback class.</p> <p>菜单生成:struts-menu,˜q˜æœ‰è‡ªå·±åšçš„JavaScript控äšg.</p> <p>¾lŸè®¡å›?jfreechart</p> <p>MVC框架:Mytapestry(每次改个界面都要重启服务å™?,Webwork,Struts</p> <p>持久å±?hibernate,ibats</p> <p>XML解析:dom4j比较易用,臛_°‘代码可以比较½Ž€‹z?但是如果要在里面传输二进制文件的è¯?ž®±æ¯”较麻烦了.¾|‘上有两¿Uæ–¹æ¡?一¿Uæ˜¯ž®†äºŒ˜q›åˆ¶‹¹ç”¨BASE64¾~–码成字½W¦ä¸²,或者在MINI头里面传é€?后者这方式我还不懂要怎么å¼?前者那æ ïLš„è¯?除了用Base64以外,直接用十六进制è{字符串会更快,不过安全嘛~</p> <p>日记功能:log4j,其实Java关于日记功能的好像就æœ?¿UåŒ…,但是好像˜q™ä¸ªæ¯”较好用.å¦å¤–å»ø™®®ç›´æŽ¥ç”¨Logger.getLogger()生成log¾c?</p> <p>ajax:dwr可以利用JavaScript讉K—®Java¾c?它会自己ž®†Javaæ–ÒŽ³•˜q”回的类序列åŒ?转换成JavaScript变量;dojo则是有很多特æ•?/p> <p>Web service:axis çš„Web service不错,不过如果排除那些规范的话,自己做一个轻量的会更实在</p> <p>工作‹¹?目前ž®šæ²¡æœ‰äº†è§£å“ª™å¹å¼€æºçš„,但是一直想了解</p> <p>XMLž®è£…:SOAPž®±æ˜¯XML的一¿Uåè®?而且利用J2EE提供的api,可以很方便的操作附äšg,再è€?臛_°‘规范的Web servicež®±æ˜¯ç”¨SOAP传递消息的.</p> <p>惌™¦ç”¨æ¨¡æ¿çš„è¯?Velocity,至于不明白什么时候用到这¿Uæƒ…å†ëŠš„è¯?可以参考一ä¸?a >www.blogcn.com</a>中的模板更改ž®ÞqŸ¥é“了</p> <p>全文搜烦:lucene,它会把关键字索引存在文äšgä¸?而不是数据库,不过æƒÏxƒ³æ•°æ®åº“不也是把数据存在文件中çš?lucene的速度比较å¿?而且易用.åˆšå¼€å§‹ä¹Ÿä¸æ˜Žç™½äØ“ä»€ä¹ˆlucene会那么快,后面了解到是个博士做的这个开源包,呵呵,看来人家是有很精æ·Þqš„½Ž—法.</p> <p>hibernateçš„session½Ž¡ç†:利用¾U¿ç¨‹ID的帮助来½Ž¡ç†è¯¥çº¿½E‹çš„Session,好像大家现在也都是这样子çš?</p> <p>事务½Ž¡ç†:spring有一™å¹å¥½å¤„就是这个了.而且听说它的JTA½Ž¡ç†ä¹Ÿå¾ˆä¸é”™</p> <p>业务层和DAO层的bean½Ž¡ç†:spring很好ç”?不过ž®±æ˜¯æ¯ä¸ªBean都要写在配置文äšgä¸?当然,有äh喜欢,有äh不喜‹Æ?,如果不想写配¾|®æ–‡ä»¶ä¸­çš„话,ž®Þp‡ªå·±å†™å·¥åŽ‚½Ž¡ç†Beanå?我相信会比spring快一ç‚?但是spring写在配置中这æ ähœ‰ç‚¹å¥½å¤„å°±æ˜?如果你想把某个接口的实现¾cÀL¢æŽ‰çš„è¯?改一下配¾|®æ–‡ä»¶å°±å¯ä»¥äº?</p> <p>动态bean½Ž¡ç†:JMX,其实自己也可以写½E‹åºæ¥ç®¡ç†å†…存中的bean或者把bean属性放在配¾|®æ–‡ä»‰™‡Œé¢çš„,JMXž®±æ˜¯å¤šåŠ äº†ä¸€å±‚è§„èŒ?Jbossçš„JMX机制很方ä¾?真的ž®±å«çƒ­æ’拔了.</p> <p>消息机制½Ž¡ç†:JMS,˜q™é¡¹æˆ‘也只是看了些例子而已,˜q˜æ²¡åœ¨é¡¹ç›®ä¸­åº”用˜q?</p> <p>ä»ÕdŠ¡è°ƒæŽ§:quartz,不明白什么是ä»ÕdŠ¡è°ƒæŽ§å?你想一æƒ?比如你想在每天的某一个时间执行一些操ä½?比如定时更新数据库中的某些数据啦.当然数据库系¾lŸä¹Ÿæœ‰è¿™¿UåŠŸèƒ?但是如果想用½E‹åºæ¥æŽ§åˆ¶çš„è¯?ž®Þq”¨å®ƒå§.不好的地方就是文档太ž®‘了,上回ä¸ÞZº†æžæ˜Žç™½å®ƒæ€Žä¹ˆç”¨çš„,源代码就¾˜ÖMº†å¥½ä¹….</p> <p>重量¾U§çš„东西:EJB,˜q™ä¸ªå˜?å—?...............................电信金融行业的可能觉得这东西很重è¦?不过我们å˜?ž®×ƒ¸è¯´è¿™ä¸œè¥¿äº?没有发言æ?</p> <p>现在的框枉™ƒ½æœ‰ä¸€ä¸ªç†å¿?那就是可配置,ä»ÖM½•东西都要可配¾|®çš„.struts的配¾|®å•¦,hibernate的配¾|®å•¦,spring的配¾|®å•¦,ibats的配¾|®å•¦.但是有个有东西冒出来äº?rails on ruby,它有个理å¿?ž®±æ˜¯"习惯优于配置",你不明白å?æƒÏxƒ³,自己最好什么东襉Kƒ½ä¸ç”¨é…ç½®,一切根据用æˆïLš„习惯定制å¥?当然,˜q™æ ·å¯¹äºŽå¼€å‘是非常方便çš?而第二个方便的地æ–?ž®±æ˜¯ä»£ç è‡ªåŠ¨ç”Ÿæˆ(è„‘æ“v里突然想èµ?netäº?!</p> <p>说到代码自动生成的话,提一个xdoclet:要用˜q™ä¸ªçš„话,得先了解一下ant,xdoclet是个很有用的东西.不过我比较俗,我就是用它生成一个业务层或DAO的实现类和接口类代码.如果Java惌™¦æœ‰è·ŸRails on ruby一æ ïLš„东西的话,一定要用到xdoclet来了</p> <p>其实现在也有一个框æž?它号¿U°æ˜¯Java中的Rails on Ruby,那就是JdonFrameworkäº?上回看了çœ?没啥感觉,没有Rails on Ruby¾l™çš„震憾å¤?/p> <p>验证码的生成:ž®±æ˜¯åœ¨è¾“入页面A中嵌入一个生成验证码的页面B,B里面有Java代码,生成随机字符ä¸?再把字符串存入Sessionä¸?</p> <p>Oracle:一直识别不了本地服务。后面才发现åQŒæ˜¯tnsnames.ora˜q™ä¸ªæ–‡äšg中,有的版本不支持SERVER_NAMEåQŒè€Œåªæ˜¯æ”¯æŒSERVERã€?/p> <p>有想˜q‡è®¿é—®dllæ–‡äšgå?有个东西叫JDI,步骤éºÈƒ¦äº†ç‚¹çš„东è¥?/p> <p>处理囄¡‰‡:sun公司有个开源èÊYä»¶jimi,是个不错的东è¥?处理囄¡‰‡çš„开源包有很多种,æˆ‘é‚£æ—¶å€™äØ“ä»€ä¹ˆé€‰äº†jimi也忘äº?好像是因为格式支不支持的原因å?</p><img src ="http://blog.csdn.net/Wingel/aggbug/756682.aspx" width = "1" height = "1" /><br>文章来源:<a >http://blog.csdn.net/Wingel/archive/2006/05/26/756682.aspx</a><img src ="http://www.aygfsteel.com/Wingel/aggbug/84298.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Wingel/" target="_blank">Wingel</a> 2006-11-29 11:21 <a href="http://www.aygfsteel.com/Wingel/archive/2006/11/29/84298.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]transaction in Springhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84297.htmlWingelWingelWed, 29 Nov 2006 03:21:00 GMThttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84297.htmlhttp://www.aygfsteel.com/Wingel/comments/84297.htmlhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84297.html#Feedback0http://www.aygfsteel.com/Wingel/comments/commentRss/84297.htmlhttp://www.aygfsteel.com/Wingel/services/trackbacks/84297.htmlPropagation behavior:

PROPAGATION_MANDATORY:
 Indicates that the method must run within a transaction. If no
 existing transaction is in progress, an exception will be thrown.


PROPAGATION_NESTED:
 Indicates that the method should be run within a nested transaction
 if an existing transaction is in progress. The nested transaction
 can be committed and rolled back individually from the enclosing
 transaction. If no enclosing transaction exists, behaves like
PROPAGATION_REQUIRED:
 Beware that vendor support for this propagation behavior is spotty at best.
 Consult the documentation for your resource  manager to determine if nested
 transactions are supported.
PROPAGATION_NEVER:
 Indicates that the current method should not run within a transactional
 context. If there is an existing transaction in progress, an
 exception will be thrown.
PROPAGATION_NOT_SUPPORTED:
 Indicates that the method should not run within a transaction. If an
 existing transaction is in progress, it will be suspended for the
 duration of the method. If using JTATransactionManager,
 access to TransactionManager is required.
PROPAGATION_REQUIRED:
 Indicates that the current method must run within a transaction. If
 an existing transaction is in progress, the method will run within
 that transaction. Otherwise, a new transaction will be started.
PROPAGATION_REQUIRES_NEW:
 Indicates that the current method must run within its own transaction.
 A new transaction is started and if an existing transaction is in
 progress, it will be suspended for the duration of the method. If
 using JTATransactionManager, access to Transaction-
 Manager is required.
PROPAGATION_SUPPORTS:
 Indicates that the current method does not require a transactional
 context, but may run within a transaction if one is already in
 progress.


Isolation levels:
In a typical application, multiple transactions run concurrently, often working
with the same data to get their job done. Concurrency, while necessary, can lead
to the following problems:
 â–?Dirty read—Dirty reads occur when one transaction reads data that has
 been written but not yet committed by another transaction. If the
 changes are later rolled back, the data obtained by the first transaction
 will be invalid.
 â–?Nonrepeatable read—Nonrepeatable reads happen when a transaction performs
 the same query two or more times and each time the data is different.
 This is usually due to another concurrent transaction updating the
 data between the queries.
 â–?Phantom reads—Phantom reads are similar to nonrepeatable reads. These
 occur when a transaction (T1) reads several rows, then a concurrent transaction
 (T2) inserts rows. Upon subsequent queries, the first transaction
 (T1) finds additional rows that were not there before.


Isolation level:
ISOLATION_DEFAULT:
 Use the default isolation level of the underlying datastore.
ISOLATION_READ_UNCOMMITTED:
 Allows you to read changes that have not yet been committed. May
 result in dirty reads, phantom reads, and nonrepeatable reads.
ISOLATION_READ_COMMITTED:
 Allows reads from concurrent transactions that have been committed.
 Dirty reads are prevented, but phantom and nonrepeatable
 reads may still occur.
ISOLATION_REPEATABLE_READ:
 Multiple reads of the same field will yield the same results, unless
 changed by the transaction itself. Dirty reads and nonrepeatable
 reads are prevented by phantom reads may still occur.
ISOLATION_SERIALIZABLE:
 This fully ACID-compliant isolation level ensures that dirty reads,
 nonrepeatable reads, and phantom reads are all prevented. This is
 the slowest of all isolation levels because it is typically accomplished
 by doing full table locks on the tables involved in the transaction. 


文章来源:http://blog.csdn.net/Wingel/archive/2006/11/26/1414826.aspx

]]>
[导入]转到hibernate annotationhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84296.htmlWingelWingelWed, 29 Nov 2006 03:21:00 GMThttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84296.htmlhttp://www.aygfsteel.com/Wingel/comments/84296.htmlhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84296.html#Feedback0http://www.aygfsteel.com/Wingel/comments/commentRss/84296.htmlhttp://www.aygfsteel.com/Wingel/services/trackbacks/84296.html以前的版本是webwork2.2+spring m4+hibernate3.1�
有一回在¾|‘上看到hibernate3.2的发布了. 一直都觉得写hibernate的映ž®„文件是一件苦力活,于是ž®±å†³å®šç”¨ä¸€ä¸‹hibernateçš„annotation.
升çñ”的时å€?˜q˜çœŸæ˜¯å‡ºäº†ä¸€å †çš„问题.
要嘛是ecache的问é¢?要嘛又是hibernateçš„second level cache的问é¢?用了spring自带的hibernate包有问题,但用了hibernate¾|‘站上下载的包又有问é¢?
最å?去spring下了最新的发布版本,又用了hibernateçš?.2GAç‰?¾lˆäºŽ,问题解决äº?反正都升¾U§äº†ä¸€éƒ¨åˆ†äº?后面军_®š,ž®†webwork也升¾U§åˆ°äº†æœ€æ–°ç‰ˆæœ?.24,
然后ž®†ä»¥å‰å†™çš„自定义标签再升¾U§ä¸€ä¸?也像webwork一æ äh”¹ç”¨freemarker做模æ?
于是手头上一个在webwork+spring+hibernate的最新开发框架出炉了.
军_®š,接下来的两个™å¹ç›®ž®Þq”¨˜q™ä¸ªæ¡†æž¶.



 
文章来源:http://blog.csdn.net/Wingel/archive/2006/11/26/1414831.aspx

]]>
[导入]çœ?net下的monorailshttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84295.htmlWingelWingelWed, 29 Nov 2006 03:21:00 GMThttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84295.htmlhttp://www.aygfsteel.com/Wingel/comments/84295.htmlhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84295.html#Feedback0http://www.aygfsteel.com/Wingel/comments/commentRss/84295.htmlhttp://www.aygfsteel.com/Wingel/services/trackbacks/84295.html    上回有一ŒD‰|—¶é—?做了ä¸?net的项ç›? 于是ž®×ƒ¸Š¾|‘查了一äº?net的开源框æž?发现很多都是Java下的开源框架改写的。而正如spring在Java语言的地位,.net下比较火的开源框架蛮多是Castle出的。看了一个叫MonoRailsçš„MVC框架åQŒæ˜¯ä»ŽROR下吸收了一些思想。大致看了一下,发现˜q˜æ˜¯æœ‰å¾ˆå¤šç‰¹æ€§æ˜¯æ¯”较好的ã€?br />    于是有感而发åQŒå°±åœ¨Java下也做了一个类似MonoRails的框æžÓž¼Œå¤§è‡´æ˜¯å…·æœ‰äº†ä»¥ä¸‹çš„一些特性:
    Webworkçš„Interceptor机制ã€?br />    å…ähœ‰IOCåQŒç”¨Setter的注ž®„法åQŒä¸ç”¨é…¾|®æ–‡ä»Óž¼ŒåŠ annotation卛_¯
    而比较主要的ž®±æ˜¯åQŒä¸€‹Æ¡è¯·æ±‚çš„‹¹ç¨‹æ˜¯ï¼Œservlet自动æ ÒŽ®è¯äh±‚å¯ÀL‰¾ä»¥åå­—匹配的Modelå’ŒControlåQŒå°†å‚数和值注入Model中,转到ControlåŽÕd¤„理,再根据Control的结果去扄¡›¸åº”çš„™åµé¢ã€‚而这里有些是从MonoRails学来的特性:¾~ºçœçš„,™åµé¢çš„æ–‡ä»¶åž®±æ˜¯Control中的æ–ÒŽ³•名,™åµé¢æ‰€åœ¨çš„æ–‡äšg夹就是Control的类名。这样就省了很多配置和写跌™{¾l“果的代码ã€?br />    如果url中请求的æ–ÒŽ³•名在˜q™ä¸ªControl中不存在的话åQŒå°±¾lè¿‡interceptor后直接去æ‰ùN¡µé¢ï¼Œä¹Ÿå°±æ˜¯è¯´åQŒä¸¾lè¿‡Control处理了ã€?br />    ˜q˜æœ‰ä¸€ç‚¹ï¼Œå¾ˆçˆ½çš„就是Layout的功能:在Control里面的方法加个AnnotationåQŒLayoutåQŒLayout写上™åµé¢æ¡†æž¶çš„æ–‡ä»¶ååQŒåˆ™æ¯ä¸ªè·Œ™{出来的页面,自动内嵌到页面框架中。这点就有点¾cÖM¼¼sitemesh了ã€?br />    ˜q™ä¸ªMVC框架做完后,大致ž®Þp¿™äº›åŠŸèƒ½ã€‚å¯æƒœï¼Œ˜q™ä¸ªæ¡†æž¶ž®±æ˜¯ä¸€ä¸ªè‡ªå·±å†™ç€å¥½çŽ©çš„æ¡†æžÓž¼Œòq¶æ²¡æœ‰ç”¨åœ¨å®žé™…的开发项目中åQŒå¦‚果有æœÞZ¼šçš„话åQŒè¿˜çœŸå¸Œæœ›å°†˜q™ä¸ªæ¡†æž¶åšå®Œæ•ß_¼Œåˆ°ç½‘上开源ã€?/p>

   

 
文章来源:http://blog.csdn.net/Wingel/archive/2006/11/26/1414832.aspx

]]>
技术讲座-åQAnnotation的应ç”?/title><link>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84294.html</link><dc:creator>Wingel</dc:creator><author>Wingel</author><pubDate>Wed, 29 Nov 2006 03:21:00 GMT</pubDate><guid>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84294.html</guid><wfw:comment>http://www.aygfsteel.com/Wingel/comments/84294.html</wfw:comment><comments>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84294.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Wingel/comments/commentRss/84294.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Wingel/services/trackbacks/84294.html</trackback:ping><description><![CDATA[ã€€ã€€åº”ä¸Šå›žå‡ ä½åŒäº‹çš„å»ø™®®åQŒå†³å®šåœ¨˜q™å‘¨çš„æŠ€æœ¯è®²åº§ä¸Šè®²ä¸€ä¸‹javaçš„annotation的用法。前面讲了annotationå’Œinterface,abstract的区别,以及各自的优¾~ºç‚¹åQŒåŽæ¥å°±åªè®²annotation的用法了åQŒè®²åˆ°annotation可以攑֜¨åQ“个地方åQŒç±»åQŒå±žæ€§å’Œæ–ÒŽ³•åQŒç„¶åŽé¡ºä¾¿æäº†ä¸€ä¸‹è¯´åQŒå¯ä»¥è®¾è®¡è¿™æ ·ä¸€ä¸ªæ¡†æžÓž¼Œåœ¨å±žæ€§ä¸ŠåŠ ä¸€ä¸ªannotationåQŒå°±å¯ä»¥å®žçŽ°éªŒè¯çš„åŠŸèƒ½ã€?br /><!---->  有一位同事听了,当场ž®±æå‡ø™¯´åQŒå¯ä¸å¯ä»¥å†™ä¸ªä¾‹å­æ¥çœ‹çœ‹åQŒæ€Žä¹ˆå®žçް˜q™ä¸ªéªŒè¯ã€?br /><!---->  ˜q™å€’也难不倒我åQŒèµ«æ‹‰èµ«æ‹‰ï¼Œå½“场ž®±å¼€å§‹å†™åQŒï¼’åQå¤šåˆ†é’ŸåŽï¼Œ˜q™ä¸ª¾_—ç•¥çš„ç»“æž„å°±å‡ºæ¥äº†ï¼Œå› äØ“ä»¥å‰æ²¡è¯•˜q‡åœ¨å±žæ€§é‡Œé¢åŠ annotationåQŒç»“果竟然发çŽîC¸çŸ¥é“怎么取出属性的annotationåQŒç”¨java.beans˜q™ä¸ªåŒ…,竟然取不出annotaionåQŒç”¨java.lang.reflect里面的field可以取出annotationåQŒå¯æ˜¯å´ä¸çŸ¥é“怎么取java bean的标准属性ã€?br /><!---->最后没办法åQŒè®²åº§ä¸Šæ²¡æ—¶é—´ç ”½IÓž¼Œž®±å†³å®šæŠŠéªŒè¯çš„annotation加到每个属性的getteræ–ÒŽ³•里面ã€?br /><!---->  ˜q™æ¬¡çš„讲座讲得倒也½Ž—不错,赞自å·×ƒ¸€ä¸ªã€?br /><!---->    <img src="http://blog.csdn.net/Wingel/aggbug/1414833.aspx" height="1" width="1" /><br />文章来源:<a >http://blog.csdn.net/Wingel/archive/2006/11/26/1414833.aspx</a><img src ="http://www.aygfsteel.com/Wingel/aggbug/84294.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Wingel/" target="_blank">Wingel</a> 2006-11-29 11:21 <a href="http://www.aygfsteel.com/Wingel/archive/2006/11/29/84294.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>又遇hibernateçš„cache问题http://www.aygfsteel.com/Wingel/archive/2006/11/29/84293.htmlWingelWingelWed, 29 Nov 2006 03:21:00 GMThttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84293.htmlhttp://www.aygfsteel.com/Wingel/comments/84293.htmlhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84293.html#Feedback0http://www.aygfsteel.com/Wingel/comments/commentRss/84293.htmlhttp://www.aygfsteel.com/Wingel/services/trackbacks/84293.htmlã€€ã€€å› äØ“æ¯æ¬¡è°ƒè¯•çš„æ—¶å€™ï¼Œéƒ½ä¼šé‡å¯ä¸€ä¸‹Web服务器,所以都忽略了Cache的问题。看来,˜q˜æ˜¯è¦æ³¨æ„ä¸€ä¸‹åºåˆ—化到磁盘中的cache数据的ã€?img src="http://blog.csdn.net/Wingel/aggbug/1414834.aspx" height="1" width="1" />
文章来源:http://blog.csdn.net/Wingel/archive/2006/11/26/1414834.aspx

]]>
利用spring RC3çš„aspectJhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84292.htmlWingelWingelWed, 29 Nov 2006 03:21:00 GMThttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84292.htmlhttp://www.aygfsteel.com/Wingel/comments/84292.htmlhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84292.html#Feedback0http://www.aygfsteel.com/Wingel/comments/commentRss/84292.htmlhttp://www.aygfsteel.com/Wingel/services/trackbacks/84292.html后来实在受不了这些冗余的代码了,写代码的时候有时候又可能会把spring的对象跟非spring的对象顺序弄ä¹×ƒº†åQŒè®©ä»£ç ¾l“构不清晎ͼŒåœ¨springåQ’的介绍中,听说它连new出来的对象都可以½Ž¡ç†åQŒä¾¿åŽÖM¸‹äº†spring rc3来,布çÖv到项目中ã€?br />  研究了半天,才发现其实是很容易的事,可怜我们看文档看了半天ã€?br />åQ‘。虚拟机加个参数åQ?javaagent:lib/aspectjweaver.jaråQˆåŽé¢æ˜¯spring带的aspectjweaver.jarçš„èµ\径)
åQ’。在spring配置文äšg里面加:    <aop:spring-configured/>
åQ“。在要被½Ž¡ç†çš„类中加上annotation:@Configurable(autowire = Autowire.BY_TYPE) autowire应该不用说了。 Â?img src="http://blog.csdn.net/Wingel/aggbug/1414836.aspx" height="1" width="1" />
文章来源:http://blog.csdn.net/Wingel/archive/2006/11/26/1414836.aspx

]]>
用枚丑ցšå­—å…¸http://www.aygfsteel.com/Wingel/archive/2006/11/29/84291.htmlWingelWingelWed, 29 Nov 2006 03:21:00 GMThttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84291.htmlhttp://www.aygfsteel.com/Wingel/comments/84291.htmlhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84291.html#Feedback0http://www.aygfsteel.com/Wingel/comments/commentRss/84291.htmlhttp://www.aygfsteel.com/Wingel/services/trackbacks/84291.html  我们一般项目中åQŒéƒ½æ˜¯æŠŠå­—典存到数据库中的。几个月前在做一个政府的™å¹ç›®ä¸­ï¼Œè§‰å¾—其实一些字典是跟开发工½E‹ç´§å¯†ç»“合在一èµïLš„åQŒä¹Ÿž®±æ˜¯è¯´å­—典变了,工程肯定也要变,˜q™æ ·å­çš„字典如果也存到数据库中的话,也是多增加一些麻烦而已åQŒåŽæ¥ä½†ž®†è¿™äº›å­—典写成枚举。然后数据库里面取的所谓的字典的keyž®±æ˜¯æžšä‹Dçš„nameåQŒå¦‚åQ?unsubmited"åQŒè€Œå‰å°é¡µé¢æ˜¾½Cºçš„åQŒå°±æ˜¯æžšä¸„¡š„一个属性text,不过˜q™é‡Œç”¨åˆ°äº†webwork里面的ognl语法ã€?br />

/**
 * Author: Wingel
 * Date: 2006-7-29
 * Time: 15:17:52
 
*/

public   enum  ApplicationState  {
    unsubmited(
" 未提�/span> " ),submited( " 提交/待审�/span> " ),agreed( " 通过 " ),disagreed( " 未同�/span> " );
    
private  String text;

    ApplicationState(String text) 
{
        
this .text  =  text;
    }


    
public   static  String getText(String name)  { // ¾l™é¡µé¢ç”¨çš„æ–¹æ³?/span>
         try   {
            
return  valueOf(name).text;
        }
  catch  (Exception e)  {
            
return   null ;
        }

    }


    
public  String getText()  {
        
return  text;
    }


    
public   static   boolean  isValidRegisterType(String name)  {
        
try   {
            valueOf(name);
            
return   true ;
        }
  catch  (Exception e)  {
            
return   false ;
        }

    }


    
public   static  ApplicationState[] allState()  {
        
return  ApplicationState.values();
    }


    
public  String getName()  {
        
return   this .name();
    }

}



 

文章来源:http://blog.csdn.net/Wingel/archive/2006/11/26/1414837.aspx

]]>
sitemesh让所有的img昄¡¤ºä¸æ­£å¸?/title><link>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84290.html</link><dc:creator>Wingel</dc:creator><author>Wingel</author><pubDate>Wed, 29 Nov 2006 03:21:00 GMT</pubDate><guid>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84290.html</guid><wfw:comment>http://www.aygfsteel.com/Wingel/comments/84290.html</wfw:comment><comments>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84290.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Wingel/comments/commentRss/84290.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Wingel/services/trackbacks/84290.html</trackback:ping><description><![CDATA[    sitemesh的一个问题,在web.xml中设¾|®filter的时候,让sitemesh可以˜q‡æ×o/*也就是所有的后缀名,但是在decorate.xmlæ–‡äšg里面åQŒåƈ没有¾l™sitemesh增加gif,jpg½{‰åŽ¾~€çš„patternåQŒç»“果在打开™åµé¢çš„æ—¶å€™ï¼Œå‘现所有的囑փæ–‡äšg都引用失败,用resin3的话åQŒå®ƒä¼šæŠ¥é”™è¯´error content lengthåQŒè€Œç”¨resin2或者tomcat的时候,它连报错都没有。弄了半天,都不明白是怎么回事åQŒåŽæ¥æ‰æƒ›_ˆ°æœ‰å¯èƒ½æ˜¯sitemesh的问题,修改的filter的设¾|®ï¼Œè®©å®ƒåªè¿‡æ»¤éƒ¨åˆ†åŽ¾~€åï¼Œ¾l“æžœž®±æ²¡äº‹äº†ã€?br /> <img src="http://blog.csdn.net/Wingel/aggbug/1414840.aspx" height="1" width="1" /><br />文章来源:<a >http://blog.csdn.net/Wingel/archive/2006/11/26/1414840.aspx</a><img src ="http://www.aygfsteel.com/Wingel/aggbug/84290.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Wingel/" target="_blank">Wingel</a> 2006-11-29 11:21 <a href="http://www.aygfsteel.com/Wingel/archive/2006/11/29/84290.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]早上坐èžRè·Ÿèµ°è·?/title><link>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84288.html</link><dc:creator>Wingel</dc:creator><author>Wingel</author><pubDate>Wed, 29 Nov 2006 03:20:00 GMT</pubDate><guid>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84288.html</guid><wfw:comment>http://www.aygfsteel.com/Wingel/comments/84288.html</wfw:comment><comments>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84288.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Wingel/comments/commentRss/84288.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Wingel/services/trackbacks/84288.html</trackback:ping><description><![CDATA[    åˆîCº†æ–°å…¬åæ€º†åQŒä¸Šè½¦çš„åœ°ç‚¹ä¹Ÿä¸ä¸€æ ·äº†ã€‚ä»¥å‰ç»å¸æ€¼šé™ªå¥³å‹ä¸€èµ¯‚µ°åˆ°å¥¹å…¬å¸çš„门口,把她哄进åŽÖMº†åQŒè‡ªå·±å†åŽÕdè½¦ã€‚而今åQŒå¥³å‹ç»å¸¸è¦ä¸€ä¸ªäh走到公司了,惛_ˆ°å¥›_‹è¦ä¸€ä¸ªäh走那一ŒDµèµ\åQŒç«Ÿç„¶ä¼šå¿ƒå¾ˆç–¹{€‚èµ\ž®±æ˜¯é‚£ä¹ˆä¸€ž®æ®µè·¯ï¼Œå¥¹ä¹Ÿ¾lå¸¸ä¼šæœ‰è‡ªå·±èµ°èµ\的时候,可是ž®±æ˜¯ä¼šå¿ƒç–¹{€‚唉åQŒä¹Ÿè®¸ç…§™å¾ä¸€ä¸ªäh久了åQŒå½“有一天看到没有你照顾的她æ—Óž¼Œä¸åªå¥¹ä¼šè§‰å¾—隑֏—åQŒä½ ä¹Ÿä¼šå¿ƒç–¼çš„ã€?br /> <img src ="http://blog.csdn.net/Wingel/aggbug/1414820.aspx" width = "1" height = "1" /><br>文章来源:<a >http://blog.csdn.net/Wingel/archive/2006/11/26/1414820.aspx</a><img src ="http://www.aygfsteel.com/Wingel/aggbug/84288.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Wingel/" target="_blank">Wingel</a> 2006-11-29 11:20 <a href="http://www.aygfsteel.com/Wingel/archive/2006/11/29/84288.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]又一‹Æ¡é‡å¤§å¤±è¯?/title><link>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84287.html</link><dc:creator>Wingel</dc:creator><author>Wingel</author><pubDate>Wed, 29 Nov 2006 03:20:00 GMT</pubDate><guid>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84287.html</guid><wfw:comment>http://www.aygfsteel.com/Wingel/comments/84287.html</wfw:comment><comments>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84287.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Wingel/comments/commentRss/84287.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Wingel/services/trackbacks/84287.html</trackback:ping><description><![CDATA[有一位好朋友,告诉我一件事æƒ?然后½Hç„¶è·Ÿæˆ‘è¯?你可不要跟你老婆讲哦,我一æƒ?˜q™ä¹Ÿæ˜¯ä¸€ä»¶æŒºä¸‰å…«çš„事æƒ?不讲ž®×ƒ¸è®²äº†,于是ž®Þp¯´å¥?然后真的ž®±æ²¡æœ‰è®²äº?<br />后来老婆知道了这件事情后,å¯ÒŽˆ‘大发雷霆,说我们俩äºÞZ¹‹é—´æ€Žä¹ˆå¯ä»¥æœ‰äº‹æƒ…不说呢.<br />我刚开始还没什么觉æ‚?后来被老婆的一番教å¯?又一番教å¯?再一番教å¯?˜q™æ ·å¾ªçޝ䏀ç™ùNå•Šä¸€ç™ùN.<br />æˆ?¾lˆäºŽ,<br />觉悟äº?深深的意识到自己的错è¯?所以我在这è¾ÒŽ£€è®?我以后再不做˜q™ç§äº‹æƒ…äº? <img src ="http://blog.csdn.net/Wingel/aggbug/1414821.aspx" width = "1" height = "1" /><br>文章来源:<a >http://blog.csdn.net/Wingel/archive/2006/11/26/1414821.aspx</a><img src ="http://www.aygfsteel.com/Wingel/aggbug/84287.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Wingel/" target="_blank">Wingel</a> 2006-11-29 11:20 <a href="http://www.aygfsteel.com/Wingel/archive/2006/11/29/84287.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]çœ?net下的monorailshttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84285.htmlWingelWingelWed, 29 Nov 2006 03:20:00 GMThttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84285.htmlhttp://www.aygfsteel.com/Wingel/comments/84285.htmlhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84285.html#Feedback0http://www.aygfsteel.com/Wingel/comments/commentRss/84285.htmlhttp://www.aygfsteel.com/Wingel/services/trackbacks/84285.html    上回有一ŒD‰|—¶é—?做了ä¸?net的项ç›? 于是ž®×ƒ¸Š¾|‘查了一äº?net的开源框æž?发现很多都是Java下的开源框架改写的。而正如spring在Java语言的地位,.net下比较火的开源框架蛮多是Castle出的。看了一个叫MonoRailsçš„MVC框架åQŒæ˜¯ä»ŽROR下吸收了一些思想。大致看了一下,发现˜q˜æ˜¯æœ‰å¾ˆå¤šç‰¹æ€§æ˜¯æ¯”较好的ã€?br />    于是有感而发åQŒå°±åœ¨Java下也做了一个类似MonoRails的框æžÓž¼Œå¤§è‡´æ˜¯å…·æœ‰äº†ä»¥ä¸‹çš„一些特性:
    Webworkçš„Interceptor机制ã€?br />    å…ähœ‰IOCåQŒç”¨Setter的注ž®„法åQŒä¸ç”¨é…¾|®æ–‡ä»Óž¼ŒåŠ annotation卛_¯
    而比较主要的ž®±æ˜¯åQŒä¸€‹Æ¡è¯·æ±‚çš„‹¹ç¨‹æ˜¯ï¼Œservlet自动æ ÒŽ®è¯äh±‚å¯ÀL‰¾ä»¥åå­—匹配的Modelå’ŒControlåQŒå°†å‚数和值注入Model中,转到ControlåŽÕd¤„理,再根据Control的结果去扄¡›¸åº”çš„™åµé¢ã€‚而这里有些是从MonoRails学来的特性:¾~ºçœçš„,™åµé¢çš„æ–‡ä»¶åž®±æ˜¯Control中的æ–ÒŽ³•名,™åµé¢æ‰€åœ¨çš„æ–‡äšg夹就是Control的类名。这样就省了很多配置和写跌™{¾l“果的代码ã€?br />    如果url中请求的æ–ÒŽ³•名在˜q™ä¸ªControl中不存在的话åQŒå°±¾lè¿‡interceptor后直接去æ‰ùN¡µé¢ï¼Œä¹Ÿå°±æ˜¯è¯´åQŒä¸¾lè¿‡Control处理了ã€?br />    ˜q˜æœ‰ä¸€ç‚¹ï¼Œå¾ˆçˆ½çš„就是Layout的功能:在Control里面的方法加个AnnotationåQŒLayoutåQŒLayout写上™åµé¢æ¡†æž¶çš„æ–‡ä»¶ååQŒåˆ™æ¯ä¸ªè·Œ™{出来的页面,自动内嵌到页面框架中。这点就有点¾cÖM¼¼sitemesh了ã€?br />    ˜q™ä¸ªMVC框架做完后,大致ž®Þp¿™äº›åŠŸèƒ½ã€‚å¯æƒœï¼Œ˜q™ä¸ªæ¡†æž¶ž®±æ˜¯ä¸€ä¸ªè‡ªå·±å†™ç€å¥½çŽ©çš„æ¡†æžÓž¼Œòq¶æ²¡æœ‰ç”¨åœ¨å®žé™…的开发项目中åQŒå¦‚果有æœÞZ¼šçš„话åQŒè¿˜çœŸå¸Œæœ›å°†˜q™ä¸ªæ¡†æž¶åšå®Œæ•ß_¼Œåˆ°ç½‘上开源ã€?/p>

   

 
文章来源:http://blog.csdn.net/Wingel/archive/2006/11/26/1414832.aspx

]]>
[导入]下回写桌面程序一定要用QThttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84284.htmlWingelWingelWed, 29 Nov 2006 03:20:00 GMThttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84284.htmlhttp://www.aygfsteel.com/Wingel/comments/84284.htmlhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84284.html#Feedback0http://www.aygfsteel.com/Wingel/comments/commentRss/84284.htmlhttp://www.aygfsteel.com/Wingel/services/trackbacks/84284.html虽然最˜q‘一直在写swing的程序,但Javaè‚¯å®šæ˜¯ä¸èƒ½ç”¨äº†ï¼Œå› äØ“˜q˜æ€Žä¹ˆæ‰“包都要8M以上åQ?netçš„winform也是不能用了åQŒï¼›ž®±åªå‰©ä¸‰ä¸ªé€‰æ‹©äº†ï¼ŒDelphi,VBè·ŸMFCåQŒMFC实在是不想用åQŒå°±å…ˆè¯•了下用VB写,正在写得很不爽的时候,在某个地æ–ÒŽŸ¥åˆ°VB˜q˜è¦æ‹·ä¸€äº›dllæ–‡äšg才能正常˜qè¡ŒåQŒäºŽæ˜¯å°±åªå‰©ä¸‹DelphiåQŒåŽæ¥ç»ˆäºŽåœ¨å¾ˆç—›è‹¦çš„æƒ…况下,把程序完成了åQŒå”‰åQŒå¥½çš„IDE用习惯了åQŒå¯¹å®ƒçš„依赖也变得很多。(没错åQŒæˆ‘˜q™é‡Œž®±æ˜¯åœ¨æš—½CºDelphi˜q™ä¸ªIDE真TMD太差了)
  后来才听说了åQŒC++有个库,叫QTåQŒå†™æ¡Œé¢½E‹åºéžå¸¸çš„不错,˜q˜å¾ˆåƒswing。呜åQçœŸTMD的知道得太迟了,˜q˜è¢«æŠ˜ç£¨äº†å¾ˆä¹…,查了暴多的资料ã€?nbsp;
文章来源:http://blog.csdn.net/Wingel/archive/2006/11/26/1414851.aspx

]]>
[导入]A frame for MVChttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84283.htmlWingelWingelWed, 29 Nov 2006 03:20:00 GMThttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84283.htmlhttp://www.aygfsteel.com/Wingel/comments/84283.htmlhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84283.html#Feedback0http://www.aygfsteel.com/Wingel/comments/commentRss/84283.htmlhttp://www.aygfsteel.com/Wingel/services/trackbacks/84283.html
文章来源:http://blog.csdn.net/Wingel/archive/2006/05/26/756667.aspx

]]>
[导入][原]˜q‘一òq´çš„J2EE历程(ä»?005.4~2006.2çš„æ€È»“)http://www.aygfsteel.com/Wingel/archive/2006/11/29/84282.htmlWingelWingelWed, 29 Nov 2006 03:20:00 GMThttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84282.htmlhttp://www.aygfsteel.com/Wingel/comments/84282.htmlhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84282.html#Feedback0http://www.aygfsteel.com/Wingel/comments/commentRss/84282.htmlhttp://www.aygfsteel.com/Wingel/services/trackbacks/84282.html¾lˆäºŽåQŒå·¥ä½œä¹Ÿž®†è¿‘一òq´äº†åQŒä»Ž4月䆾的开始实习,到现在,唉,¾låŽ†çš„ä¸çŸ¥é“½Ž—多不多åQŒå­¦åˆ°çš„也不知道½Ž—多不多åQŒåæ­£çŽ°åœ¨å°±å†™ä¸€½‹‡æ€È»“åQŒå¯¹è‡ªå·±æœ‰ä¸ªè®¤è¯†å§ã€?br />2005òq?月䆾的时候,辞掉了一家在厦门工资˜q˜ç®—不错的公司,˜q›å…¥äº†çŽ°åœ¨æ‰€åœ¨çš„˜q™å®¶å…¬å¸å®žä¹ åQŒé‚£æ—¶å€™æ˜¯å¾ˆè‚¯å®šçš„觉得自己做的没有错,现在呢,我还是认为选的没错åQŒåªå¯æƒœåQŒå·¥èµ„一下子ž®±å°‘äº?00多了。中间也拒了几家有些名气的公司,说实在,有时候还真不能百分百肯定åQŒé‚£æ—¶å€™é€‰è¿™å®¶å…¬å¸æ˜¯å¦æ˜¯æœ€æ­£ç¡®çš„选择ã€?br />æ€ÖM½“上,被录用的做技术的公司的,˜q›åŽ»åˆ†åˆ«æ˜¯åš˜q™ä¸‰¿UæŠ€æœ¯çš„东西åQŒä¸€å®¶æ˜¯Windows mobileåQŒä¸€äº›æ˜¯.netåQŒè¿˜æœ‰çŽ°åœ¨è¿™å®¶çš„J2EEã€?net能学多少东西是不知道啦,不过前半òq´é‡Œåœ¨å¼€å‘J2EEæ—Óž¼Œè§‰å¾—自己真的学到很多åQŒå·¥ä½œäº†åŠå¹´ä»¥åŽåQŒå°±æœ‰ç‚¹˜q¯‚Œ«åQŒè‡ªå·±å­¦çš„够吗?
4月䆾在这家公司是以实习的íw«ä†¾˜q›æ¥çš„,在实习的˜q™æ®µæ—‰™—´é‡Œï¼Œå­¦ä¼šäº†strutså’Œhibernate的基本应用,也用˜q™äº›æ¡†æž¶åšäº†å‡ ä¸ªž®æ¨¡å—,ç”׃ºŽä¸­é—´è¦ç”¨åˆîCº†ä¸€ä¸ªç»Ÿè®¡å›¾åQŒåŽ»äº†è§£òq‰™‡‡ç”¨äº†jfreechartåQŒä¹Ÿ½Ž—是™åÞZ¾¿å­¦äº†˜q™ä¸ªå¼€æºåŒ…吧。等我向™å¹ç›®¾lç†¼‹®è®¤æˆ‘可以像其他员工那样完成ä»ÕdŠ¡æ—Óž¼Œæ‰ç»“束实习,回到学校ã€?br />7月䆾毕业出来åQŒå›žåˆ°è¿™å®¶å…¬å¸æ—¶åQŒä¸€å¼€å§‹åšçš„,ž®±æ˜¯¾l´æŠ¤å…¬å¸è‡ªå·±çš„OA¾pȝ»Ÿã€‚ç¬¬ä¸€ä¸ªå‘¨æ˜¯åšåŽŸæœ‰æ¨¡å—çš„ä¿®æ”¹å·¥ä½œï¼Œå› äØ“åœ¨å­¦æ ¡çŽ©äº†ä¸€ŒD‰|—¶é—ß_¼Œåˆšå¼€å§‹åšçš„æ—¶å€™è¿˜çœŸæœ‰ä¸€ç‚¹ç”Ÿç–ã€?br />½W¬ä¸€å‘¨çš„ä»ÕdŠ¡å®ŒæˆåŽï¼Œå¼€å§‹ä¸Šæ‰‹äº†åQŒæŽ¥ä¸‹æ¥åQŒå°±å¼€å§‹å¢žåŠ ä¸¤ä¸ªæ–°çš„å®¢æœæ¨¡å—äº†ã€‚è¿™ä¸¤ä¸ªæ¨¡å—ç”¨äº†ä¸‰å‘¨å®ŒæˆåQŒè¿™ä¸‰å‘¨é‡Œé¢åQŒä¹Ÿå­¦ä¼šäº†ä¸€ä¸ªä¸åˆäh–°æŠ€æœ¯ï¼ˆåŽæ¥æ‰çŸ¥é“,˜q™å«AJAXåQ‰ï¼Œòq¶åœ¨å‰©ä½™çš„æ—¶é—´é‡Œé¢ï¼Œæ¯”较大的收获ž®±æ˜¯æŽŒæ¡struts-menu˜q™ä¸ªå¼€æºåŒ…的普通应用ã€?br />8月䆾的前两周åQŒå¼€å§‹åšä¸€ä¸ªè–ªèµ„审批的‹¹ç¨‹åQŒä¹Ÿ½Ž—是½W¬ä¸€‹Æ¡æŽ¥è§¦å·¥ä½œæµäº†ã€‚è¿™‹Æ¡åšçš„这个模块,òq¶æ²¡æœ‰å­¦åˆîC»€ä¹ˆæ–°çš„æŠ€æœ¯ï¼Œž®±æ˜¯ä¸šåŠ¡é€»è¾‘å¾ˆå¤æ‚çš„¾~–码åQŒä½†æ˜¯æƒ³æƒŒ™‡ªå·×ƒ¹Ÿåˆšå·¥ä½œæ²¡å‡ å¤©åQŒè¿™å¯ÒŽˆ‘来说åQŒç›Šå¤„还是很大的ã€?br />接下来的一个月里,做的是OA上添加一个跟企业的运营åã^台整合的企业注册模块åQŒè¿™ä¸ªæ¨¡å—一开始看业务˜q˜æ˜¯å¾ˆç®€å•çš„åQŒåŽé¢åŠŸèƒ½æ…¢æ…¢æ·»åŠ ï¼Œç«Ÿç„¶åšäº†ä¸€ä¸ªæœˆæ‰å®Œæˆï¼ŒæœŸé—´æŠ½ç©ºäº†è§£äº†ä¸€ä¸ªåœ¨¾U¿ç¼–辑HTML的东西,而我想主要的åQŒè¿™ä¸ªæ¨¡å—有很多½Hå‘事情和意外要考虑åQŒè·Ÿä»¥å‰åšçš„那些相比åQŒè¿™‹Æ¡çš„˜q™ä¸ªæ¨¡å—åQŒæ‰æ˜¯çœŸæ­£ç……炼程序员能力的编½E‹å§ã€‚å·²¾låˆ°9月䆾的中旬了åQŒé‚£ä¸ªæ³¨å†Œä¼ä¸šæ¨¡å—也¾lˆäºŽå®Œæˆäº†ï¼ŒçŽ°åœ¨å›žæƒ³èµäh¥åQŒåšé‚£ä¸ªæ¨¡å—用的最有技术含量的东西åQŒåº”该是Ajaxå§ï¼ˆæˆ‘åÆˆæ²¡æœ‰ç”¨ä»€ä¹ˆå¼€æºçš„æ¡†æž¶åQŒå¦‚æžœçŽ°åœ¨æœ‰äºø™¦å˜²ç¬‘我说åQ?ldquo;你只是简单的一些不åˆäh–°åQŒä¹Ÿå«AjaxåQŒçœŸæžç¬‘”åQŒé‚£æˆ‘只能说åQŒæžœç„¶ä¸åªæ–‡äººç›¸è½»ï¼ŒåšæŠ€æœ¯çš„也看不è“v做技术的ã€?br />刚做完这个企业注册模块,™å¹ç›®¾lç†é—®æˆ‘è¯ß_¼š“你以前用˜q?net吧ã€?rdquo;我告诉他是的。没惛_ˆ°åQŒä¸€ä¸ªä“Q务就来了åQŒæŠŠä¸€ä¸ªaspx+CåQƒåšçš„çŸ­ä¿¡ä¸šåŠ¡ç®¡ç†ç½‘ç«™ä¿®æ”¹ä¸€ä¸‹ï¼Œå› äØ“é‡Œé¢éƒ½æ˜¯é€‚åˆSQL Server的数据库åQŒè€Œä¸”用到很多存储˜q‡ç¨‹åQŒçŽ°åœ¨æƒ³˜qåˆ°Oracle上。而一周后åQŒç»ˆäºŽæŠŠ˜q™ä¸ª™å¹ç›®æ”ÒŽˆé€‚合于大部分数据库的åQŒåŽ»æŽ‰æ‰€æœ‰å­˜å‚¨è¿‡½E‹ï¼Œå¢žåŠ äº†æ—¥å¿—åŠŸèƒ½ã€‚è¿™‹Æ¡çš„˜q™ä¸ªä»ÕdŠ¡òq¶æ²¡æœ‰ç……炼到什么J2EE的能力,不过也算再熟悉了一ä¸?netåQŒå†‹Æ¡æ„Ÿå—了.netçš„äh性化åQŒå¯æƒœæœ‰äº›åŠŸèƒ½è¿˜æ˜¯æ²¡æœ‰Jbuilder好。接下来åQŒåˆæ˜¯ä¿®æ”¹äº†ä¸€ä¸ªç”¨EJB做的工程中的一些模块,和调整了OA中的一部分功能。期间也搭徏了一个Tapetry的工½E‹ï¼Œ½Ž—是感受了他一把,不过˜q˜æ˜¯è§‰å¾—它没有struts好用ã€?br />接下来的˜q™ä¸ªæœˆï¼Œæ˜¯æˆ‘学得最多的一个月了,公司æƒÏxŠŠä»¥å‰çš„C/S二层¾l“æž„æ”¹äØ“Delphi做界面层åQŒç”¨Java做中间服务层åQŒæœ€åŽå†æ•°æ®åº“服务器。他们最先考虑到的是,用Web service。于是我的ä“Q务就下来了,研究一下Web serviceåQŒçœ‹èƒ½ä¸èƒ½åšä¸€ä¸ªæ¡†æž¶æ»¡­‘›_…¬å¸çš„要求。我起先则是用axis搭徏Web serviceåQŒåŽé¢å‘玎ͼŒå®ƒå®žåœ¨æ˜¯å¤ªå¤æ‚了åQŒæˆ‘们想要的åQŒæ˜¯ä¸€ä¸ªè½»ä¾¿çš„东西ã€?br />于是ž®±å¼€å§‹ç ”½I¶SOAPåQŒå› ä¸ºWeb servicež®±æ˜¯ç”¨SOAP传输消息的。SOAP然后是javaxmlåQŒæŽ¥ç€æ˜¯dom4j。后面自å·×ƒñ”生一个想法,如果客户端传递一个XML˜q‡æ¥åQŒé‡Œé¢æ˜qîCº†è¦è°ƒç”¨çš„¾cÕdåQŒæ–¹æ³•名åQŒä»¥åŠä¼ é€’的参数对象。服务端解析XML出来åQŒåˆ©ç”¨åž®„和序列化XML转化为本地化持久¾c»ï¼Œè°ƒç”¨˜q™ä¸ªæ–ÒŽ³•åQŒå†æŠŠæ–¹æ³•返回的对象转化成XML˜q”回¾l™å®¢æˆïL«¯åQŒé‚£ä¹ˆä¸ž®±å¯ä»¥å®žçް客æˆïL«¯è‡ªç”±è°ƒç”¨Java的类ã€?br />有了˜q™ä¸ªæƒÏx³•ž®±å¾ˆå…´å¥‹åQŒå¼€å§‹ä»˜è¯¸è¡ŒåŠ¨ã€‚å¾ˆòq¸è¿çš„æ˜¯åQŒæˆ‘把这个框架做出来了,那时候真的很兴奋åQŒå› ä¸ºåœ¨æˆ‘以为,那个¾cÕdž‹çš„æ¡†æž¶è¿˜ä»Žæ¥æ²¡æœ‰çœ‹è§˜q‡ï¼Œç”šè‡³æƒÏxŠŠå®ƒæ”¾åˆ°ç½‘ä¸Šå¼€æºåŽ»ã€‚åŽæ¥æ‰æ„è¯†åˆŽÍ¼Œå…¶å®žæˆ‘做的这个就是轻量的没有规范的Web serviceã€‚æ—¢ç„¶è¿™æ øP¼ŒåŽé¢åˆç»™å®ƒå¢žåŠ äº†¾cÖM¼¼wsdl的功能,而后在优化过½E‹ä¸­åQŒå¢žåŠ äº†cacheåQŒå¤§å¤§æé«˜äº†é€Ÿåº¦ã€‚测试了一下,完成同样的功能,它的速度是axis web service的十几倍,呵呵呵呵呵,那个叫兴奋啊。那也是一‹Æ¡æ€§æŠŠJava的几™å¹å…³é”®æŠ€æœ¯ä¸€èµ·å­¦äº†é¡ºä¾¿ç”¨ä¸Šã€?br />做完˜q™ä¸ªæ¡†æž¶åŽï¼Œåˆåšäº†ä¸¤ä¸ªé¡¹ç›®ï¼Œä¸€ä¸ªäº¤é€šæŸ¥è¯¢çš„åQŒä¸€ä¸ªç¤¾åŒºã€‚这两个™å¹ç›®å€’也没有像上回研½I¶Web service那样令äh兴奋的感觉了åQŒä¸˜q‡è¿˜æ˜¯å­¦äº†å¾ˆå¤šå¼€æºçš„东西和技术。交通查询很多次用到AjaxåQŒä¹Ÿåœ¨åš˜q™ä¸ª™å¹ç›®çš„æœŸé—ß_¼Œå­¦åˆ°äº†å‡ ™å¹J2EE技术,在一‹Æ¡ç”¨JavaScript做树状控件的时候,大大了提高了Javascript一把。而在此,也æ€È»“刎ͼŒå…¶å®žæ‡‚ä¸æ‡‚ä¸€äº›æ–°æŠ€æœ¯åÆˆä¸æ˜¯ä¸»è¦çš„ï¼Œæ–°æŠ€æœ¯å¾ˆå®ÒŽ˜“ž®±å¯ä»¥ç”¨èµäh¥åQŒè€Œéš¾çš„,ž®±æ˜¯å†›_®šç”¨å“ªäº›æŠ€æœ¯ï¼Œå“ªäº›æ¨¡å¼åQŒç›´è‡›_¦‚何来设计自己的框架。很òq¸è¿çš„,在做那个½C‘ÖŒºçš„æ—¶å€™ï¼Œæˆ‘有了这个机会ã€?br />除此以外åQŒåš˜q™ä¸ª½C‘ÖŒºçš„æ—¶å€™å…¶ä»–ä×o人激动的事情åQŒå°±æ˜¯å†™äº†å‡ ä¸ªå¤æ‚的标签åQŒå­¦åˆîCº†velocity和全文搜索Lucene了ã€?br />之后åQŒå°±æ˜¯å‘生一些跟技术无关的不如人意的事情了ã€?br />
文章来源:http://blog.csdn.net/Wingel/archive/2006/05/26/756669.aspx

]]>
[导入]一些网ç«?/title><link>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84281.html</link><dc:creator>Wingel</dc:creator><author>Wingel</author><pubDate>Wed, 29 Nov 2006 03:20:00 GMT</pubDate><guid>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84281.html</guid><wfw:comment>http://www.aygfsteel.com/Wingel/comments/84281.html</wfw:comment><comments>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84281.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Wingel/comments/commentRss/84281.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Wingel/services/trackbacks/84281.html</trackback:ping><description><![CDATA[一些有名的Java¾|‘ç«™<img src ="http://blog.csdn.net/Wingel/aggbug/1046624.aspx" width = "1" height = "1" /><br>文章来源:<a >http://blog.csdn.net/Wingel/archive/2006/08/10/1046624.aspx</a><img src ="http://www.aygfsteel.com/Wingel/aggbug/84281.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Wingel/" target="_blank">Wingel</a> 2006-11-29 11:20 <a href="http://www.aygfsteel.com/Wingel/archive/2006/11/29/84281.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]几个½W‘话,好好½W‘啊好好½W?/title><link>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84280.html</link><dc:creator>Wingel</dc:creator><author>Wingel</author><pubDate>Wed, 29 Nov 2006 03:20:00 GMT</pubDate><guid>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84280.html</guid><wfw:comment>http://www.aygfsteel.com/Wingel/comments/84280.html</wfw:comment><comments>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84280.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Wingel/comments/commentRss/84280.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Wingel/services/trackbacks/84280.html</trackback:ping><description><![CDATA[一些笑è¯?img src ="http://blog.csdn.net/Wingel/aggbug/1414818.aspx" width = "1" height = "1" /><br>文章来源:<a >http://blog.csdn.net/Wingel/archive/2006/11/26/1414818.aspx</a><img src ="http://www.aygfsteel.com/Wingel/aggbug/84280.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Wingel/" target="_blank">Wingel</a> 2006-11-29 11:20 <a href="http://www.aygfsteel.com/Wingel/archive/2006/11/29/84280.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]再读《大道至½Ž€ã€?/title><link>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84279.html</link><dc:creator>Wingel</dc:creator><author>Wingel</author><pubDate>Wed, 29 Nov 2006 03:20:00 GMT</pubDate><guid>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84279.html</guid><wfw:comment>http://www.aygfsteel.com/Wingel/comments/84279.html</wfw:comment><comments>http://www.aygfsteel.com/Wingel/archive/2006/11/29/84279.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Wingel/comments/commentRss/84279.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Wingel/services/trackbacks/84279.html</trackback:ping><description><![CDATA[<p>    今天再一‹Æ¡çœ‹äº†ã€Šå¤§é“至½Ž€ã€‹ï¼Œè§‰å¾—˜q˜æ˜¯æœ‰æŒºå¤šåœ°æ–¹ä¸æ‡‚çš„,当然,不是说这本书ž®±æ˜¯ä¸€æœ¬åœ£¾l?必须要完完全全的理解,只不˜q?目前以我的层‹Æ¡æ¥è®?体会得越å¤?走错的步子就会越ž®?<br />    <br />    目前,我想è®îC½ä¸¤å¥è¯?<br />    工具->æ–ÒŽ³•->工程->˜q‡ç¨‹->¾l„织</p> <p>    我用了一òq´çš„æ—‰™—´,从工å…?>æ–ÒŽ³•.我很æ€?但我又清醒的知道我要½E³ç¨³çš„èµ°!唉~</p> <p>    "实现"的欲望是½E‹åºå‘˜å‡ºíw«çš„通病.无论是从¾l“æž„ä¸?˜q˜æ˜¯æ¨¡å¼ä¸?那是¾l†èŠ‚. </p><img src ="http://blog.csdn.net/Wingel/aggbug/1414822.aspx" width = "1" height = "1" /><br>文章来源:<a >http://blog.csdn.net/Wingel/archive/2006/11/26/1414822.aspx</a><img src ="http://www.aygfsteel.com/Wingel/aggbug/84279.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Wingel/" target="_blank">Wingel</a> 2006-11-29 11:20 <a href="http://www.aygfsteel.com/Wingel/archive/2006/11/29/84279.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]™å¹ç›®ä¸­ï¼Œæ˜¯ç”¨ä¸€äº›å¼€æºæ¡†æžÓž¼Œ˜q˜æ˜¯ç”¨è‡ªå·Þp¾ƒç†Ÿæ‚‰çš„æŠ€æœ¯ï¼Ÿhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84278.htmlWingelWingelWed, 29 Nov 2006 03:20:00 GMThttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84278.htmlhttp://www.aygfsteel.com/Wingel/comments/84278.htmlhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84278.html#Feedback2http://www.aygfsteel.com/Wingel/comments/commentRss/84278.htmlhttp://www.aygfsteel.com/Wingel/services/trackbacks/84278.html  其实˜q™ç§äº‹æƒ…都会有两个观炏V€?br />一个观ç‚ÒŽ˜¯åQšå¾è®®ä‹É用自å·Þq†Ÿæ‚‰çš„æŠ€æœ¯ï¼Œé‡‡ç”¨½Ž€å•的架构åŽÕd®žçŽ°é¡¹ç›®ï¼Œ½{‰åˆ°ä½ æŠŠ™å¹ç›®åšå‡ºæ¥äº†åQŒèƒ½ç”¨è“v来了åQŒå®¢æˆ¯‚®¤å¯äº†ã€‚以后的升çñ”åQŒé‚£æ˜¯ä½ ž®±å¯ä»¥æ¯”较轻杄¡š„采用å…?它的架构来重构,˜q™æ ·ä½ çš„风险åQŒåŽ‹åŠ›å°±ç›¸å¯¹å‡å°‘å¾ˆå¤šäº†ã€?
而这回,我想™å¶ä¸€ä¸‹ç¬¬äºŒä¸ªè§‚点åQ?nbsp; 
  其实如果你对代码要求比较严格的话åQŒä½ ž®×ƒ¼š¾lå¸¸å‘现åQŒä½ çš„代码有很多东西可以抽取出来åQŒæˆ–者做在公å…Þqš„æ¨¡å—åQŒæˆ–者作为框架的底层åQŒæˆ‘们就½Ž€å•的拿jdbc来说吧,
    首先åQŒæ˜¯connection的管理,˜q™ç‚¹ä¸€èˆ¬ç”¨jdbc熟一些的话,都会有管理connection的公共模块,虽然偶尔会碰到性能的问题,但是˜q™ç‚¹æˆ‘们暂且压下不表ã€?br />    我们查询的时候,每次都要ç”?br />    rs.get...("name"),
    rs.get...("id"),
    rs.get...("age"),
    rs.get...("gender"),
    rs.get...("hobby"),
    然后修改数据库的时候,˜q˜è¦æ‹¼å†™update语句跟insert语句åQŒç»å¸¸è¿˜è¦è´¹å¾ˆå¤šæ—‰™—´æ¥è°ƒè¯•这些多余代码的问题åQŒè¿™æ—¶å€™ä½ ž®±æƒ³åQŒä¸è¡Œï¼Œæˆ‘一定要写一个公共模块,省得让我每次都要定这么多代码åQŒäºŽæ˜¯ä½ çš„第一个公共模块äñ”生了åQŒç„¶åŽæµ‹è¯•啊‹¹‹è¯•åQŒæ”¹˜q›å•Šæ”¹è¿›åQŒå®å®å“åQŒè¿‡äº†å‡ å¤©æ—¶é—´çš„考验åQŒè¿™ä¸ªå…¬å…±æ¨¡å—终于可以放心ä‹É用了åQŒé¡¹ç›®è¿›åº¦å¼€å§‹å¿«ä¸€äº›äº†åQŒæ€È®—不用再拼SQL了ã€?br />   
    后来在做¾lŸè®¡æ¨¡å—的时候,½Hç„¶åˆå‘玎ͼŒä¹‹å‰åœ¨ç”¨åˆ°çš„一些SQL函数åQŒå¥½åƒåœ¨å®¢æˆ·è¦æ±‚的数据库上不怎么行啊åQŒäºŽæ˜¯åˆåŽÀLŸ¥äº†ä¸€ä¸‹èµ„料,又过了几天(可能˜q™æ¬¡ä¸ç”¨å‡ å¤©åQ‰ï¼Œç„¶åŽ¾lˆäºŽæ”‘Ö¿ƒåQŒæ‰€æœ‰çš„å‡½æ•°éƒ½æ­£å¸æ€º†ã€?br />   
    接着又不可避免的¼„°åˆ°äº†åˆ†™å늚„问题åQŒä½ å¯¹è‡ªå·Þp¯´åQŒä¸ç”¨æ€•,我上回就写了一个分™å늚„åQŒæ²¡æœ‰é—®é¢˜ï¼å¯æ˜¯Ya的你½Hç„¶å‘现åQŒä¸Šå›žçš„那个分页是用游标实现的,˜q™å›žå®¢æˆ·æ˜¯è¦æ±‚用SQLServeråQŒå”‰åQŒSQLServer的游标,不提也çÅžåQŒæƒ³æ¥æƒ³åŽ»ï¼Œåªå¥½è‡ªå·±æ‹¼SQL语句来写分页了,又是count又是topåQŒæµ‹äº†åˆ‹¹‹ä¹‹åŽï¼Œåˆè¿‡äº†å‡ å¤©ï¼Œå•Šå“ˆåQŒç»ˆäºŽåˆ†™å늚„公共模块也做好的åQŒå¯ä»¥æ”¾å¿ƒä‹É用了åQŒå¥½åQŒé¡¹ç›®çš„˜q›åº¦åˆå¯ä»¥åŠ å¿«äº†ã€?/p>

    做着做着的时候,发现åQŒå’¦åQŒå¥½åƒè¿™è¡¨å¾—增加一个字ŒD‰|‰è¡Œï¼Œå¢žåŠ äº†ï¼Œç„¶åŽæ‰€æœ‰æŸ¥è¯¢çš„SQL语句加一下,所有insertè·Ÿupdate的代码修改一下,™åµé¢ä¿®æ”¹ä¸€ä¸‹ï¼Œå—¯ï¼ŒçŽ°åœ¨åº”è¯¥æ­£å¸¸äº†ï¼Œçœ‹è“v来倒是没什么问题,咦,报表好像不怎么对啊åQŒé åQŒè¿™è¾¹è¿˜æœ‰è°ƒç”¨è¿™ä¸ªè¡¨çš„代码,妈的åQŒæ”¹å§æ”¹å§ã€‚磨íy­äº†å¥½å‡ ä¸ªå°æ—Óž¼ˆå½“ç„¶åQŒç†Ÿ¾lƒçš„话,òq¶ä¸ç”¨å‡ ä¸ªå°æ—Óž¼‰åQŒæ€È®—看è“v来都正常了ã€?/p>

    ˜q™ä¸€å›žï¼Œ˜q™ä¸ªåŠŸèƒ½ä¸­æœ‰ä¸€‹Æ¡ç”¨æˆ¯‚¯·æ±‚,讉K—®äº†å¥½å‡ æ¬¡æ•°æ®åº“,不行åQŒè¿™é‡Œåº”该用个cacheåQŒå¦åˆ™æ€§èƒ½ä¸Šä¼šæœ‰é—®é¢˜å•ŠåQŒç®—了,用算法解决一下,ž®½é‡ž®‘访问数据库好了åQŒæˆ‘对cache˜q˜ä¸ç†Ÿå‘¢ã€‚(写啊写啊åQŒBatch SizeåQŒè¿™æ ·å¤šåQŒé‚£æ ·å¤šåQŒFetch Size。。。,¾lˆäºŽåQŒçœ‹èµäh¥æ­£å¸¸ä¸€äº›äº†åQ‰ã€‚过了一ŒD‰|—¶é—ß_¼Œé ï¼Œ˜q™è¾¹åˆè¦è®‰K—®å¥½å‡ ‹Æ¡æ•°æ®åº“åQŒYa的受不鸟了,性能爱咋的咋的,反正一个地æ–ÒŽ…¢åˆä¸è¦ç´§ã€‚Oh shit!!!˜q™è¾¹ä¹Ÿæ˜¯å¥½å‡ ‹Æ¡ï¼Œ˜q™è¾¹åˆæ˜¯å¥½å‡ ‹Æ¡ï¼Œé‚£è¾¹åˆæ˜¯å¥½å‡ ‹Æ¡ã€‚不行了åQŒæˆ‘老老实实写个cache支持吧,于是又叮叮当当了好几天,¾lˆäºŽåQŒæœ‰ä¸ªç²—¾p™çš„cache出来了,¾lˆäºŽé€Ÿåº¦å¯ä»¥çœ‹ä¸€äº›äº†ã€‚后来改˜q›åˆæ”¹è¿›åQŒæµ‹è¯•又‹¹‹è¯•åQŒç¯æ­ÖMº†åQŒè€å­å¥½ä¸çˆ½å•Šã€?/p>

    好像天下有点太åã^了,啊,你说我这个地方忘记更æ–îC½ å¢žåŠ çš„é‚£ä¸ªå­è¡¨å•ŠåQŒç®—了,没关¾p»ï¼Œæˆ‘明天看一下代码,˜q™ä¸ªå®ÒŽ˜“解决炏V€‚å—¯åQŒæˆ‘改了那边的代码了åQŒä¼šæ›´æ–°å­è¡¨ä¿¡æ¯äº†ã€‚什么?你说取主表的记录跟相应的子表记录列表éºÈƒ¦å•Šï¼Œæ²¡å…³¾p»ï¼Œæˆ‘æ›´æ–îC¸€ä¸‹å¤„理resultset的公共模块,明天再说ã€?br />    Oh shit......对这样子复杂的查询好像现在的公共模块支持不了啊,½Ž—了åQŒè¿™æ ·å­çš„æŸ¥è¯¢ä¸è¦ç”¨˜q™ä¸ªå…¬å…±æ¨¡å—åQŒæˆ‘们手动写一些代码好啊,别跟我讲˜q™æ ·ä»£ç ¾l“构很难看,你以为我不知道啊åQŒTMDã€?/p>

    TMD的,怎么˜q™è¾¹çš„SQL老是˜qè¡Œä¸äº†å•Šï¼Œä¸ä¼šæ˜¯åˆ†™åµåº•层模块的问题吧,靠,怎么你的SQL语句有这么多order,group byåQŒé åQŒè¿˜æœ‰top啊,˜q™å½“然过不了了,不要吵了åQŒçŽ°åœ¨æ—¶é—´æ”¹åQŒä¸ç†å®ƒåQŒç›´æŽ¥ç”¨ä¸ªå‡åˆ†é¡µž®Þp¡Œäº†ã€‚你又说代码¾l“构隄¡œ‹åQŒå°å¿ƒæˆ‘抽你哦ã€?/p>

    公司新来一个程序员åQŒçœ‹äº†å‡ å¤©ä»£ç ï¼Œä¸åœçš„æŠ±æ€¨è¯´åQŒè¿™ä»£ç å†™å¾—真差啊。。。。。ã€?nbsp;


文章来源:http://blog.csdn.net/Wingel/archive/2006/11/26/1414852.aspx

]]>
[导入]transaction in Springhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84277.htmlWingelWingelWed, 29 Nov 2006 03:19:00 GMThttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84277.htmlhttp://www.aygfsteel.com/Wingel/comments/84277.htmlhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84277.html#Feedback0http://www.aygfsteel.com/Wingel/comments/commentRss/84277.htmlhttp://www.aygfsteel.com/Wingel/services/trackbacks/84277.htmlPropagation behavior:

PROPAGATION_MANDATORY:
 Indicates that the method must run within a transaction. If no
 existing transaction is in progress, an exception will be thrown.


PROPAGATION_NESTED:
 Indicates that the method should be run within a nested transaction
 if an existing transaction is in progress. The nested transaction
 can be committed and rolled back individually from the enclosing
 transaction. If no enclosing transaction exists, behaves like
PROPAGATION_REQUIRED:
 Beware that vendor support for this propagation behavior is spotty at best.
 Consult the documentation for your resource  manager to determine if nested
 transactions are supported.
PROPAGATION_NEVER:
 Indicates that the current method should not run within a transactional
 context. If there is an existing transaction in progress, an
 exception will be thrown.
PROPAGATION_NOT_SUPPORTED:
 Indicates that the method should not run within a transaction. If an
 existing transaction is in progress, it will be suspended for the
 duration of the method. If using JTATransactionManager,
 access to TransactionManager is required.
PROPAGATION_REQUIRED:
 Indicates that the current method must run within a transaction. If
 an existing transaction is in progress, the method will run within
 that transaction. Otherwise, a new transaction will be started.
PROPAGATION_REQUIRES_NEW:
 Indicates that the current method must run within its own transaction.
 A new transaction is started and if an existing transaction is in
 progress, it will be suspended for the duration of the method. If
 using JTATransactionManager, access to Transaction-
 Manager is required.
PROPAGATION_SUPPORTS:
 Indicates that the current method does not require a transactional
 context, but may run within a transaction if one is already in
 progress.


Isolation levels:
In a typical application, multiple transactions run concurrently, often working
with the same data to get their job done. Concurrency, while necessary, can lead
to the following problems:
 â–?Dirty read—Dirty reads occur when one transaction reads data that has
 been written but not yet committed by another transaction. If the
 changes are later rolled back, the data obtained by the first transaction
 will be invalid.
 â–?Nonrepeatable read—Nonrepeatable reads happen when a transaction performs
 the same query two or more times and each time the data is different.
 This is usually due to another concurrent transaction updating the
 data between the queries.
 â–?Phantom reads—Phantom reads are similar to nonrepeatable reads. These
 occur when a transaction (T1) reads several rows, then a concurrent transaction
 (T2) inserts rows. Upon subsequent queries, the first transaction
 (T1) finds additional rows that were not there before.


Isolation level:
ISOLATION_DEFAULT:
 Use the default isolation level of the underlying datastore.
ISOLATION_READ_UNCOMMITTED:
 Allows you to read changes that have not yet been committed. May
 result in dirty reads, phantom reads, and nonrepeatable reads.
ISOLATION_READ_COMMITTED:
 Allows reads from concurrent transactions that have been committed.
 Dirty reads are prevented, but phantom and nonrepeatable
 reads may still occur.
ISOLATION_REPEATABLE_READ:
 Multiple reads of the same field will yield the same results, unless
 changed by the transaction itself. Dirty reads and nonrepeatable
 reads are prevented by phantom reads may still occur.
ISOLATION_SERIALIZABLE:
 This fully ACID-compliant isolation level ensures that dirty reads,
 nonrepeatable reads, and phantom reads are all prevented. This is
 the slowest of all isolation levels because it is typically accomplished
 by doing full table locks on the tables involved in the transaction. 


文章来源:http://blog.csdn.net/Wingel/archive/2006/11/26/1414826.aspx

]]>
[导入]Transaction Isolation Levelhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84276.htmlWingelWingelWed, 29 Nov 2006 03:19:00 GMThttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84276.htmlhttp://www.aygfsteel.com/Wingel/comments/84276.htmlhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84276.html#Feedback0http://www.aygfsteel.com/Wingel/comments/commentRss/84276.htmlhttp://www.aygfsteel.com/Wingel/services/trackbacks/84276.htmlhere are four isolation levels:

  • READ UNCOMMITTED (在一个事务中åQŒå¯èƒ½è¯»åˆ°åˆ«çš„事务还没提交的数据åQ?/font>
  • READ COMMITTEDåQˆåœ¨ä¸€ä¸ªäº‹åС䏭åQŒåŒæ ïLš„语句可能查询åˆîC¸åŒçš„æ•°æ®åQŒå› ä¸ºåœ¨˜q™ä¸¤ä¸ªè¯­å¥ä¹‹é—ß_¼Œåˆ«çš„事务更改提交了这两个语句涉及的数据)
  • REPEATABLE READåQˆä¿è¯ä¸€ä¸ªäº‹åŠ¡A里面è¯Õdˆ°çš„æ•°æ®ä¸ä¼šå˜åQŒå³ä½¿æœŸé—´åˆ«çš„事务B提交更改了数据,事务A中的语句仍然会读到原来的数据åQ?/font>
  • SERIALIZABLEåQˆåœ¨äº‹åŠ¡æœŸé—´åQŒä¼šž®†æ¶‰åŠçš„æ•°æ®é”æŽ‰åQŒé˜²æ­¢åˆ«çš„事务修改)

    SQL server实现了四个çñ”åˆ?br />Oracle只实çŽîC¸­é—´ä¸¤ä¸ªçñ”别ã€?/font>  

  • 文章来源:http://blog.csdn.net/Wingel/archive/2006/11/26/1414835.aspx

    ]]>
    [导入]事务隔离¾U§åˆ«http://www.aygfsteel.com/Wingel/archive/2006/11/29/84275.htmlWingelWingelWed, 29 Nov 2006 03:19:00 GMThttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84275.htmlhttp://www.aygfsteel.com/Wingel/comments/84275.htmlhttp://www.aygfsteel.com/Wingel/archive/2006/11/29/84275.html#Feedback0http://www.aygfsteel.com/Wingel/comments/commentRss/84275.htmlhttp://www.aygfsteel.com/Wingel/services/trackbacks/84275.html前几天同事讲了Transaction isolation levelåQŒåƈ且大家一起在SQLServeråQŒOracleè·ŸMySQL数据库上实验了一下,发觉˜q™äº›çŸ¥è¯†˜q˜æ˜¯æŒºé‡è¦çš„ã€?br />å‡å¦‚æœ‰ä¸¤ä¸ªäº‹åŠ¡åÆˆå‘ï¼Œ™åºåºå¦‚下
    Transaction A            Transaction B
    begin    begin
    query1 from table A   
    .......                  modify1 to table A(insert/update/delete)
       commit
    query2 from table A
    commit

    那么在事务A中,query1è·Ÿquery2查询出来的结果是否一样呢åQŸè¿™ž®Þp·Ÿäº‹åŠ¡éš”ç¦»¾U§åˆ«æœ‰å…³äº†ã€?br />SQL的标准定义里面,一共有四种¾U§åˆ«åQ?br />read uncommitedè¯Õd–未提交的数据 ž®±æ˜¯å…¶ä»–事务求提交的数据åQŒéƒ½å¯ä»¥è¯Õd–出来
    read commitedè¯Õd–已提交的数据 query2会跟query1è¯Õd–的数据不一æ ?br />repeatable read可重复读取,即query1è·Ÿquery2è¯Õd–的数据是一æ ïLš„
    serializable 序列化,

     SQL 标准用三个必™åÕdœ¨òq¶è¡Œçš„事务之间避免的现象定义了四个çñ”别的事务隔离ã€?˜q™äº›ä¸å¸Œæœ›å‘生的现象是:
    脏读åQˆdirty readsåQ?br />    ä¸€ä¸ªäº‹åŠ¡è¯»å–äº†å¦ä¸€ä¸ªæœªæäº¤çš„åÆˆè¡Œäº‹åŠ¡å†™çš„æ•°æ®ã€?
    不可重复读(non-repeatable readsåQ?br />    一个事务重新读取前面读取过的数据, 发现该数据已¾lè¢«å¦ä¸€ä¸ªå·²æäº¤çš„事务修改过ã€?
    òq»è¯»åQˆphantom readåQ?br />    一个事务重新执行一个查询,˜q”回一套符合查询条件的行, 发现˜q™äº›è¡Œå› ä¸ºå…¶ä»–最˜q‘提交的事务而发生了改变ã€?
     éš”离¾U§åˆ«         脏读åQˆDirty ReadåQ?nbsp; 不可重复读(NonRepeatable ReadåQ?nbsp; òq»è¯»åQˆPhantom ReadåQ?br />è¯ÀLœªæäº¤åQˆRead uncommittedåQ?nbsp;  可能      可能                           可能
    è¯Õd·²æäº¤åQˆRead committedåQ? ã€€  不可能           可能                        可能
    可重复读åQˆRepeatable readåQ?nbsp;   不可èƒ?nbsp;            不可èƒ?nbsp;                   可能
    可串行化åQˆSerializable åQ?nbsp;     不可èƒ?nbsp;             不可èƒ?nbsp;                 不可èƒ?/p>

    SQLServer
    我们首先在SQLServer上做了实验,SQLServer一共支持四¿Uéš”¼›Èñ”别,read uncommitedè·Ÿread commited我们没有实验åQŒæˆ‘们直接先实验
    repeatable readåQŒå¦‚果事务A定义了如下çñ”别,那么当事务B执行到modify1˜q™æ¡è¯­å¥æ—Óž¼Œå¦‚æžœmodify1是update的话åQŒå°±è¢«é”èµäh¥åQŒä¸€ç›´ç­‰
    åˆîCº‹åŠ¡A提交完以后,锁才会被释放åQŒè€Œå¦‚果是insert的话åQŒåˆšå¯ä»¥™åºåˆ©˜q›è¡Œä¸‹åŽ»åQŒç„¶åŽåœ¨äº‹åŠ¡A中,query2查到的数据,是已¾lè¢«äº‹åŠ¡B
    修改˜q‡çš„æ•°æ®åQŒå¦‚果将¾U§åˆ«å®šä¹‰åœ¨serializable的话åQŒåˆ™åœ¨modify1语句中,update,insert或者delete都会被锁掉ã€?br />也就是说åQŒSQLServer对这些çñ”别的支持åQŒæ˜¯é€šè¿‡é”æ¥åšåˆ°çš„,虽然可以保证事务正常˜q›è¡ŒåQŒä½†æ˜¯åƈ行的性能却很差ã€?br />Oracle
    oracle只支持两个çñ”别,read commitedè·ŸserializableåQŒç»“果这里就不用详细说明åQŒå®žéªŒçš„¾l“果是,oracleçš„serializable是通过版本
    控制来完成的åQŒè€Œä¸æ˜¯é€šè¿‡é”æœºåˆÓž¼Œ˜q™å°±ä¿è¯äº†åƈ行的性能。Oracle的默认çñ”别是read commited
    MySQL
    MySQLServer也支持四个çñ”别,而且MySQL也是通过版本控制而非锁机制来完成的ã€?br /> 


    文章来源:http://blog.csdn.net/Wingel/archive/2006/11/26/1414839.aspx

    ]]>
    Ö÷Õ¾Ö©Öë³ØÄ£°å£º ±±³½Çø| ½£ºÓÏØ| ¼ªÂ¡ÏØ| ºÏɽÊÐ| ÌìÈ«ÏØ| ´ó×ãÏØ| ¸£ÖÝÊÐ| ÂÞµéÏØ| ÉÏÀõÏØ| ¶õÂ×´º×ÔÖÎÆì| ¿í³Ç| ³¤ÀÖÊÐ| ÓÀÊÙÏØ| ½­Î÷Ê¡| ¾«ºÓÏØ| °¢¿Ë| ÂéÑô| ÔúÂ³ÌØÆì| ÈÊ»¯ÏØ| Îä¶¨ÏØ| ξÀçÏØ| ͳ·¬ÊÐ| ´ó°²ÊÐ| ТÒåÊÐ| ¼¦Î÷ÊÐ| ÎÌÅ£ÌØÆì| ×ÓÖÞÏØ| ʯ³ÇÏØ| Îå´óÁ¬³ØÊÐ| ËÑË÷| Ò˶¼ÊÐ| Ç­Î÷ÏØ| Ò˳ÇÊÐ| ËÄÆ½ÊÐ| ɳƺ°ÓÇø| ÎÄ»¯| ¸»Ë³ÏØ| ÕòÔ­ÏØ| ͨÁÉÊÐ| ÉÜÐËÊÐ| ÆÖÏØ|