??xml version="1.0" encoding="utf-8" standalone="yes"?>精品久久久无码人妻中文字幕,91精品日韩人妻无码久久不卡,99久久99久久精品国产片http://www.shnenglu.com/colys/archive/2007/11/21/37106.htmlcolyscolysWed, 21 Nov 2007 13:47:00 GMThttp://www.shnenglu.com/colys/archive/2007/11/21/37106.htmlhttp://www.shnenglu.com/colys/comments/37106.htmlhttp://www.shnenglu.com/colys/archive/2007/11/21/37106.html#Feedback1http://www.shnenglu.com/colys/comments/commentRss/37106.htmlhttp://www.shnenglu.com/colys/services/trackbacks/37106.html鼎白茶
白茶属微发酵Ӟ是我国六大类茶叶中的一颗璀璨明珠,中国是白茶的惟一产地。白茶的品质特征为:(x)成茶披满白毫Q十分素雅,汤色清EQ味鲜醇、清甜、有毫香。基本加工工艺流E是萎调、晒q或低温烘干。因采用鲜叶原料不同Q故可分为:(x)白毫铉、白牡丹、A(ch)眉、寿眉及(qing)新工艺白茶五U。生产白茶对品种和加工工芤要求十分严|适制白茶的茶?wi)品Uؓ(f)Q福鼎大白茶、福鼎大毫茶、政和大白茶和闽北水仙等。白茶是我国历史名茶Q其M区在徏省福鼎市、政和县Q徏队뀁徏瓯等县市也有量生。据茶叶史料记蝲Q白茉创于徏省福鼎县Q又据福建省地方志编委会(x)出版的《福建地方志》和C茶叶著名专家张天教授的《福建白茶的调查研究》及(qing)清代明h周亮工《闽记》的记蝲Q清喜庆初年Q公?796q_(d)Q福鼎h用菜Ӟ有性群体种Q的壮芽为原料,创制白毫铉。在1857q_(d)鼎大白茶茶?wi)品U从太姥q植到鼎县点头、柏柳等地选育成功Q由于福鼎大白茶芽壮、毫显、香高,所制白毫银针外型品质远q优?#8220;菜茶”。于是福鼎茶人改用福鼎大白茶的壮芽ؓ(f)原料刉?#8220;白毫铉”Q出口h(hun)高于原菜茶加工的铉Q后来称土针Q?0多倍。约?860q_(d)“土针”逐渐退?#8220;白毫铉”的历史舞台。据《福建地方志》记载,政和?880q选育J殖成功“政和大白?#8221;品种Q?889q开始刉针。两地生产银针时间相距约80多年。MQ白茶类中是先有“铉”Q后才有白牡丏VA(ch)眉、寿眉,至于新工艺白牡丹Q是二十世纪70q代由原鼎茶厂白琳分厂研制的一个新的白茶品。所以说Q白茶之所以能自成一c,是因其具有独特的产地Q区域)、独特的品种和独特的加工工艺Q离开其中M一个因素都生不出好茶。同Ӟ生白茶h很大的风险性,表面上看加工工艺二十单,但其内在的技术要领二十不易掌握?

天山l茶

天山l茶是福建省的历史名Ӟ为闽东烘青绿茶的极品。品质特优,其是里、中、外天山所产的l茶品质更佳Q称?#8220;正天q?#8221;?
据《宁德县志》记载,天山l茶曄历一D变革演化过E。宋代生产团茶、饼Ӟ也生产^茶、龙团茶。到了元、明代生?#8220;茉”Q供作礼品和祀品。公?781q前后,天山所产的芽茶已被列ؓ(f)贡品。明、清以后Q以生炒青条Ş茶ؓ(f)丅R几l变革,C1979q_(d)才改制ؓ(f)烘青型绿Ӟ成ؓ(f)高档p的优质原料。历史上Q天q茶花色品U丰富多彩,而今Q除数p品种׃外,大多Cl花色品U,如天山雀舌、凤眉、明前、清明等均得到恢复,q创制了新的品种Q如清水lѝ天山毛峰、天山银毫、四季春、毛等。这些绿茶以锋苗挺秀、香高、味、色、耐五大特点赢得了荣誉。从1979q恢复生产以来,曑֤ơ在地、省?qing)全国名茶评选会(x)上获奖,名列前茅。天山银毫茉莉花茶在全国内销p评比?x)上Q名列第一?982q?986q二ơ被评ؓ(f)全国名茶Q商业部授于全国名茶荣誉证书?
天山位于东v之滨Q天׃峰——屏南天湖山Qv立在徏省屏南、宁得古C县交界的屏南黛溪乡。除天湖山外Q还有天峰山、仙峰山、大坪山{山脉,是天q茶的原地。这里山峰险峻,h1300c_叻I林木参天Q云L(fng)滚,气候温和,q均气温15℃左叻Iq降雨量1900毫米左右Q土壤肥沃湿润,多ؓ(f)l构疏松的砂质壤土。茶?wi)多生长在岩间和山坡上,树(wi)壮芽肥Q是适制天山l茶的理惛_料。难怪诗道:(x)“深山奇石嵯峨立,峡谷(zhn)崖呌?#8221;?
天山l茶采用的原料因p品种不同而异。如雀舌和凤眉{传l珍品,选用叶质肥厚、持嫩性强的天p茶品U的芽叶为原料。采摘标准ؓ(f)一芽一叶和一芽二叶初展。制500克干茶约需3万个左右芽叶。新创制的名茶如清水l等Q则选取大、中叶种的芽叶ؓ(f)原料Q采摘标准以一芽二叶初展ؓ(f)主,?00克干茉7000个左双叶?
天山l茶实现了机械化生。主要设备有q箋滚筒늃恒温杀青机Q?0型或45型揉LQ自动百叶烘q机{。加工工艺有凉青、杀青、揉捅R烘qԌ毛火和火)四道工序。杀青掌?#8220;高温、控热、少量、短?#8221;的方法。筒?40?60℃,늃控制Q前高后低。v锅摊凉散热后再行揉捻。揉L采用“机、适量、轻压、短?#8221;的技术措施,辑ֈ条烦(ch)紧结、色泽翠lѝ香x鲜的目的?0型揉L投叶?Q??0公斤Q?5型揉L投叶?0?2Q?公斤。{?5转C分。烘q毛火掌?#8220;薄摊、高温、快?#8221;的原则。火掌握低温慢烘,辑ֈq度内外均匀一_(d)香高而鲜爽的目的。毛火烘?15℃左叻I含水?5?0Q。火烘?0?5℃,含水?Q左叟?
天山l茶h“三绿”特色Q即色泽绿Q汤色碧l,叶底嫩绿Q且外Ş条烦(ch)嫩匀、锋苗挺U、茸毫显Ԍ香似珠兰花香Q芬芳鲜爽,滋味厚回甘Q犹如新鲜橄榄,汤色清澈明亮Q经泡耐饮Q冲??ơ,茶味犹存。饮之幽香四溢,齉K留芳Qo(h)人心L(fng)?br>
鼎白琳工夫?br>"白琳工夫?充分发挥鼎大白茶的特点Q精选细嫩芽Ӟ制成工夫Ӟ外Ş条烦(ch)紧结U秀Q含有大量的黄白毫Q具有鲜爽愉快的毫香Q汤艌Ӏ叶底艳丽红亮,取名为「桔U」,意ؓ(f)桔子般红艳的工夫Q风格独特,在国际市Z很受Ƣ迎?br>"白琳工夫?pd叶种U茶Q当地种植的叶体U具有茸毛多、萌芽早、量高的特点,一般的白琳工夫Q外形条索细长弯Ԍ茸毫多呈颗粒l球Ӟ色泽黄黑Q内质汤色浅亮,香气鲜纯有毫香,x鲜甜和,叶底鲜红带黄?br>"白琳工夫"Z大闽U工夫之一Q以其独牚w格和品质盛兴癑ֹ而不衰。白琛_夫茶采用鼎大白茶代替原有的叶U,成ؓ(f)加工白琳功夫的主要原料,使其质量有了显著的提高。它的品质特征,几乎代表白琳功夫高茶的独特风格Q在国际市场上很受欢q。主要特Ҏ(gu)Q条索紧l,茶毫N金黄Ԍq茶色泽乌润油亮Q汤色红x亮,叶底U亮Q滋味鲜醇爽,香气清高Q有Ҏ(gu)的花香,耐冲泡,既适合清饮Q又适合掺和砂糖、牛奶?br>
鼎莲心?
莲心茶ŞD子瓣心而得名,为我国传l名茶。于福建省太姥山麓的福鼎百琛_霞水门。太姥山景色U丽,崖林之间茶树(wi)丛主。相传,早在光Aq间Q太姥山麓的白琳一带,茶树(wi)已广为种植。到了本世纪Q0q代Q莲心茶以茶中珍品闻名v内外。用莲心茶窨制成茉莉娥眉、茉莉秀眉,茶中的佼D,深受东南亚L?yu)的喜爱?br>
莲心茉取福鼎大白茶的一芽二叶ؓ(f)原料。经萎凋、杀青、揉捅R干燥等四道工序加工而成?br>
萎凋Q目的在于蒸发部分水分,促芽叶内含物发生适度的变化,消除成品的苦涩味。当地的l验是萎凋应掌握适当的限度,萎凋E度q轻达不到萎凋的目的Q萎凋程度过重,卛_水过多,内含物质变化q大Q均不利莲心茶品质的形成。通常Q芽叶减重率控制在1Q%左右Q时_(d)~8时。当叶色转ؓ(f)暗绿Q叶的侧脉折而不断,折梗能脆断Q叶质柔软,即ؓ(f)适度?br>
杀青:(x)手工杀青,全用抖炒。做到抖得散Q翻得匀。杀青锅温1Q0℃左叻I投叶量1Q0Q克左右Q当叶子松散不粘手,清香透露即ؓ(f)适度?br>
揉捻Q杀青叶l摊凉冷却后q行揉捻。达到茶索挺直紧l的目的?br>
q燥分毛火和火两个q程。毛火在烘笼上进行,烘温Q0~1Q0℃,每笼投叶量1Q0Q克左右Q烘至七、八成干为适度。火在炒锅内进行,锅温Q0℃左叻I炒至_Q色略显Cؓ(f)适?br>
莲心茶的品质特点是,外Şl紧U秀Q锋苗显Ԍ色泽l中带黄Q有D子蕊Ԍ香气清幽Q含l豆清香Q味醇鲜爽,汤色绿清澈Q叶底嫩匀成朵。在杯中,两叶相对而开Q中间竖一芽心Q犹如莲子瓣心,颇有情趣?br>
安坦洋工夫U茶
  坦洋工夫分布较广Q主产福安、柘荣、寿宁、周宁、霞及(qing)屏南北部{地。坦z工夫源于福安境内白云山麓的坦洋村,怼清咸丰、同d?公元1851 --1874q?Q坦z村有胡四(又名胡进?者,试制U茶成功Q经q州q销西欧。很受欢q,此后茶商UL(fng)入山求市Q接t而来q设z行Q周围各县茶叶亦渐云集坦z.坦洋工夫名声也就不胫而走Q自光A六年 x国二十五q?公元1881?936q??0余年Q?坦洋工夫每年出口均上万担Q其?898q出?万余l?br>
  坦洋街长一公里Q设茶行?6Ӟ雇工3000余hQ?万余担。收条范围上x和县的新村,下至霞县的赤岭Q方圆数NQ境跨七、八个县Q成为福安的主要U茶产区。运销荷兰、英国、日本、东南亚{二十余个国家与地区Q每q收外汇茉百余万元。当时民谚云Q?#8220;国家大兴Q茶换黄金,Ҏ(gu)龙凤桥, 白银用斗量?#8221;后因抗日战争爆发Q销路受阻,生亦遭严重破坏Q坦z工夫量锐减?br>
  50q代中期Qؓ(f)了恢复和提高坦洋工夫U茶的量和品质Q先后徏立了国营坦洋、水门红茶初制厂和福安茶厂,实行机械化制Ӟ引进q繁D福鼎大白茶、福安大白茶、福云等优良茶树(wi)品种Q?960q量增加到5万担Q创历史最高水q뀂后因茶cd局的变_(d)?#8220;U?#8221;?#8220;l?#8221;Q坦z工夫尚存无几。近q来Q经有关部门的努力,坦洋工夫又有所恢复和发展,1988q量达8000余担?br>
  坦洋工夫外Şl长匀_(d)带白毫,色泽乌黑有光Q内质香x鲜甜和,汤鲜艛_金黄Ԍ叶底U匀光滑。其中坦z、寿宁、周宁山区所产工夫茶Q香味醇厚,条烦(ch)较ؓ(f)肥壮Q东南(f)L(fng)霞一带所产工夫茶 色鲜亮,条ŞU丽?/div>

colys 2007-11-21 21:47 发表评论
]]>
Web 2.0 ~程思想Q?6条法?/title><link>http://www.shnenglu.com/colys/archive/2007/10/08/33749.html</link><dc:creator>colys</dc:creator><author>colys</author><pubDate>Mon, 08 Oct 2007 03:43:00 GMT</pubDate><guid>http://www.shnenglu.com/colys/archive/2007/10/08/33749.html</guid><wfw:comment>http://www.shnenglu.com/colys/comments/33749.html</wfw:comment><comments>http://www.shnenglu.com/colys/archive/2007/10/08/33749.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/colys/comments/commentRss/33749.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/colys/services/trackbacks/33749.html</trackback:ping><description><![CDATA[#1  Web 2.0 ~程思想Q?6条法?br><br>原文QThinking in Web 2.0: Sixteen Ways<br>作者:(x)Dion Hinchcliffe<br>URL:<a target="_blank">http://sd.csdn.net/n/20060518/90603.html</a><br><br>1、在你开始之前,先定一个简单的目标。无Z是一个Web 2.0应用的创还是用Ph晰的构思你的目标。就?#8220;我需要保存一个书{?#8221;或?#8220;我准备帮助h们创建可~辑的、共享的面”q样的目标,让你保持最基础的需求。很多Web 2.0应用的最初吸引之处就是它的简单,避免q藏了那些多余的复杂性。站在创的立场Q可以想象Google的几乎没有内容的主页Q还有del.icio.us的简单的U条。从最l用L(fng)角度来看Q与之齐名的是Diggdot.us所提供的初始化面。你能够q且希望加入更多功能Q但是先做好最开始的。在一个时候只做一个特性,完成一个目标。这听v来很太过于单U化了,但它?yu)你更加专注,而且你也?x)明白我的意思?br><br>2、链接是最基础的思想。这是我们UC为Web的一个理由。链接是把Web中各U实体连接v来的最基本的元素。你的信息、你的关pR你的导航,甚至是能够被写成URL的Q何内宏V这里有一个链接应该遵循的规则Q其实你也不必严格的遵守Q:(x)<br><br>??? 1. Web上的M东西都是可以被URI或者是URL所q接的?br>??? 2. 把所有的链接都保存ؓ(f)他的原始出处Q这样可以让你与M人、在M地方、Q何时候都能分享它?br>??? 3. W二条中M时候的前提是链接必L持久的,它不?x)在没有M~由的情况下被改变或者是消失?br>??? 4. 链接应该是hcdȝ、稳定的、ƈ且能够自我诠释的?<br><br>3、数据应该属于创建它的h。是的,你听我的。Q何用户创建的、A(ch)献的或分享的都是他们自己的,除非他们很明昄攑ּq个权力来让你自由处|。他们A(ch)献到Web上的M信息都应该是可编辑的、能被删除的、ƈ且能够取消共享,无论在Q何时候,只要用户愿意。这也包含了那些间接的数据,像他们所兛_的记录、日志、浏览历双Ӏ网站访问信息,或者是M可以被跟t的信息。所有的|站必须清晰单的陈诉那些信息是用户创建的Qƈ且提供他们停止创建的Ҏ(gu)Q甚x清除的方法?br><br>4、数据优先,体验与功能其ơ。无论它是文本、图片、音频还是视频,W(xu)eb最l还是把q些解析为数据。换句话_(d)你无法脱L据去呈现内容。所有这些数据都通过那些易于发现的URL来定位(参见W?条)。通过另一UŞ式来看待q些QW(xu)eb最l是名词优先Q动词其ơ,虽然最q正在向动词偏移。来看看名词的例子:(x)日历的条目、家庭照片、股h(hun)根{还有一些动词的例子Q定一个约?x)、共享一张图片、买一份股?br><br>5、做好积极分享一切的准备。尽可能的分享一切,你所拥有的所有数据,你所提供的所有服务。鼓׃遵@原有意图的用,提倡A(ch)献,不要那些需要分享的内容坚持讄为私有的。在分n与发C后,提供易于使用的浏览方式是显而易见的需求。ؓ(f)什么呢Q话说回来,你会(x)从别人的׃n之中受益匪浅。注意:(x)q里没有许可让你MR犯版权保护的法律Q你不能够去分n你刻录的DVD或者是拥有商业版权音乐Q因Z已经同意不会(x)d享这些东ѝ但是你可以发现q分享那些完全开攄媒体内容。一个小的Q你可以学习(fn)一下Creative Commons licenseQ共创协议).<br><br>6、Web是一个^収ͼ要让它成ѝ当?dng)我们q有很多其他的^収ͼWindows、Linux、MacQ,但是那些已经不是重点了。换句话_(d)W(xu)eb是无法脱ȝq_Q不?x)中断的q_Q你可以通过各种方式L展的q_。你在Web上提供的数据与服务将?x)成为Web一部分Q最l你?x)在Webq_的某一处扮演你的角艌Ӏ扮演好你的角色q照֥后来者?br><br>7、理解与信奉“阶梯?#8221;。现在的Web来大Q几乎蔓延到了全世界的所有国Ӟq且已经拥有?0亿用戗我的观Ҏ(gu)Web的各个组成部分存在着l微的区别和不同Q就像不同地方的用户那样。例如Web的设计部分:(x)易用性永q优先于速度、可靠性、重用性与可集成性。你也应该提供同L(fng)体验l你的用戗它已经被一ơ又一ơ的被h们在文档中强调,忠诚的用户很快会(x)成ؓ(f)专业的用P他们期待更快的速度q有更多。退一步支持他们。同P也有很多很多的用户会(x)q入q个阶梯的底端,如你所期待的那栗他们可能不?x)说你的语言Q不熟?zhn)你的文化Q甚至不知道是如何到q里的。所以你需要向他们表达清楚?br><br>8、Q何东襉K是可~辑的。或者是它应该被~织的更好。要定的是Q只有很的东西是不能被~辑的,剩下的都可以Q这是一个可写的Web。这q不意味着原始内容的丢失,而通常被理解ؓ(f)用户能够很容易的对内容加以评论,或者评注内Ҏ(gu)在那里发现的。如果你Ҏ(gu)应用的好Q他们能够比你所惌的做的更多(把内容串hq且l予原始内容来创qQ等{)?br><br>9、Web上的w䆾是神圣的。不q的是,qƈ不意味着你能够得到更多的隐私Q这完全是上个世U的xQ。但对n份的验证是必要的Q你应该感谢那些只需一个邮件地址p定你n份的服务。这意味只要你对你的用户承诺了,你就必须保证他们的隐U安全。必要的时候,在这个世界的某处你还得ؓ(f)你的用户n而出Q向当地的权威挑战。如果你没有打算那样做,你就得把实际情况告诉你的用户。另一斚wQ如果n份是必须的,不要试图伪装它,不然在某一天我们将?x)在Web上放弃我们的最后一点点隐私的权利?br><br>10、了解流行的标准q且使用他们。从一个消费者或者是创作者的立场来看Q数据将?x)以不同的格式与M一个h交换。同时这L(fng)数据也会(x)反过来促q标准的完善与采U뀂这通常意味像RSS?OPML、XHTML、Simple XML、JSON{简单标准的行Q而避免SOAP、XSDQ还有RDF、ATOM也一P使用它们?x)给我的内心带来痛苦。请你也Z所钟爱的标准投上一来支持它们?br><br>11、遵循无意用的规律。如果你把非常有的数据和服务用q泛使用的格式开攑֒׃n出去Q你会(x)得到你所应得的,其他Z会(x)Z你的那一块Webq_来构建。或许还?x)从别h那里得到更多Q所以ؓ(f)q个做一下准备比较好。我已记不清有多次我看C个播客(podcastingQ服务因为流行过渡而导致服务垮掉,是因ؓ(f)他们?Slashdot和del.icio.usl收录了。这一点要知道Q网l上的大量化意味着如果一个内定w常有,即是一个很的角落也会(x)得到惊h的访问量。鼓׃用这U方式,它还是非常有价值的Q前提是你要有所准备?br><br>12、粒化你的数据与服务。我们应该在很早以前明白这些,大规模集成的数据仅仅适用于无需理的下载与扚w操作。分解你的数据,让他们独立成可描q的URL地址Q对你的服务也一栗反q来_(d)你不要创Z些巨大的、复杂的、像圣诞?wi)那L(fng)数据l构和服务。保持简单,要非常的单。让q些分离的片断能够容易的被重l和发现?br><br>13、提供用戯够单独受益的数据和服务。渐渐依赖于q种C会(x)化参与是存在风险的,你需要让你的用户有一点点动机来A(ch)献时间、热情和信息Q除非他们能够直接受益。社?x)化分n比个体行为的利益大很多,除非你能够激发用L(fng)个h动机Q否q你无法n受这份厚C{?br><br>14、让用户l织q过滤信息。不一定是必须的,但却是非帔R要的。让用户以他们自q方式来标注和l织数据Q因Z自己是永q无法及(qing)时的处理他们的。用户会(x)按照他们自己理解的最x式来处理q构建。要保证你的Web服务能够按照用户所需所想的方式来工作。这也是标签QtaggingQ和通俗分类Qfolksonomies Q的方式如此成功的主要因素?br><br>15、提供丰富的用户体验。Web一直都在和本地的应用程序进行着Ȁ烈的竞争。ؓ(f)什么?因ؓ(f)本地E序q是感觉上好一些,速度也快一些。但是这不会(x)长久的(信?q或?5q后Q这U竞争就不存在了Q。是的,我在谈论Rich Internet Applications, Ajax, q有那些不可思议的交互应用。他们让Web成ؓ(f)了一个真正的“无^?#8221;的^収ͼ如果你知道我是怎么想的?br><br>16、信奉ƈ支持快速改q和反馈。这个通常意味着加快步伐Q但也意味着使用轻量U的工具、技术和不要做出那些适得其反的痛苦决定(例如使用一个被层层环绕的Ajax框架来代替可以通过混合来实现的Q或者用C++来构建所有的东西Q其实用Ruby?x)更好一些)。这同时也意味着需要一个非常快速的方式来处理错误报告,修复BugQ释放新版本。从一个用L(fng)角度来看Q报告你所发现的Q何问题,q有那些你经常抱怨的地方Q甚至那些都不是一个Bug?br><br>当然QW(xu)eb 2.0是一个极其广泛和深奥的话题,没有一个h能够列D出它的所有重点和特征。如果你Ҏ(gu)充满了兴,误一Ҏ(gu)间来补充我没有提到的地方。我惌是Web 2.0的参与性吧Q?nbsp; <br><img src ="http://www.shnenglu.com/colys/aggbug/33749.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/colys/" target="_blank">colys</a> 2007-10-08 11:43 <a href="http://www.shnenglu.com/colys/archive/2007/10/08/33749.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ruby 书箱介绍http://www.shnenglu.com/colys/archive/2007/08/24/30748.htmlcolyscolysFri, 24 Aug 2007 02:29:00 GMThttp://www.shnenglu.com/colys/archive/2007/08/24/30748.htmlhttp://www.shnenglu.com/colys/comments/30748.htmlhttp://www.shnenglu.com/colys/archive/2007/08/24/30748.html#Feedback0http://www.shnenglu.com/colys/comments/commentRss/30748.htmlhttp://www.shnenglu.com/colys/services/trackbacks/30748.htmlhttp://www.cnblogs.com/hardrock/archive/2006/08/18/480668.html

colys 2007-08-24 10:29 发表评论
]]>
VS2005q行W(xu)eb调试的浏览器选择更改http://www.shnenglu.com/colys/archive/2007/07/03/27439.htmlcolyscolysTue, 03 Jul 2007 14:25:00 GMThttp://www.shnenglu.com/colys/archive/2007/07/03/27439.htmlhttp://www.shnenglu.com/colys/comments/27439.htmlhttp://www.shnenglu.com/colys/archive/2007/07/03/27439.html#Feedback0http://www.shnenglu.com/colys/comments/commentRss/27439.htmlhttp://www.shnenglu.com/colys/services/trackbacks/27439.htmlVS2005q行W(xu)eb调试的浏览器选择
不幸Q安装了firefox后,安装VS2005QVSq行web调试时就用了firefox而不是ie,q应该是默认览器搞?/p>

更改Ҏ(gu):

打开 C:\Documents and Settings\Administrator\Local Settings\Application Data\Microsoft\VisualStudio\8.0\browsers.xml

 
<?xml version="1.0" ?> 
<BrowserInfo>
<Browser>
  
<Name>firefox.exe</Name> 
  
<Path>"F:\PROGRA~1\MOZILL~1\FIREFOX.EXE"</Path> 
  
<Resolution>0</Resolution> 
  
<IsDefault>False</IsDefault> 
  
</Browser>
<Browser>
  
<Name>Microsoft Internet Explorer</Name> 
  
<Path>"C:\Program Files\Internet Explorer\iexplore.exe"</Path> 
  
<Resolution>0</Resolution> 
  
<IsDefault>True</IsDefault> 
<DDE>
  
<Service>IExplore</Service> 
  
<TopicOpenURL>WWW_OpenURL</TopicOpenURL> 
  
<ItemOpenURL>"%s",,0xffffffff,3,,,,</ItemOpenURL> 
  
<TopicActivate>WWW_Activate</TopicActivate> 
  
<ItemActivate>0xffffffff,0</ItemActivate> 
  
</DDE>
  
</Browser>
<InternalBrowser>
  
<Resolution>0</Resolution> 
  
<IsDefault>False</IsDefault> 
  
</InternalBrowser>
  
</BrowserInfo>
第一?/span><Browser>l点,也就?/span>firefox?/span><IsDefault>改ؓ(f) False ,?IExplore 的一个改为True
或者直接删除此文g


colys 2007-07-03 22:25 发表评论
]]>
异步IO性能探究[转]http://www.shnenglu.com/colys/archive/2007/07/01/27336.htmlcolyscolysSun, 01 Jul 2007 13:23:00 GMThttp://www.shnenglu.com/colys/archive/2007/07/01/27336.htmlhttp://www.shnenglu.com/colys/comments/27336.htmlhttp://www.shnenglu.com/colys/archive/2007/07/01/27336.html#Feedback0http://www.shnenglu.com/colys/comments/commentRss/27336.htmlhttp://www.shnenglu.com/colys/services/trackbacks/27336.html

一、异步IO
        对于应用E序而言Q有两种cd的IO调用Q即同步IO 与异步IO。其本质的区别是Q同步IO?x)block当前的调用线E,而异步IO则允许发起IOh的调用线El执行,{到IOh被处理后Q会(x)通知调用 U程。在windowsq_上,应用E序可以调用CreateFile API, q过讄FILE_FLAG_OVERLAPPED标志来决定是否发起异步IOh?br>        对于异步的IOhQ其最大的好处是:(x)慢速的IOh相对于应用程序而言是异步执行,q样可以极大提高应用E序的处理吞吐量。发起IOh的应用程序需要关心的是IO执行完成的结果,而不必忙{IOh执行的过E?br>       事实上,无论对于同步IOQ还是异步IO,当IOh发送到device driver后,device driver的执行L异步?当它接到IOh之后QM(x)马上q回lIO System。而IO System是否立即q回l调用线E,则取决于FILE_FLAG_OVERLAPPED标志的设|?如下图:(x)


二、异步IO的同步问题?br>        我们使用异步IOQ是Z提高应用E序的处理吞吐量。但是,当异步IO不再异步Ӟ无论你是否设|FILE_FLAG_OVERLAPPED标志Q,应用 E序的性能?x)受到极大的影响。根据Microsoft Knowledge Base 156932, 在下列几U情况下Q异步IO?x)失d的异步性,而表现出同步的性质Q?br>1Q如果文件用了NTFS compression压羃Q则system driver不会(x)异步地存取这L(fng)文g?br>2Q扩展文仉度的IO操作不会(x)是异步操作?br>3QCache机制。如果IO操作使用了file system cacheQ则q样的IO操作?x)被当成同步IO,而非异步IO?br>即你用了FILE_FLAG_OVERLAPPED标志。在q种情况下,
a.如果需要读取的数据已经在Cache里,那么I/O drivers?x)认L(fng)IOh可以被立卛_理,其结果是ReadFile 或者WriteFile调用q回TRUEQ表C是Q同步处理完成?br>b. 如果需要读取的数据不在Cache里,windows NT的file system是用page-faulting机制来实现cache理Q而page-faultingL被同步处理, Windows NT没有提供异步的page-faulting机制。的, file system driver使用了线E池来缓解这一问题Q但是,当应用程序发L(fng)IOh_多时Q线E池q是不能应付的?br>        在我们开发基于异步IO应用E序Ӟ应该避免上述问题的出玎ͼ因ؓ(f)它们?x)ɽE序的性能大打折扣?br>那么Q对于Cache,我们如何避免呢?{案是:(x)请用FILE_FLAG_NO_BUFFERING标志。这个标志会(x)使异步IO真实地异步执行?br>三、性能的测试数据(仅供参考)?br>      我在我的机器上,单地对用FILE_FLAG_NO_BUFFERING标志的异步IO,与不使用FILE_FLAG_NO_BUFFERING标志的异步IOq行了对比?br>操作Q顺序读?G的文件?br>x轴表C:(x)每次d的字节数Q单位:(x)K/每次Q?br>Y轴表C:(x)d完成所需要的旉。(单位Qmillisecond)
注意Q每ơ测试读取的内容L是相{的Q?000MQ?br>例如Q如果每ơ读?28k,则需要读?000?128k*8000 = 1000M)?br>如果每次d256k,则需要读?000?256k*4000 = 1000M)?
_红色的U没有用FILE_FLAG_NO_BUFFERING标志,而黄色的U用了FILE_FLAG_NO_BUFFERING标志?/p>

从以上的数据,我们可以得出以下l论:
1) 当用FILE_FLAG_NO_BUFFERING标志Q应用程序的性能?x)极大提高,大概?0%的提高?br>2Q? 在用异步IO的时候,q有一个注意的问题是:(x)当你每次d的字节数增大的时候,性能也会(x)提高。尤其在于1024kӞ当增大次d的字节数Q性能都有 明显的提高。在混合了网l传输等复杂因素的应用程序开发过E中Q徏议将该D|ؓ(f)可配|的参数Q通过调整该参敎ͼ使你的应用达到最好的性能?br>

参考资料:(x)

1Q?nbsp;Microsoft Knowledge Base 156932

2)  Microsoft Windows Internals, Fourth Edition.



colys 2007-07-01 21:23 发表评论
]]>
2007q度逻辑竞赛 (?5只鸽子中挑出飞的最快的?只鸽?http://www.shnenglu.com/colys/archive/2007/06/03/25384.htmlcolyscolysSun, 03 Jun 2007 08:34:00 GMThttp://www.shnenglu.com/colys/archive/2007/06/03/25384.htmlhttp://www.shnenglu.com/colys/comments/25384.htmlhttp://www.shnenglu.com/colys/archive/2007/06/03/25384.html#Feedback15http://www.shnenglu.com/colys/comments/commentRss/25384.htmlhttp://www.shnenglu.com/colys/services/trackbacks/25384.html?户h家AQBQCQDQEQ每户h安M5只鸽子,一?5只?br>
q?户h家想从一p25只鸽子中挑出飞的最快的?只鸽子?br>
大家选定了一个出发点和到辄Q每ơ只能放?只鸽子,在这h况下可以看到每次从出发地到目的地5只鸽子到辄先后序Q但是没有计时器来计时间?br>
?题目中不要考虑鸽子体能Q是否匀速,是否直线飞行{等情况Q可以理惌定速度均匀而且E速?br>==============================================

请问Q?br>A)在确保能挑出25只鸽子中飞的最快的5只的前提下,最需要多次比赛Q每ơ只?只)能保证能挑出最快的5只?br>
B)怎样比赛Q?br>

colys 2007-06-03 16:34 发表评论
]]>
vs2003安装和运行可能和输入法有?/title><link>http://www.shnenglu.com/colys/archive/2007/05/27/24959.html</link><dc:creator>colys</dc:creator><author>colys</author><pubDate>Sun, 27 May 2007 15:50:00 GMT</pubDate><guid>http://www.shnenglu.com/colys/archive/2007/05/27/24959.html</guid><wfw:comment>http://www.shnenglu.com/colys/comments/24959.html</wfw:comment><comments>http://www.shnenglu.com/colys/archive/2007/05/27/24959.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/colys/comments/commentRss/24959.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/colys/services/trackbacks/24959.html</trackback:ping><description><![CDATA[  在运行vs2003安装时老提C我是要更新q是删除,我都q没装怎么?x)有q个呢!后来仔细看了看这个提C是属于我装的一个极点输入法? 卸蝲掉后安装正常!<br> <br>   事情可不是都那么?安装后运行一切正?ƣ喜.....׃我好多时?<br> 但不q多?在下一ơ开机后,它Ş工了! 提示DI.DLL找不? 多次q行q是如此! 想都不想,重装! 又是一늭?..<br> 再运?oh,shit "找不?dll 文g" <br> <br>   无语..Nq就是microsoft的东东吗? Z么以前安装和使用没遇到q问题吗? H然一个思想在我脑v里Q?既然安装和输入法?x)有?但运行会(x)不会(x)也如?但极点五W不是被我卸载掉了吗? N是五W加加的问题?(我装有两个五W输入法~~) 于是乎卸载掉五笔加加!再装?..{待...<br> <br> l于.....正常?..感慨ing.....................<br> <br><img src ="http://www.shnenglu.com/colys/aggbug/24959.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/colys/" target="_blank">colys</a> 2007-05-27 23:50 <a href="http://www.shnenglu.com/colys/archive/2007/05/27/24959.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>每个开发h员现在应该下载的十种必备工具[转蝲]http://www.shnenglu.com/colys/archive/2007/05/18/24353.htmlcolyscolysFri, 18 May 2007 15:11:00 GMThttp://www.shnenglu.com/colys/archive/2007/05/18/24353.htmlhttp://www.shnenglu.com/colys/comments/24353.htmlhttp://www.shnenglu.com/colys/archive/2007/05/18/24353.html#Feedback5http://www.shnenglu.com/colys/comments/commentRss/24353.htmlhttp://www.shnenglu.com/colys/services/trackbacks/24353.html
• 用于~写单元试?nbsp;NUnit
 
• 用于创徏代码文档资料?nbsp;NDoc
 
• 用于生成解决Ҏ(gu)?nbsp;NAnt
 
• 用于生成代码?nbsp;CodeSmith
 
• 用于监视代码?nbsp;FxCop
 
• 用于~译量代码?nbsp;Snippet Compiler
 
• 两种不同的{换器工具QASP.NET 版本转换器和 Visual Studio .NET 目转换?br> 
• 用于生成正则表达式的 Regulator
 
• 用于分析E序集的 .NET Reflector
 

本文使用了下列技术:(x)

.NET、C# ?nbsp;Visual Basic .NET、Visual Studio .NET

除非(zhn)用能够获得的最?jng)_P否则(zhn)无法期望生成一的应用E序。除了像 Visual Studio®.NET q样的著名工具以外,q可以从 .NET C֌获得许多型的、不太ؓ(f)人所知的工具。在本文中,我将向?zhn)介绍一些目前可以获得的、面?nbsp;.NET 开发的最?jng)_费工兗我引导?zhn)完成一个有兛_何用其中每U工L(fng)快速教E?nbsp;?nbsp;一些工具在许多时候可以(zhn)节U一分钟Q而另一些工具则可能d改变(zhn)编写代码的方式。因为我要在本篇文章中介l如此之多的不同工具Q所以我无法详尽讨论其中每种工具Q但(zhn)应该了解到有关每种工具的够信息,以便判断哪些工具Ҏ(gu)的项目有用?br>

本页内容
 Snippet Compiler 
 Regulator 
 CodeSmith 
 生成自定义模?nbsp;
 NUnit 
 ~写 NUnit 试 
 FxCop 
 Lutz Roeder ?nbsp;.NET Reflector 
 NDoc 
 NAnt 
 实际q行?nbsp;NAnt 
 转换工具 
 结 

Snippet Compiler
Snippet Compiler 是一个基?nbsp;Windows® 的小型应用程序,(zhn)可以通过它来~写、编译和q行代码。如果?zhn)h较小的代码段Qƈ且?zhn)不希望?f)其创建完整的 Visual Studio .NET 目Q以?qing)伴随该目的所有文ӞQ则该工具将很有用?br>
例如Q假设我希望向?zhn)说明如何?nbsp;Microsoft?.NET 框架中启动另一个应用程序。在 Snippet Compiler 中,我将通过新徏一个能够创建小型控制台应用E序的文件开始。可以在该控制台应用E序?nbsp;Main Ҏ(gu)内部创徏代码片段Q而这正是我要在这里做的事情。下面的代码片段演示了如何从 .NET 框架中创事本实例Q?nbsp;

System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName= "notepad.exe";
proc.Start();
proc.WaitForExit();

当然该代码片D|w无法编译,而这正是 Snippet Compiler 的用武之地。图 1 昄?nbsp;Snippet Compiler 中的q一代码CZ?br>

按此在新H口打开囄
?nbsp;1 Snippet Compiler


要测试该代码片段Q只L playQ运行)按钮Q绿色三角ŞQ,它就?x)在调试模式下运行。该代码片段生成一个弹出式控制台应用程序,q且显C事本。当(zhn)关闭记事本Ӟ该控制台应用E序也将关闭?br>
我个h而言Q我是在试为某位向我求助的人士创徏一个小型示例时Q才发现 Snippet Compiler 是如此宝늚 ?nbsp;如果不用该工具Q则我通常必须新徏一个项目,保每个部分都能~译通过Q然后将代码片段发送给求助者,q删除该目。Snippet Compiler 使得q一q程变得更加Ҏ(gu)、更加愉快?br>
Snippet Compiler ?nbsp;Jeff Key ~写Qƈ且可以从 http://www.sliver.com/dotnet/SnippetCompiler 下蝲?br>
q回首
Regulator
Regulator 是最后一个添加到我的头等工具清单中的。它是一U很有特色的工具Q能够生成和测试正则表辑ּ变得很容易。h们对正则表达式重C生了兴趣Q因为它们在 .NET 框架中受到很好的支持。正则表辑ּ用来Z字符、频率和字符序定义字符串中的模式。它们最常见的用途是作ؓ(f)验证用户输入有效性的手段或者作为在较大字符串中查找字符串的Ҏ(gu) ?nbsp;例如Q在 Web 上查找 URL 或电(sh)子邮件地址?br>
Regulator 使?zhn)可以输入一个正则表辑ּ以及(qing)一些针对其q行该表辑ּ的输入内宏V这P在应用程序中实现该正则表辑ּ之前Q?zhn)可以了解它将产生什么效果以?qing)它(yu)返回哪些种cȝ匚wV图 2 昄了带有简单正则表辑ּ?nbsp;Regulator?br>
文档中包含该正则表达?nbsp;?nbsp;在该CZ中,它是 [0-9]*Q应该匹配一行中L数量的数字。右下侧的框中含有针对该正则表达式的输入Q而左下侧的框昄了该正则表达式在输入内容中找到的匚wV在q样的单独应用程序中~写和测试正则表辑ּQ要比尝试在(zhn)的应用E序中处理它们容易得多?br>
Regulator 中的最?jng)_能之一是能够在 regexlib.com 搜烦(ch)联机正则表达式库。例如,如果(zhn)在搜烦(ch)框中输入字符?#8220;phone”Q?zhn)找?nbsp;20 U以上能够匹配各U电(sh)话号码的不同的正则表辑ּQ包括用于英国、澳大利亚的表达式以?qing)其他许多?sh)话号码。Regulator ?nbsp;Roy Osherove ~写Qƈ且可以在 http://royo.is-a-geek.com/regulator 下蝲?br>
q回首
CodeSmith
CodeSmith 是一U基于模板的代码生成工具Q它使用cM?nbsp;ASP.NET 的语法来生成Lcd的代码或文本。与其他许多代码生成工具不同QCodeSmith 不要求?zhn)订阅特定的应用程序设计或体系l构。?nbsp;CodeSmithQ可以生成包括简单的强类型集合和完整应用E序在内的Q何东ѝ?br>
当?zhn)生成应用E序Ӟ(zhn)经帔R要重复完成某些特定的dQ例如编写数据访问代码或者生成自定义集合。CodeSmith 在这些时候特别有用,因ؓ(f)(zhn)可以编写模板自动完成这些Q务,从而不仅提高?zhn)的工作效率,而且能够自动完成那些最Z味的d。CodeSmith 附带了许多模板,包括对应于所?nbsp;.NET 集合cd的模板以?qing)用于生成存储过E的模板Q但该工L(fng)真正威力在于能够创徏自定义模ѝؓ(f)了(zhn)能够入门,我将快速介l一下如何生成自定义模板?br>
q回首
生成自定义模?br>CodeSmith 模板只是一些可以在L文本~辑器中创徏的文本文件。它们的唯一要求是用 .cst 文g扩展名来保存它们。我要生成的示例模板将接受一个字W串Q然后基于该字符串生成一个类。创建模板的W一步是d模板_(d)它可声明模板的语a、目标语a以及(qing)要模板说明:(x) 

<%@ CodeTemplate Language="C#"    
   TargetLanguage="C#" 
   Description="Car Template" %>

模板的下一部分是属性声明,在这里可声明在模板每次q行时指定的属性。就该模板而言Q我要用的唯一属性只是一个字W串Q因此属性声明如下所C:(x) 

<%@ Property Name="ClassName" Type="String" Category="Context" 
    Description="Class Name" %>

该属性声明将?nbsp;ClassName 属性出现在 CodeSmith 属性窗口中Q以便可以在模板q行时指定它。下一步是实际生成模板MQ它非常cM于用 ASP.NET q行~码。?zhn)可以在?nbsp;3 中查看该模板的主体。[~辑更新 ?nbsp;6/16/2004Q图 3 中的代码已被更新Q以便对多线E操作保持安全。]

正如(zhn)所见,该模板接受字W串输入q用该cd生成单独的类。在模板M中,使用?nbsp;ASP.NET 中相同的起始和结束标记。在该模板中Q我只是插入属性|但?zhn)q可以在q些标记内部使用Lcd?nbsp;.NET 代码。在该模板完成之后,(zhn)就可以通过双击它或者从 CodeSmith 应用E序中打开它将其加载到 CodeSmith 中。图 4 昄了已l加载到 CodeSmith 中的该模ѝ?br>
(zhn)可以看到左侧的属性正是我在该模板中声明的属性。如果我输入“SingletonClass”作ؓ(f)cdQƈ单击 Generate 按钮Q则生成图 3 的底部显C的cR?br>
CodeSmith 使用h相当Ҏ(gu)Q如果能够正应用,则可以生一些o(h)人难以置信的l果。面向代码生成的应用E序中最常见的部分之一是数据访问层。CodeSmith 包括一个名?nbsp;SchemaExplorer 的特D的E序集,可用来从表、存储过E或几乎M其他 SQL Server? 对象生成模板?br>
CodeSmith ?nbsp;Eric J. Smith ~写Qƈ且可以在 http://www.ericjsmith.net/codesmith 下蝲?br>
q回首
NUnit
NUnit 是ؓ(f) .NET 框架生成的开放源代码单元试框架。NUnit 使?zhn)可以用(zhn)喜欢的语a~写试Q从而测试应用程序的特定功能。当(zhn)首ơ编写代码时Q单元测试是一U测试代码功能的很好Ҏ(gu)Q它q提供了一U对应用E序q行回归试的方法。NUnit 应用E序提供了一个用于编写单元测试的框架Q以?qing)一个运行这些测试和查看l果的图形界面?br>
q回首
~写 NUnit 试
作ؓ(f)CZQ我测?nbsp;.NET 框架?nbsp;Hashtable cȝ功能Q以定是否可以d两个对象q且随后(g)索这些对象。我的第一步是d?nbsp;NUnit.Framework E序集的引用Q该E序集将赋予我对 NUnit 框架的属性和Ҏ(gu)的访问权。接下来Q我创Z个类q用 TestFixture 属性标记它。该属性 NUnit 可以知道该类包含 NUnit 试Q?nbsp;

using System;
using System.Collections;
using NUnit.Framework;

namespace NUnitExample
{
    [TestFixture]
    public class HashtableTest {
        public HashtableTest() {
            
        }
    }
}

下一步,我将创徏一个方法ƈ?nbsp;[Test] 属性标记它Q以?nbsp;NUnit 知道该方法是一个测试。然后,我将建立一?nbsp;Hashtable q向其添加两个|再?nbsp;Assert.AreEqual Ҏ(gu)查看我是否可以检索到与我d?nbsp;Hashtable 的值相同的|如下面的代码所C:(x) 

[Test]
public void HashtableAddTest()
{
    Hashtable ht = new Hashtable();
            
    ht.Add("Key1", "Value1");
    ht.Add("Key2", "Value2");

    Assert.AreEqual("Value1", ht["Key1"], "Wrong object returned!");
    Assert.AreEqual("Value2", ht["Key2"], "Wrong object returned!");
}

q将认我可以首先向 Hashtable 中添加值ƈ随后(g)索相应的?nbsp;?nbsp;q是一个很单的试Q但能够表现 NUnit 的功能。存在许多测试类型以?qing)各U?nbsp;Assert Ҏ(gu)Q可使用它们来测试代码的每个部分?br>
要运行该试Q我需要生成项目,?nbsp;NUnit 应用E序中打开生成的程序集Q然后单?nbsp;Run 按钮。图 5 昄了结果。当我看到那个大的绿色条UҎ(gu)Q我有一U兴奋和头晕的感觉,因ؓ(f)它让我知道测试已l通过了。这个简单的CZ表明 NUnit 和单元测试是多么方便和强大。由于能够编写可以保存的单元试Qƈ且每当?zhn)更改代码旉可以重新q行该单元测试,(zhn)不仅可以更Ҏ(gu)地检到代码中的~陷Q而且最l能够交付更好的应用E序?br>

按此在新H口打开囄
?nbsp;5 NUnit


NUnit 是一个开放源代码目Qƈ且可以从 http://www.nunit.org 下蝲。还有一个优U?nbsp;NUnit Visual Studio .NET 外接E序Q它使?zhn)可以直接?nbsp;Visual Studio 中运行单元测试。?zhn)可以?nbsp;http://sourceforge.net/projects/nunitaddin 扑ֈ它。有?nbsp;NUnit ?qing)其在测试驱动开发中的地位的详细信息Q请参阅文章“Test-Driven C#: Improve the Design and Flexibility of Your Project with Extreme Programming Techniques”QMSDN ®Magazine 2004 q?nbsp;4 月刊Q?br>
q回首
FxCop
.NET 框架非常强大Q这意味着存在创徏优秀应用E序的极大可能,但是也同样存在创建劣质程序的可能。FxCop 是有助于创徏更好的应用程序的工具之一Q它所采用的方法是Q(zhn)能够分析程序集Qƈ使用一些不同的规则来检查它是否W合q些规则。FxCop 随附了由 Microsoft 创徏的固定数量的规则Q但(zhn)也可以创徏q包括?zhn)自己的规则。例如,如果(zhn)决定所有的c都应该h一个不带Q何参数的默认构造函敎ͼ则可以编写一条规则,以确保程序集的每个类上都h一个构造函数。这P无论是谁~写该代码,(zhn)都获得一定程度的一致性。如果?zhn)需要有兛_定义规则的详l信息,请参?nbsp;John Robbins 的有兌主题?nbsp;Bugslayer 专栏文章QMSDN ® Magazine 2004 q?nbsp;6 月刊Q?br>
那么Q让我们观察一下实际运行的 FxCopQƈ且看一下它在我一直在处理?nbsp;NUnitExample E序集中扑ֈ哪些错误。当(zhn)打开 FxCop Ӟ(zhn)首先需要创Z?nbsp;FxCop 目Q然后向其添加?zhn)要测试的E序集。在该E序集添加到目以后Q就可以?nbsp;AnalyzeQFxCop 分析该E序集。图 6 中显CZ在该E序集中扑ֈ的错误和警告?br>
FxCop 在我的程序集中找C几个问题。?zhn)可以双击某个错误以查看详l信息,包括规则说明以及(qing)在哪里可以找到更多信息。((zhn)可以做的一件有的事情是在框架E序集上q行 FxCop q查看发生了什么事情。)

FxCop 可以帮助(zhn)创建更好的、更一致的代码Q但它无法补偿低劣的应用E序设计或非常简单拙劣的~程。FxCop 也不能替代对{代码检查,但是因ؓ(f)它可以在q行代码(g)查之前捕获大量错误,所以?zhn)可以p更多旉来解决严重的问题Q而不必担心命名约定。FxCop ?nbsp;Microsoft 开发,q且可以?nbsp;http://www.gotdotnet.com/team/fxcop 下蝲?br>
q回首
Lutz Roeder ?nbsp;.NET Reflector
下一个必不可的工具UCؓ(f) .NET ReflectorQ它是一个类览器和反编译器Q可以分析程序集q向(zhn)展C它的所有秘密?NET 框架向全世界引入了可用来分析MZ .NET 的代码(无论它是单个c还是完整的E序集)的反概c(din)反还可以用来(g)索有关特定程序集中包含的各种cR方法和属性的信息。?nbsp;.NET ReflectorQ?zhn)可以览E序集的cdҎ(gu)Q可以分析由q些cdҎ(gu)生成?nbsp;Microsoft 中间语言 (MSIL)Qƈ且可以反~译q些cdҎ(gu)q查?nbsp;C# ?nbsp;Visual Basic ®.NET 中的{h(hun)cdҎ(gu)?br>
Z演示 .NET Reflector 的工作方式,我将加蝲和分析前面已l显C的 NUnitExample E序集。图 7 昄?nbsp;.NET Reflector 中加载的该程序集?br>

按此在新H口打开囄
?nbsp;7 NUnitExample E序?br>

?nbsp;.NET Reflector 内部Q有各种可用来进一步分析该E序集的工具。要查看构成某个Ҏ(gu)?nbsp;MSILQ请单击该方法ƈ从菜单中选择 Disassembler?br>
除了能够查看 MSIL 以外Q?zhn)q可以通过选择 Tools 菜单下的 Decompiler 来查看该Ҏ(gu)?nbsp;C# 形式。通过?nbsp;Languages 菜单下更Ҏ(gu)的选择Q?zhn)q可以查看该Ҏ(gu)被反~译?nbsp;Visual Basic .NET ?nbsp;Delphi 以后的Ş式。以下ؓ(f) .NET Reflector 生成的代码:(x) 

public void HashtableAddTest()

    Hashtable hashtable1;
    hashtable1 = new Hashtable();
    hashtable1.Add("Key1", "Value1");
    hashtable1.Add("Key2", "Value2");
    Assert.AreEqual("Value1", hashtable1["Key1"], 
       "Wrong object returned!");
    Assert.AreEqual("Value2", hashtable1["Key2"],
       "Wrong object returned!");
}

前面的代码看h非常像我Ҏ(gu)实际~写的代码。以下ؓ(f)该程序集中的实际代码Q?nbsp;

public void HashtableAddTest()
{
    Hashtable ht = new Hashtable();
            
    ht.Add("Key1", "Value1");
    ht.Add("Key2", "Value2");

    Assert.AreEqual("Value1", ht["Key1"],
        "Wrong object returned!");
    Assert.AreEqual("Value2", ht["Key2"],
        "Wrong object returned!");
}

管上述代码中存在一些小的差异,但它们在功能上是完全相同的?br>
虽然该示例是一U显C实际代码与反编译代码之间对比的好方法,但在我看来,它ƈ不代?nbsp;.NET Reflector 所h的最佳用?nbsp;?nbsp;分析 .NET 框架E序集和Ҏ(gu)?NET 框架提供了许多执行类似操作的不同Ҏ(gu)。例如,如果(zhn)需要从 XML 中读取一l数据,则存在多U?nbsp;XmlDocument、XPathNavigator ?nbsp;XmlReader 完成该工作的不同Ҏ(gu)。通过使用 .NET ReflectorQ?zhn)可以查?nbsp;Microsoft 在编写数据集?nbsp;ReadXml Ҏ(gu)时用了什么,或者查看他们在从配|文件读取数据时做了哪些工作?NET Reflector q是一个了解以下最?jng)_施策略的优秀Ҏ(gu)Q创?nbsp;HttpHandlers 或配|处理程序之cȝ对象Q因为?zhn)可以了解?nbsp;Microsoft 工作l实际上是如何在框架中生成这些对象的?br>
.NET Reflector ?nbsp;Lutz Roeder ~写Qƈ且可以从 http://www.aisto.com/roeder/dotnet 下蝲?br>
q回首
NDoc
~写代码文档资料几乎L一o(h)人畏惧的d。我所说的不是早期设计文档Q甚至也不是更ؓ(f)详细的设计文档;我说的是记录cM的各个方法和属性。NDoc 工具能够使用反射来分析程序集Qƈ使用?nbsp;C# XML 注释生成?nbsp;XML 自动Z码生成文档资料。XML 注释仅适用?nbsp;C#Q但有一个名?nbsp;VBCommenter ?nbsp;Visual Studio .NET Power ToyQ它能够?nbsp;Visual Basic .NET 完成cM的工作。此外,下一版本?nbsp;Visual Studio ؓ(f)更多语言支持 XML 注释?br>
使用 NDoc Ӟ(zhn)仍然在~写代码的技术文档,但?zhn)是在~写代码的过E中完成了文档编写工作(?nbsp;XML 注释中)Q而这更容易忍受。?nbsp;NDoc ӞW一步是为?zhn)的程序集打开 XML 注释生成功能。右键单击该目q择 Properties | Configuration Properties | BuildQ然后在 XML Documentation File 选项中输入用于保?nbsp;XML 文g的\径。当该项目生成时Q将创徏一?nbsp;XML 文gQ其中包含所?nbsp;XML 注释。下面是 NUnit CZ中的一个用 XML ~写了文档的Ҏ(gu)Q?nbsp;

/// <summary>
/// This test adds a number of values to the Hashtable collection 
/// and then retrieves those values and checks if they match.
/// </summary>
[Test]
public void HashtableAddTest()
{
    //Method Body Here
}

有关该方法的 XML 文档资料被提取q保存在 XML 文g中,如下所C:(x) 

<member name="M:NUnitExample.HashtableTest.HashtableAddTest">
  <summary>This test adds a number of values to the Hashtable collection
    and then retrieves those values and checks if they match.</summary> 
</member>

NDoc 使用反射来考察(zhn)的E序集,然后d该文档中?nbsp;XMLQƈ且将它们q行匚w。NDoc 使用该数据来创徏L数量的不同文档格式,包括 HTML 帮助文g (CHM)。在生成 XML 文g以后Q下一步是程序集?nbsp;XML 文g加蝲?nbsp;NDoc 中,以便可以对它们进行处理。通过打开 NDoc q单?nbsp;Add 按钮Q可以容易地完成该工作?br>
在将E序集和 XML 文g加蝲?nbsp;NDoc 中ƈ且用可用的属性范围自定义输出以后Q单?nbsp;Generate 按钮启动生成文档资料的q程。用默认的属性,NDoc 可以生成一些非常吸引hq且实用?nbsp;.html ?nbsp;.chm 文gQ从而以快速有效的方式自动完成原来非常乏味的Q务?br>
NDoc 是一个开放源代码目Qƈ且可以从 http://ndoc.sourceforge.net 下蝲?br>
q回首
NAnt
NAnt 是一个基?nbsp;.NET 的生成工P与当前版本的 Visual Studio .NET 不同Q它使得为?zhn)的项目创建生成过E变得非常容易。当(zhn)拥有大量从事单个项目的开发h员时Q?zhn)不能依赖于从单个用户的位进行生成。?zhn)也不希望必须定期手动生成该项目。?zhn)更愿意创建每天晚上运行的自动生成q程。NAnt 使?zhn)可以生成解决?gu)、复制文件、运?nbsp;NUnit 试、发送电(sh)子邮Ӟ{等。遗憄是,NAnt ~少漂亮的图形界面,但它的确h可以指定应该在生成过E中完成哪些d的控制台应用E序?nbsp;XML 文g。注意,MSBuildQ属?nbsp;Visual Studio 2005 的新的生成^収ͼ为每U健壮的生成Ҏ(gu)q行了准备,q且由基?nbsp;XML 的项目文件以cM的方式驱动?br>
q回首
实际q行?nbsp;NAnt
在该CZ中,我将为前面创建的 NUnitExample 解决Ҏ(gu)创徏一?nbsp;NAnt 版本文g。首先,我需要创Z个具?nbsp;.build 扩展名的 XML 文gQ将其放在我的项目的根目录中Q然后向该文件的剙d一?nbsp;XML 声明。我需要添加到该文件的W一个标记是 project 标记Q?nbsp;

<?xml version="1.0"?>
<project name="NUnit Example" default="build" basedir=".">
    <description>The NUnit Example Project</description>
</project>

目标记q用于设|项目名U、默认目标以?qing)基目录。Description 标记用于讄该项目的短说明?br>
接下来,我将d property 标记Q该标记可用于将讄存储到单个位|(随后可以从文件中的Q意位|访问该位置Q。在该例中,我将创徏一个名?nbsp;debug 的属性,我可以随后将其设|ؓ(f) true ?nbsp;falseQ以反映我是否要在调试配|下~译该项目。(最后,q一特定属性ƈ未真正媄(jing)响如何生成该目Q它只是(zhn)设|的一个变量,当?zhn)真正定了如何生成该目时将d该变量。)

接下来,我需要创Z?nbsp;target 标记。一个项目可以包含多个可?nbsp;NAnt q行时指定的 target。如果未指定 targetQ则使用默认 targetQ我?nbsp;project 元素中设|的 targetQ。在该示例中Q默?nbsp;target ?nbsp;build。让我们观察一?nbsp;target 元素Q它?yu)包含大多数生成信息Q?nbsp;

<target name="build" description="compiles the source code">
</target>

?nbsp;target 元素内,我将?nbsp;target 的名U设|ؓ(f) buildQƈ且创建有兌 target 做哪些工作的说明。我q将创徏一?nbsp;csc 元素Q该元素用于指定应该传递给 csc C# ~译器的数据。让我们看一下该 csc 元素Q?nbsp;

<csc target="library" output=".\bin\debug\NUnitExample.dll" 
    debug="${debug}">
<references>
    <includes name="C:\program files\NUnit V2.1\bin\NUnit.Framework.dll"/>
</references>
    <sources>
       <includes name="HashtableTest.cs"/>
    </sources>
</csc>

首先Q我必须讄?nbsp;csc 元素?nbsp;target。在该例中,我将创徏一?nbsp;.dll 文gQ因此我?nbsp;target 讄?nbsp;library。接下来Q我必须讄 csc 元素?nbsp;outputQ它是将要创?nbsp;.dll 文g的位|。最后,我需要设|?nbsp;debug 属性,它确定了是否在调试中~译该项目。因为我在前面创Z一个用于存储该值的属性,所以我可以使用下面的字W串来访问该属性的|(x)${debug}。Csc 元素q包含一些子元素。我需要创Z个元素:(x)references 元素告?nbsp;NAnt 需要ؓ(f)该项目引用哪些程序集Qsources 元素告诉 NAnt 要在生成q程中包含哪些文件。在该示例中Q我引用?nbsp;NUnit.Framework.dll E序集ƈ包含?nbsp;HashtableTest.cs 文g。图 8 中显CZ完整的生成文件。((zhn)通常q要创徏一个干净?nbsp;targetQ用于删除生成的文gQ但Zzv见,我已l将其省略。)

要生成该文gQ我需要{到我的项目的根目录(生成文g位于此处Q,然后从该位置执行 nant.exe。如果生成成功,(zhn)可以在该应用程序的 bin 目录中找?nbsp;.dll ?nbsp;.pdb 文g。尽?nbsp;NAnt 肯定不像?nbsp;Visual Studio 中单?nbsp;Build 那样单,但它仍然是一U非常强大的工具Q可用于开发按自动计划q行的生成过E。NAnt q包括一些有用的功能Q例如能够运行单元测试或者复刉加文Ӟq些功能没有受到当前 Visual Studio 生成q程的支持)?br>
NAnt 是一个开放源代码目Qƈ且可以从 http://nant.sourceforge.net 下蝲?br>
q回首
转换工具
我已l将两个独立的工具合在一h在标?#8220;转换工具”下面。这两个工具都非常简单,但又可能极ؓ(f)有用。第一个工h ASP.NET 版本转换器,它可用于转换 ASP.NETQ虚拟目录在它下面运行)的版本。第二个工具?nbsp;Visual Studio ConverterQ它可用于将目文g?nbsp;Visual Studio .NET 2002 转换?nbsp;Visual Studio .NET 2003?br>
?nbsp;IIS 处理hӞ它会(x)查看正在h的文件的扩展名,然后Z?nbsp;Web 站点或虚拟目录的扩展名映,请求委z ISAPI 扩展或者自己处理该h。这正是 ASP.NET 的工作方式;ؓ(f)所?nbsp;ASP.NET 扩展名注册扩展名映射Qƈ这些扩展名映射导向 aspnet_isapi.dll。这U工作方式是完美无缺的,除非(zhn)安装了 ASP.NET 1.1 ?nbsp;它会(x)扩展名映射升到新版本?nbsp;aspnet_isapi.dll。当?nbsp;ASP.NET 1.0 上生成的应用E序试图?nbsp;1.1 版运行时Q这?x)导致错误。要解决该问题,可以所有扩展名映射重新转换?nbsp;1.0 版的 aspnet_isapi.dllQ但是由于有 18 U扩展名映射Q所以手动完成这一工作很枯燥。这正是 ASP.NET 版本转换器可以发挥作用的时候。用这一型实用工具Q可以{换Q何单?nbsp;ASP.NET 应用E序所使用?nbsp;.NET 框架的版本?br>

按此在新H口打开囄
?nbsp;9 ASP.NET 版本转换?br>

?nbsp;9 昄了实际运行的 ASP.NET 版本转换器。它的用方法非常简单,只须选择相应的应用程序,然后选择(zhn)希望该应用E序使用?nbsp;.NET 框架版本。该工具随后?nbsp;aspnet_regiis.exe 命o(h)行工具将该应用程序{换到所选版本的框架。随着来版本?nbsp;ASP.NET ?nbsp;.NET 框架的发布,该工具将变得更ؓ(f)有用?br>
ASP.NET 版本转换器由 Denis Bauer ~写Qƈ且可以从 http://www.denisbauer.com/NETTools/ASPNETVersionSwitcher.aspx 下蝲?br>
Visual Studio .NET 目转换器(参见?nbsp;10Q非常类g ASP.NET 版本转换器,区别在于它用于{?nbsp;Visual Studio 目文g的版本。尽在 .NET 框架?nbsp;1.0 版和 1.1 版之间只有很的差异Q但一旦将目文g?nbsp;Visual Studio .NET 2002 转换?nbsp;Visual Studio .NET 2003Q将无法再把它{换回厅R虽然这在大多数时候可能不?x)成为问题(因?f)?nbsp;.NET 框架 1.0 版和 1.1 版之间几乎没有什么破坏性的更改Q,但在某些时刻(zhn)可能需要将目转换回去。该转换器可以将M解决Ҏ(gu)或项目文件从 Visual Studio 7.1 (Visual Studio .NET 2003) 转换?nbsp;Visual Studio 7.0 (Visual Studio .NET 2002)Qƈ在必要时q行反向转换?br>

按此在新H口打开囄
?nbsp;10 Visual Studio .NET 目转换?br>

Visual Studio .NET 目转换器由 Dacris Software ~写。该工具可以?nbsp;http://www.codeproject.com/macro/vsconvert.asp 下蝲?br>
q回首

本文采用走马观花的方式介l了上述工具Q但我已l试图v码向(zhn)提供够的信息以激h的好奇心。我怿本文已经让?zhn)在某U程度上领?zhn)了几个免费工P(zhn)可以立卛_始用这些工h~写更好的项目。同Ӟ我还要敦促?zhn)保自己拥有所有其他可以获得的合适工P无论是最新版本的 Visual Studio、功能强大的计算是免费的实用工具。拥有合适的工具一切变得大不相同?br>
James Avery 是一位?nbsp;.NET 和其?nbsp;Microsoft 技术的N。他已经撰写了许多书c和文章Q他的最新著作是《ASP.NET Setup and Configuration Pocket Reference?Microsoft Press, 2003)。?zhn)可以通过 javery@infozerk.com 向他发送电(sh)子邮Ӟq且?nbsp;http://www.dotavery.com/blog 阅读他的|络日记?br>

colys 2007-05-18 23:11 发表评论
]]>
MVC在Webpȝ中的模式与应?/title><link>http://www.shnenglu.com/colys/archive/2007/05/15/24131.html</link><dc:creator>colys</dc:creator><author>colys</author><pubDate>Tue, 15 May 2007 01:12:00 GMT</pubDate><guid>http://www.shnenglu.com/colys/archive/2007/05/15/24131.html</guid><wfw:comment>http://www.shnenglu.com/colys/comments/24131.html</wfw:comment><comments>http://www.shnenglu.com/colys/archive/2007/05/15/24131.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/colys/comments/commentRss/24131.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/colys/services/trackbacks/24131.html</trackback:ping><description><![CDATA[<p>面向对象的设计模式是l验的ȝQMVC思想是原先用于构建用L(fng)面的。这文章主要论qC如何在新的Web应用领域中用设计模式和MVC架构。文章首先介l了设计模式的概念和特点Q以?qing)MVC架构的设计思想Qƈ分析了MVC架构中包含的几种主要的模式。然后根据Web应用pȝ的特点,如何应用模式和MVC架构提出了一些设计思\?<br><br><strong>1. 引言<br>1.1 设计模式</strong><br>面向对象技术的出现和应用大大提高了软g的重用性和软g的质量。面向对象的~程也比以往的各U编E模式要单和高效Q但是面向对象的设计Ҏ(gu)要比以往的设计方法要复杂和有技巧得多,一个良好的设计应该既具有对问题的针Ҏ(gu),也充分考虑到对来问题和需求有_的通用性。在q去的十几年中,Z在对面向对象技术的研究探烦(ch)和实际应用中针对某些问题创造了一些良好的解决Ҏ(gu),x谓的面向对象的设计模式。面向对象技术的目的之一是提高软g的重用性,而对设计模式、设计方案的重用则从更深的层ơ上体现了重用的意义和本质?br>Z对设计模式有很多定义Q其中被引用的最多是Christopher Alexander的设计模式的定义Q每一个设计模式是一个三方的规则Q它表达了一个上下文环境QContextQ?一个问题和一个解x案。设计模式一般有如下几个基本要素Q模式名Uͼ问题Q目的,解决Ҏ(gu)Q效果,样例代码和相兌计模式?br>设计模式的分cL好几U,可以Ҏ(gu)其目的分为创建型(Creational)Q结构型(Structural)和行为型(Behavioral)三种。创建型模式主要是用来创建对象,l构型模式主要是处理cL对象的组合,行ؓ(f)型模式则主要用来描述对类或对象怎样交互和怎样分配职责。也可以Ҏ(gu)范围设计模式分为类模式和对象模式,cL式处理类和子cM间的关系Q这些关p通过l承建立Q在~译时刻p定下来Q是属于静态的。对象模式是处理对象间的关系Q这些关pdq行时刻变化Q更具动态性?<br>模式的特点:(x)是通过l验获取的,以某U结构化的格式书写下来,避免了遇到相同的问题重头设计Q存在于不同的抽象层Q在不断完善的,是可重用的h工物,使设计和最好的l习(fn)交互Q以被组合v来解x大的问题? <p><strong>1.2 MVC架构</strong><br>MVC最初是在Smalltalk-80中被用来构徏用户界面的。M代表模型Model, V代表视图 ViewQ?C代表 控制器Controller?br>MVC的目的是增加代码的重用率Q减数据表达,数据描述和应用操作的耦合度?同时也得Y件可l护性,可修复性,可扩展性,灉|性以?qing)封装性大大提高?br>单用L(fng)应用通常是以事g驱动的用L(fng)面ؓ(f)l织l构的。开发h员用一个界面工L(fng)了一个用h口界面,然后~写代码Ҏ(gu)用户输入L行相应的动作Q许多交互式的开发环境鼓p么做Q因为它先有界面然后再有功能。一些Y件设计模式策略是q样的,然后l常固定后的代码融入最后的pȝ当中。导致的l果是Q程序组l围l用L(fng)面元素和用户在那些界面元素上的动作,数据的存储,应用的功能以?qing)用来显C的代码都杂乱无章的~绕在一赗在单用L(fng)pȝ里代码结构是可以q样的,因ؓ(f)pȝ需求不?x)频J变化。但是对一个大的系l如大型WebpȝQ或?sh)子商务pȝ来说׃太适用了?br>通过把数据模式从各种可以被存取和控制的数据中分离出来可以改善分布式系l的设计。MVC设计模式׃部分l成。模型是应用对象Q没有用L(fng)面。视图表C它在屏q上的显C,代表向用户的数据。控制器定义用户界面对用戯入的响应方式Q负责把用户的动作{成针对Model的操作。Model 通过更新View的数据来反映数据的变化?br>三者关pd图:(x) <br><img height=350 alt="" src="http://dev2dev.bea.com.cn/images/article/server031113/0001.gif" width=594 border=0></p> <br>对MVC关系囄理解<br><img height=266 src="http://dev2dev.bea.com.cn/images/article/server031113/0002.gif" width=587> <br>? MVC的分工与协作<br><br><strong>2. MVC中的设计模式</strong><br>一个以MVC为架构的pȝ包含了很多的设计模式Q但是与MVC最为密切相关的是下面三U模式:(x)Observer, Composite和Strategy?br><strong>2.1 Observer模式</strong><br>MVC通过使用定购/通知的方式分MModel和View。View要保证自己显C正确地反映出Model的内容和状态。一旦Model的内容发生变化,必须有一个机制来使得Model能够通知相关的ViewQ得相关的View可以在适当的时机刷新数据。这个设计还可以解决更一般的问题Q将对象分离Q得一个对象的改变能够影响到另一些对象,而这个对象ƈ不知道那些被影响的对象的l节。这是被描qCؓ(f)Observer的设计模式?<br>模式cdQObserver模式是对象型模式Q同时它也是行ؓ(f)型模式?br>模式目的Q定义对象间的一对多的依赖关p,当一个对象的值或状态发生改变时Q所有与它有依赖关系的对象都得到通知q自动更新。某一数据可能有多U显C方式,q且可能同时以不同的方式昄Q如?Q。当通过某一U方式改变了数据Q那么其他的昄都应该能立即知道数据的改变和做相应的调整?br>模式l构Q?br><img height=452 src="http://dev2dev.bea.com.cn/images/article/server031113/image002.png" width=432> <br>?3. Observer模式的结构图<br><br>效果Q?br>1. 抽象耦合。目标对象只知道它有一些观察者,每个观察者都W合抽象的Observercȝ单接口,q不知道它们具体属于哪个cR这样得目标和观察者之间的耦合最且抽象?br>2. 支持q播通信。目标发送通知不用指定观察者,如何处理通知p察者决定?br>3. 可能的意外更新。要处理好更新逻辑Q避免错误更新? <p><strong>2.2 Composite模式</strong><br>MVC的一个重要特征就是View可以嵌套。嵌套的l合视图可用于Q何视囑֏用的地方Q而且可以理嵌套视图。这U思想反映出将l合的视图与其组件^{对待的设计。这U设计思想在面向对象领域内被描q成为Composite的设计模式?br>模式cdQComposite模式是对象型模式Q同时它也是l构型模式?br>模式目的Q将对象l合成树(wi)形结构以表示"部分-整体"层次l构。Composite使组合对象的使用和单个对象的使用h一致性?br>模式l构Q?br><img height=399 src="http://dev2dev.bea.com.cn/images/article/server031113/image004.png" width=562> <br>?. Composite模式的结构图<br>效果Q?br>1. 定义了包含简单对象和l合对象的类层次l构。简单对象可以被l合到复杂对象中Q而组合的对象可以再被l合。这样客L(fng)代码中用到简单对象的地方都可以用组合对象?br>2. 化客L(fng)代码。客L(fng)不用知道某对象是单对象还是组合对象,可以以一致的方式使用q些对象?br>3. 更容易增加新cd的组件。新的组件可以方便地加入已有l合对象中不用改变客L(fng)代码?/p> <p><strong>2.3 Strategy模式</strong><br>MVC的另一重要特征是可以在不改变View的情况下改变View对用戯入的响应方式。这对一个经帔R要变更响应逻辑的系l来说是非常重要的。MVC把响应逻辑装在Controller中。有一个Controller的类层次l构Q可以方便地对原有Controller做适当改变Q创建新的Controller。View使用Controller子类的实例来实现一个特定的响应{略。要实现不同的响应策略,只要用不同种cȝController实例替换卛_。还可以在运行时刻通过改变View的Controller来改变View对用戯入的响应{略。这UView-Controller的关pL被描qCؓ(f)Strategy的设计模式的一个例子?br>模式cdQStrategy模式是对象型模式Q同时它也是行ؓ(f)型模式?br>模式目的Q定义一pd的算法,q且把它们封装v来,使它们可以互相替换,使得法可以独立于用它的客L(fng)而变化?<br>模式l构Q?br><img height=218 src="http://dev2dev.bea.com.cn/images/article/server031113/image006.png" width=648> </p> <p>?. Strategy模式的结构图</p> <p>效果Q?br>1. Strategycdơؓ(f)Context定义了可重用的相关算法或行ؓ(f)?br>2. 替代l承的方法。如果直接承ContextQ给以不同的行ؓ(f)Q会(x)行为加到Context中,从而将法的实CContext混合hQContext难以理解Q维护和扩展Q而且不能动态地改变法。将法装在独立的Strategyc,可以使得法独立于Context改变Q容易切换扩展?br>3. 可以提供相同行ؓ(f)的不同实现?br>4. 客户端必M解Strategy之间有何不同?br>5. Context和Strategy之间的通信开销?br>6. 增加了对象的数目?/p> <p><strong>3. MVC?Webpȝ中的应用</strong><br>现在的一些基于Web的分布式pȝ如B2B?sh)子商务pȝQ就适合采用MVC架构?br>通过分析Q从高层ơ的角度可以一个应用的对象分ؓ(f)三类。一cd是负责显C的对象Q一cd象包含商业规则和数据Q还有一cd是接收请求,控制商业对象d成请求。这些应用的昄是经帔R要变换的Q如|页的风|色调Q还有需要显C的内容Q内容的昄方式{。而商业规则和数据是相对要E_的。因此,表示昄的对象Viewl常需要变化的Q表C商业规则和数据的对象Model要相对稳定,而表C控制的Controller则最E_?br>通常当系l发布后QView对象是由工QHTML/JSP设计人员或者系l管理员来负责管理的。Controller对象由应用开发h员开发实施,商业规则对象和商业数据对象则由开发h员,领域专家和数据库理员共同完成的。显C逻辑在Web层或客户端控Ӟ可以是Servlet 或JSPQ动态地生成Html。一般来说采用JSP要比采用Servlet要好。JSP更好地将代码与Html部分分开Q有利于面设计人员和代码开发h员的分离Q提高效率。同时JSP可以完成所有Servlet完成的功能,实际上JSP最l也转换成一个Servlet。与控制有关的对象存在于pȝ的每一个层ơ,协调跨层动作。包含商业规则和数据的对象存在于EJB层(以EJBZ心的模式Q或Web层(以WebZ心的模式Q?br></p> <p><strong>3.1 View在Webpȝ中的应用</strong><br>View代表pȝ的显C,它完全存在于Web层。一般由JSP, Java Bean和Custom Tagl成。JSP可以动态生成网内容,Custom Tag 更方便了使用Java BeanQ而且它可以封装显C逻辑Q更有利于于模块化和重用。一些设计良好的Custom Tag可以在多个JSP甚至可以在不同的pȝ里重复用。Java Bean用来控制JSP和Model对象。JSP通过Java Bean 来读取Model对象中的数据QModel和Controller对象则负责对Java Bean的数据更新。一般来_(d)可以先要设计出所有可能出现的屏幕Q即用户使用pȝ时可以看到的所有内宏V然后根据这些内容,扑և公共部分Q静态部分和动态变化部分。可以考虑使用模板Ҏ(gu)Q把公用的内容单独生成JSPQ需要变化的也各自生成Html或JSP, ׃个模板JSP, 把这些不同部分动态地引入QincludeҎ(gu)Q。还有一个要考虑的问题就是屏q的选择问题Q当处理完用戯求,模板被自动调用来昄Q这个显CZ定要知道用户兛_的屏q是有哪些部分组成。所以可以考虑把所有屏q的定义攑֜一个集中的文g里,如一个java文g或文本文件。由于考虑到屏q定义文件将来的变更可能性,最好用文本文件如一个XML文gQ这样将来更改不用重新编译。可以根据用戯入的URL和参数可以映到某一个结果屏q,当然有可能还要根据动作的执行l果选择不同的结果屏q内宏V所以需要一个请求与资源的匹配文ӞXMLQ,如果一个URLh有几U不同结果,则要在该文g中指明是否需要流控制Q一Ucontroller对象Q以?qing)不同流向的对应屏幕?br><strong><br>3.2 Model在Webpȝ中的应用</strong><br>Model对象代表了商业规则和商业数据Q存在于EJB层和W(xu)eb层。在J2EE的规范中Q系l有些数据需要存储于数据库中Q如用户的̎号信息(account modelQ,公司的数?company model){,也有一些不需要记录在数据库里的,如某用户览的当前品目?catalog model)Q他的购物内?shopping cart model){。这些model数据存在于哪一层要Ҏ(gu)它们的生命周期和范围来决定。在Web层有HttpSession和ServletContext?qing)Java Bean对象来存储数据,在EJB层则有EJB来存储数据和逻辑。Web层的Java Bean的model对象存储了EJB层model对象的数据的拯。因为EJB层有很多不同的model对象Q所以Web层可以通过一个ModelManager来控制EJB层的各model对象Q在ModelManger中可以封装用后台model对象的方法?br>在EJB层把所有的数据和规则都模式化ؓ(f)EJB也是不恰当的。如可以把存取数据库的对象模式化为DAO对象。DAO中可以封装与具体数据库的交互l节Q如可以d不同的表Q多个数据库Q甚臛_U数据库。如定单的model对象可以是一个OrderDAO, 它可能要同时处理Order表,OrderStatus表和OrderItemLines表?br>q有可以考虑使用Value对象。一个Value 对象可以装q程对象Q因为每一个读q程对象的属性都可能是一个远E过E调用,都会(x)耗费|络资源。可以在EJB的远E对象中使用Value对象. 在远E对象中一ơ性得到Value对象来得到所有属性的倹{?/p> <p><strong>3.3 Controller在Webpȝ中的应用</strong><br>Controller对象协调Model与ViewQ把用户h译成系l识别的事g。在Web层,一般有一个MainServlet(或Main.jsp)Q接收所有请求,它可以调用屏q流理器(ScreenFlowMangerQ决定下一个屏q。一般还有一个请求处理器RequestProcessorQ包含所有请求都需要做的处理逻辑Q如把请求翻译成pȝ事gQRequestToEventQ。请求处理器通常q包含一个代理对象ClientControlWebImplQ它是EJB层的逻辑处理的在Web层的代理。在EJB层,有一个ClientController提供Web 层对EJB层的只读讉K。还有一个StateMachine用来建立和删除ejbQ处理Web层送来的事件?br>Controllerq有一个重要的功能是同步View和Model的数据。在ModelManger中包含一个ModelUpdateMangerQ它把系l事件{换ؓ(f)一个Model的集合,x有需要同步的ModelQ然后通知Listenersd同步操作?br></p> <p><strong>4. l束?/strong><br>q年来随着互联|技术的发展和新的商业模式的出现Q必然会(x)出现大量ZWeb的应用系l。对于如何设计这些系l的体系l构Q也逐渐有了一些统一的认识,最主要的是的就是其体系l构要合理,开放。需求永q会(x)比技术和设计思想发展快,要ɞ来pȝ的升U所付出的代h,研究软gpȝ的体pȝ构还是非常很用和有必要的?br><br><strong>参考文?/strong><br>[1] 设计模式Q作者Erich Gamma {,ISBN 7-111-07575-7, 机械工业出版C?2000.9<br>[2] Core J2EE Patterns, 作者Deepak Alurm {? ISBN 0-13-064884-1, Sun Microsystems Inc, 2001q?br>[3] Designing Enterprise Applications with the J2EETM Platform, 作者Nicholas Kassem {, Sun Microsystems, Inc. 2000q?br></p> <!--文章其他信息--><img src ="http://www.shnenglu.com/colys/aggbug/24131.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/colys/" target="_blank">colys</a> 2007-05-15 09:12 <a href="http://www.shnenglu.com/colys/archive/2007/05/15/24131.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数学与程序的l合——一道游戏题目的快速解?/title><link>http://www.shnenglu.com/colys/archive/2007/04/22/22576.html</link><dc:creator>colys</dc:creator><author>colys</author><pubDate>Sun, 22 Apr 2007 02:02:00 GMT</pubDate><guid>http://www.shnenglu.com/colys/archive/2007/04/22/22576.html</guid><wfw:comment>http://www.shnenglu.com/colys/comments/22576.html</wfw:comment><comments>http://www.shnenglu.com/colys/archive/2007/04/22/22576.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/colys/comments/commentRss/22576.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/colys/services/trackbacks/22576.html</trackback:ping><description><![CDATA[题目Q?br><br>有十个开关等间距排成一U,每个开兛_应其上方的一盏灯Q十盏灯也排成一U)。每按动一下开养I可以使对应的灯改变状态(原来亮着的将熄灭Q原来熄灭的被点亮Q?br>但是Q由于开关之间的距离很小Q每ơ按动开xQ相?c)一个开关也被按动。例如:(x)按动W?个开养I则实际上W???个开关都被按动。而按动靠边的W?个开xQ第1?个开关都被按动。ƈ且,无法只按动最靠边的一个开兟?br>现在l出十盏灯的初始的状态和目标状态,要求计算Q从初始状态改变到目标状态所需要的最操作次数?br>函数接口Q?br>int MinChange(const int Start[],const int End[]);<br>其中QStart表示了初始状态,End表示了目标状态。表C状态的数组QStart和EndQ中Q若某元素ؓ(f)0表示对应的灯亮着Q否则表C对应的灯没有亮。调用函数时保证Start和End数组长度均ؓ(f)10Qƈ保证有解?<br><br>看了很多人的解法都是用@环遍历来判断是否辑ֈ最后要求,但是如果和线形代数结合的话,有一U很快速的解法?br><br>U定Q以下所用的‘Q?#8217;号都?#8216;异或’的运?br>先简化一下,假设有四个灯Q初始状态s0~s3Q目标状态是e0~e3Q{换一ơ状态就是和1q行异或q算一ơ,所以状态{Uȝ阵ؓ(f)Q?br>(s0,s1,s2,s3)+k0*(1,1,0,0)+k1*(1,1,1,0)Qk2*(0,1,1,1)+k3*(0,0,1,1)=(e0,e1,e2,e3);<br>其中k(n)表示Wn个开xd的次数。ƈ且,注意异或q算中aQbQbQaQ所以,某个开关翻动偶数次的效果相当于没有dQ翻动奇数次的效果相当于d一ơ;又由于异或运满交换律Q所以翻动的序没有影响。综上每个开关翻动的ơ数只有1ơ或0ơ就_了?br><br>设m(n)=s(n)+e(n)Q注意异或运中?-'也就?+'Q所以解U性方E组Q?br>k0+k1      =m1;<br>k0+k1+k2   =m2;<br>   k1+k2+k3=m3;<br>      k2+k3=m4;<br>假设解存在,可以算出通解(k0,k1,k2,k3)Q再l计出通解?的个敎ͼ是所需要翻动的ơ数了。ƈ且还可以知道哪些开关需要拨动,比如出解是(1,0,1,0)是W??个开关需要拨动一ơ?br><br>因此针对本题目的10个灯泡,本h已算10元线性方E组的通解Q?br>k0=m0+m2+m3+m5+m6+m8+m9;<br>k1=m2+m3+m5+m6+m8+m9;<br>k2=m0+m1;<br>k3=m3+m0+m1+m5+m6+m8+m9;<br>k4=m5+m6+m8+m9;<br>k5=m4+m3+m0+m1;<br>k6=m6+m4+m3+m0+m1+m8+m9;<br>k7=m8+m9;<br>k8=m7+m6+m4+m3+m0+m1;<br>k9=m9+m7+m6+m4+m3+m0+m1;<br><br>和上面一Pm(n)为开始状态与目标状态的每位异或。至于是否存在解Q本人已次pL矩阵化简为对角矩阵,可以看到pL矩阵的秩QRankQ与未知数的个数相等Q所以无论是M的输入和输出变换都能扑ֈ唯一解?br><br>本hE序如下Q?br>int MinChange(const int Start[],const int End[]){<br>    int m[10];<br>    int k[10];<br>    int res=0;<br>    int i,j,n;<br>    for(i=0;i<10;i++){<br>            m[i]=Start[i]^End[i];  /* m[]=Start[] XOR End[] */<br>        }<br>    /* calculate roots */<br>    k[0]=m[0]^m[2]^m[3]^m[5]^m[6]^m[8]^m[9];<br>    k[1]=m[2]^m[3]^m[5]^m[6]^m[8]^m[9];<br>    k[2]=m[0]^m[1];<br>    k[3]=m[3]^m[0]^m[1]^m[5]^m[6]^m[8]^m[9];<br>    k[4]=m[5]^m[6]^m[8]^m[9];<br>    k[5]=m[4]^m[3]^m[0]^m[1];<br>    k[6]=m[6]^m[4]^m[3]^m[0]^m[1]^m[8]^m[9];<br>    k[7]=m[8]^m[9];<br>    k[8]=m[7]^m[6]^m[4]^m[3]^m[0]^m[1];<br>    k[9]=m[9]^m[7]^m[6]^m[4]^m[3]^m[0]^m[1];<br>    /* count for switch times */<br>    for(j=0;j<10;j++){<br>        if(k[j]) res++;<br>        }<br>    /* display k(n); */<br>    for(n=0;n<10;n++) printf("%d,",k[n]);<br>    return res;<br>}<br><br>试ȝ序:(x)<br>main(){<br>    int A[10]={1,1,1,0,0,1,0,1,1,0};<br>    int B[10]={0,0,1,1,0,0,1,1,1,1};<br>    int C;<br>    C=MinChange(A,B);<br>    printf("**%d**",C);<br>}<br>昄l果为:(x)<br>1Q?Q?Q?Q?Q?Q?Q?Q?Q?Q?*6**<br>是如果要把状态A转ؓ(f)状态BQ需要把W?Q?Q?Q?Q?Q?号开关翻动一ơ,?ơ?br>试验证l果正确Q)<br><br>当然Q此做法也有一个缺点,是当灯的个数改变时Q就要重新设定线形方E组的特解Ş式?br><br> <br><img src ="http://www.shnenglu.com/colys/aggbug/22576.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/colys/" target="_blank">colys</a> 2007-04-22 10:02 <a href="http://www.shnenglu.com/colys/archive/2007/04/22/22576.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>asp.net 面事gQ顺序与回传http://www.shnenglu.com/colys/archive/2007/04/22/22575.htmlcolyscolysSun, 22 Apr 2007 01:27:00 GMThttp://www.shnenglu.com/colys/archive/2007/04/22/22575.htmlhttp://www.shnenglu.com/colys/comments/22575.htmlhttp://www.shnenglu.com/colys/archive/2007/04/22/22575.html#Feedback1http://www.shnenglu.com/colys/comments/commentRss/22575.htmlhttp://www.shnenglu.com/colys/services/trackbacks/22575.html
l 初始?br>² 当页面被提交hW一个方法永q是构造函数。?zhn)可以在构造函数里面初始一些自定义属性或对象Q不q这时候因 为页面还没有被完全初始化所以多会(x)有些限制。特别地Q?zhn)需要用HttpContext对象。当前可以用的对象包括QueryString, Form以及(qing)Cookies集合Q还有Cache对象。注意:(x)在构造函数里是不允许使用Session的?

² 下一个将执行的方法是AddParsedSubObjectҎ(gu)Q这个方法将d所有独立的控gq把面l成一个控仉合树(wi)Q这个方 法经常被一些高U的面模板解决Ҏ(gu)(Page Template Solutions)重写以便d面内容到页面模板(Page TemplateQ中一些特D的控g中。这个方法递归应用到所有的面控g?qing)相应的的每个子控gQ所有的控g都是在这个方法中开始最早的初始化?/p>

² 面cM下一个将执行的方法是DeterminePostBackMode。这个方法允许?zhn)修改IsPostBack的值及(qing)相关的事件。如果?zhn)? 需要从数据库中加蝲ViewStateq个Ҏ(gu)特别有用,因ؓ(f)ViewState只有在IsPostBack为真的情况下才会(x)q行恢复。返回空会(x)D 强制执行非回传,q回Request.Form则强制执行一个回传。除非在Ҏ(gu)情况下,否则q不L作这个,因ؓ(f)q个q会(x)影响其他的事件?/p>

² 下一个将要执行的Ҏ(gu)是OnInitҎ(gu)Q一般这是第一个真正被使用的方法。这个方法触发时Q所有页面定义中的控件执行初始化Q这意味着所有在 面中定义的值应用到相应的控件上。不q,ViewState和传回的D不会(x)应用到控件上Q因此,M被代码或用户改变的D没有被恢复到控g上。这? Ҏ(gu)通常是最好的创徏、重创徏动态控件的好地斏V?br>l 恢复?qing)加?br>² 下一个方法, LoadPageStateFromPersistenceMedium只会(x)在页面被回传的时候才?x)被执行。如果因Z用Session或自定义存储? 式,(zhn)修改了后面要提到的媄(jing)响ViewState保存方式的方法SavePageStateToPersistenceMediumQ则q个Ҏ(gu)需要被 重写。默认的实现中ViewState是一UBase64格式~码Qƈ且被保存在页面的隐藏域中Q?zhn)可以使用q篇文章中提?qing)的?gu)修改ViewState 按以上两U方式保存。注意:(x)q个Ҏ(gu)q没有真正加载ViewState到页面或面控g中?/p>

² 当得到ViewState后,下一个方法LoadViewSateQ将以递归的方式恢复ViewState到页面及(qing)各个面控g或子控g中。这 个方法执行后Q每个控仉恢复到上一ơ的状态,但是用户提交的数据还没有应用到控件上Q因Z们不是ViewState的一部分。这个方法主要用于恢? (zhn)在其他事g中动态生成的控g的|他们的值是(zhn)手动保存在ViewSate中,q且现在已经失效?/p>

² 下一个方法是ProcessPostDataQ这个方法也同样是回传的时候才?x)被执行Qƈ且不允许被重写,q个是页面基cȝU有Ҏ(gu)。这个方? 通过匚w控g的名U恢复相应的用户提交的控件的|到这一步意味着整个面都已l被完全恢复了。唯一要记住的是所有动态控件的创徏必须在这个方法之前。这 个方法也是记录后面的改变事g的方法?/p>

² 下一个方法是OnLoadҎ(gu)Q通常q是用得最多的Ҏ(gu)Q因个方法是面生存期第一个恢复了所有值的地方。大多数代码Ҏ(gu)判断 IsPostBack来决定是否重新设|控件状态。?zhn)也可以在q个Ҏ(gu)中调用Validateq且(g)查IsValid的倹{也可以在这个方法中创徏动态控 Ӟq且该控件的所有的Ҏ(gu)都会(x)被执行以q上当前面的状态包括ViewSateQ不q不包括回传的倹{?br>l 事g处理
² 下一个方法还? ProcessPostDataQ实际上是前一个方法的另一ơ调用,它仍然是只在回传的时候执行ƈ且由于是U有Ҏ(gu)不可以被重写。如果?zhn)是第一ơ看面 的运行轨q也怼(x)觉得q个Ҏ(gu)有些多余。但实际上这个方法是必要的因为在OnLoad中创建的动态控件也需要他们回传的倹{Q何在q以后创建的控g可? 得到他们的ViewStateQ但是不能再得到他们的回传的|q且不会(x)触发M值改变事?Change Event)?/p>

² 下一个方法,RaiseChangedEventsQ也是只在回传页面中执行Qƈ且也因ؓ(f)是基cȝU有Ҏ(gu)所有不能被l承。在整个面生存? 中,是在q儿Ҏ(gu)之前的ProcessPostData记录的控件的值和提交的值是否不同来触发值改变事件。?zhn)也许需要调用Validate或者检? IsValid的倹{这里ƈ没有特别的说明多个值改变事件的执行先后序?/p>

² 下一个方法,RaisePostBackEventQ同h因ؓ(f)是基cȝU有Ҏ(gu)不能被承,同样也是只在回传面中执行。除非用了 AutoPostBackQ不然这是实际提交表单事件执行的地方Q特别是按钮或者其实用javascript提交表单{。如果还没有被手动调用过q且? 用了验证控gQ那么Validate?x)被调用。注意IE中有个BUG有时?x)允许提交但却不触发M事g?/p>

² 下一个方法是OnPreRenderQ一般这是在客户端展现页面之前改变页面及(qing)其控件的最后一ơ机?x)。?zhn)也可以在q个Ҏ(gu)里面创徏动态控Ӟq? 且所有的Ҏ(gu)都会(x)被执行以q上当前面的状态包括ViewSateQ但是私有方法将不会(x)被执行,q意味着不会(x)有回传的值ƈ且不?x)有事g触发。由于IE中的 BUGQ这是一个没有事件赶上PostBack的好地方?br>l 保存?qing)显C?br>² 下一个方法是SaveViewStateQ不论是否是回传? 面,均会(x)递归的执行以保存面?qing)其所有控件的ViewState。ViewState基本上保存所有与定义在aspx中的原始g同的|不管是被代码q? 是用h改变。注意控件值是Ҏ(gu)他们在页面的控g?wi)中的位|来保存的,所以如果动态控件后来加C错误的位|将?x)导致؜乱?/p>

² 下一个方法是SavePageStateToPersistenceMedium真正的保存页面的ViewSate。这个方法随? LoadPageStateFromPersistenceMediumg 一赯重写以便保存ViewState到Session或其它自定义数据Q而不是用隐藏域。这对于低带宽的用户来说是很有帮助的。ƈ且对于移动设备来_(d) Session是默认设|。下面这文章描qC使用以上两种方式保存ViewState的具体细节。注意在Asp.net中有个BugQAsp.net? 求必L交__viewstate字段Q即使是I的?/p>

² 下一个方法是RenderҎ(gu)Q该Ҏ(gu)递归的创建ƈ发送相应控件的htmll浏览器。这个方法被一些页面模板方案重写以d一些通用的页面头? 脚而不使用服务器控Ӟ他们L有一些额外的东西。注意这儿的修改只能使用UHTMLQ因为控件在q儿已经被生成了。?zhn)可以? StringBuilderQStringWriterQHtmlTextWriter捕获相应的HTML输出?/p>

² 最后的Ҏ(gu)是OnUnloadQ这个方法会(x)调用相应的DisposeҎ(gu)。这个方法提供机?x)以便清I面中用的非托资源,如关闭打开的文 件句柄,以前打开的数据库q接{。注意这个方法是在页面已l发送到客户端以后执行的Q所以它只有影响服务器对象,q且它不?x)显C在面的显Cq中。这? 是页面的生存期,对于每一ơ请求都是这么运行的?br>l 作者简??

?Q页面事件ȝ


Ҏ(gu)回传控g


ConstructorAlwaysAll
AddParsedSubObjectAlwaysAll
DeterminePostBackModeAlwaysPage
OnInitAlwaysAll


LoadPageStateFromPersistenceMediumPostBackPage
LoadViewStatePostBackAll
ProcessPostData1PostBackPage
OnLoadAlwaysAll


ProcessPostData2PostBackPage
RaiseChangedEventsPostBackPage
RaisePostBackEventPostBackPage
OnPreRenderAlwaysAll


SaveViewStateAlwaysAll
SavePageStateToPersistenceMediumAlwaysPage
RenderAlwaysAll
OnUnloadAlwaysAll



colys 2007-04-22 09:27 发表评论
]]>
50个名?每个名著羃一句话http://www.shnenglu.com/colys/archive/2007/03/19/20157.htmlcolyscolysMon, 19 Mar 2007 12:23:00 GMThttp://www.shnenglu.com/colys/archive/2007/03/19/20157.html1Q神要是公然去跟Z对,那是M人都难以对付的?(《荷马史诗?

2Q生存还是毁灭,q是一个值得思考的问题?(《哈姆霄牏V?

3Q善良h在追求中U늄qhQ却l将意识到有一条正途?《Q士d?

4Q认识自q无知是认识世界的最可靠的方法?(《随W集?

5Q你以ؓ(f)我I相貌^q_没有感情?我向你发誓,如果上帝赋予我胦(ch)富和貌Q我?x)让你无法离开我,像我现在无法离开你一栗虽然上帝没有这么做Q可我们在精上依然是^{的?《简?爱?

6Q大人都学坏了,上帝正考验他们呢,你还没有受考验Q你应当照着孩子的想法生zR?(《童q?

7Q你没有心肝,p高升得快Q你毫不留情地打MhӞ人家怕你。只能把L(fng)奛_当作驉KQ把它们骑得{疲力尽Q到了站上丢下来Q这样你p辑ֈƲ望的最高峰?(《高老头?

8Q我只想证明一件事Q就是,那时鬼引诱我,后来又告诉我Q说我没有权利走那条路,因ؓ(f)我不q是个虱子,和所有其余的Z栗?(《罪与罚?

9Q你瞧,桑丘?潘沙朋友Q那边出C三十多个大得出奇的巨人?(《堂?吉诃得?

10Q我q不愿意你受的苦比我受的q大Q希斯克利夫。我只愿我们永远不分:(x)如果我有一句话使你今后难过Q想x在地下也感到一L(fng)难过Q看在我自己的䆾上,饶恕我吧! (《呼啸山庄?

11Q幸的家庭是相同的Q不q的家庭各有各的不同?(《安?卡列娜?

12Q唉Q奴隶般的意大利Q你哀痛之逆旅Q你q暴风雨中没有舵手的孤舟Q你不再是各省的dQ而是妓院! (《神曌Ӏ?

13Q将感情埋藏得太深有时是件坏事。如果一个女人掩C对自己所q男子的感情,她也许就失去了得C的机?x)?(《傲慢与偏见?

14Q钟声又鸣响了……一声又一壎ͼ静谧而安详,即在女人做新娘的那个好月䆾里,钟声里也d有秋天的味道?(《喧嚣与?d)动?

15Q一个hq不是生来要被打败的Q你可以把他消灭掉Q可是打不败他?(《老h与v?

   16Q当?dng)行是行的Q这固然很好Q可是千万别闹出什么ؕ子来啊?(《套中h?

   17Q面?面包!我们要面? (《萌芽?

   18Q我从没有爱q这世界Q它Ҏ(gu)也一栗?(《拜伦诗选?

19Q? 爱情应该lh一U自由感Q而不是囚感?(《儿子与情h?

   20Q暴风雨要在那一天,甚至把一些槲?wi)吹倒,一些教堂的高塔要倒塌Q一些宫D也要动摇! (《v涅诗选?

   21Q自q行ؓ(f)最惹hȝ的hQ却永远是最先去说别人坏话的人?(《伪君子?

   22Q这时一U精上的感慨a(b)然而生Q认Zh生是由啜泣、抽噎和微笑l成的,而抽噎占了其中绝大部分?《欧?亨利短篇说选?

   23Q历史喜p勇豪q的事迹Q同时也谴责q种事迹所造成的后果?(《神U岛?

   24Q整个下半天Qh都听凭羊脂球L烦(ch)。不q本来一直称呼她作“夫人”,现在却简单地U呼她作“小姐”了Q谁也不很知道这是ؓ(f)着什么,? ?jng)她从前在评价当中爬C某种CQ现在呢Qh都想把她从那U地位拉下一U似的,使她明白自己的地位是叩?(《莫泊桑短篇说选?

25Q如果冬天来了,春天q会(x)q吗?  (《雪p选?

   26Q我明白了,我已l找C存在的答案,我恶心的{案Q我整个生命的答案。其实,我所理解的一切事物都可以归结诞这个根本的东西?《恶心?

   27Q世界上有这样一些幸的人,他们把自q痛苦化作他h的幸,他们挥泪埋葬了自己在世间的希望Q它却变成了U子Q长出鲜花和香膏Qؓ(f)孤苦伶仃的苦命hL创伤?《汤姆叔叔的屋?

   28Q当格里?萨姆莎从?ch)躁不安的梦中醒来时Q发C在床上变成了一个巨大的跌?《变形记?

   29Q当现实折过来严丝合~地贴在我们长期的梦想上Ӟ它盖住了梦想Q与它؜Z体,如同两个同样的图形重叠v来合而ؓ(f)一一栗?《追忆似水年华?

   30Qh与h之间Q最可痛心的事莫q于在你认ؓ(f)理应获得善意和友谊的地方Q却遭受了烦(ch)扰和损害?《巨Z?

   31Q现在我说的(zhn)要特别注意听:(x)在别人心中存在的人,是q个人的灵魂。这才是(zhn)本w,才是(zhn)的意识在一生当中赖以呼吸、营M至陶醉的东西Q这也就是?zhn)的灵、?zhn)的不朽和存在于别n上的(zhn)的生命?《日瓦戈ȝ?

   32Q美L(fng)如名香,l燃烧或压榨而其香愈烈,盖幸q最能显露恶徯(g)厄q最能显露美得?《培根论说文集?

   33Q亲q艑֦斯,我出国,Z׃Q我留在国外Qؓ(f)了爱你,我回国,也是Z׃!(《大?UL菲尔?

   34Q强q经怋热恋的h更加铁心Q而从来不能叫他们回心转意?《阴谋与爱情?

35Q在各种事物的常理中Q爱情是无法改变和阻挡的Q因为就本性而言Q爱只会(x)自行消亡QQ何计谋都难以使它逆{?《十日谈?

   36Q只要你是天鹅蛋Q就是生在养鸡场里也没有什么关pR?《安徒生童话?

   37Q就投机钻营来说Q世故的价值永q是无可比拟的?《死灵?

   38. 谁都可能Z错儿Q你在一件事情上琢得多就容易出错?《好兵帅克历险记?

   39Q我们经历着生活中突焉临的一切,毫无防备Q就像演员进入初排。如果生zM的第一ơ彩排便是生zLw,那生zL什么h(hun)值呢?(《生命中不能承受之轻?

   40Q他发现了hc行为的一********自己q不知道——那是Qؓ(f)了要使一个大人或孩极想q某样事情,只需要设法把那g事情弄得不易到手p了?《汤?索亚历险记?

   41Q对有信仰的人,L永生之门?《失乐园?

   42Q有一个传_(d)说的是有那么一只鸟儿,它一生只׃ơ,那歌声比世上所有一切生늚歌声都更加优动听?《荆鸟?

   43Q离开一辈子后,他又回到了自己出生的那片土地上。从到大,他一直是那个地方的目击者?《尤利西斯?

   44Q同上帝保持联系是一码事Q他们都赞同q一点,但让上帝一天二十四时都待在n边就是另一码事了?《第二十二条军规?

   45Q在甜蜜的梦乡里Qh人都是^{的Q但是当太阳升vQ生存的斗争重新开始时Qh与h之间又是多么的不q等?《ȝ先生?

   46Q开发hcL力的矿藏是少不了要由(zhn)难来促成的?《基度山伯爵?

   47Q离你越q的地方Q\途越q;最单的韌Q需要最艰苦的练?fn)?《泰戈尔诗选?

   48Q?zhn)伤人格外敏锐?《约?克里斯朵夫?

   49Q我在女前经常失败,是׃我太爱她们了?《忏(zhn)录?

colys 2007-03-19 20:23 发表评论
]]>
Ļþи | þþƷަvDz| þþ޾Ʒ| 97þþƷˬ| Ӱһþþþó˾Ʒۺ | þۺϸϾþúݺݺ97ɫ| žžþȻ㽶ͼƬ| ۺϾƷ㽶þ97| ɫۺϺϾþۿ| av˾þۺɫ | ŷ˾þƬ| ˾þۺ2020| ŷƷһþĻ| ˾þô߽AV| ۺϾþþþþ| þþùƵ| þþþþһ| ޹˾ƷŮ˾þþ| ɫۺϾþĻ| 999þþùƷ| ھƷۺϾþþ40p| 99þùۺϾƷӰԺ| þþƷAV| ݹƷþþþ| 2021ƷþþƷ| 2020¾þþӾƷ | AVþüįٸ| ҹƷþ| 㽶þҹɫƷ| þù׾Ʒҹ| þþƷһԡ| þݺҹҹ2020 | þҹɫƷŷ| ާѡþþþƷ9966| þþƷ| ޳ɫWWWþվ| ۺϾþһ| þٸ۲AV| þѾƷƵ| Ʒһþþ| þþ|