<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.hanguofeng.com/styles/feedsky2.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:series="http://unfoldingneurons.com/" version="2.0"><channel><atom:link href="http://feed.hanguofeng.com" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/blackcat" type="application/rss+xml"></fs:self_link><lastBuildDate>Mon, 09 Aug 2010 15:55:26 GMT</lastBuildDate><title>玄猫的窝</title><description>韩国峰的博客,关注Web技术与电子商务</description><image><url>http://www.feedsky.com/feed/blackcat/sc/gif</url><title>玄猫的窝</title><link>http://www.hanguofeng.cn</link></image><link>http://www.hanguofeng.cn</link><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><language>en</language><pubDate>Mon, 09 Aug 2010 15:55:26 GMT</pubDate><item><title>立秋++++</title><link>http://item.feedsky.com/~feedsky/blackcat/~7043876/401465452/1224926/1/item.html</link><content:encoded>&lt;p&gt;立秋前一天，六月廿七。&lt;/p&gt;
&lt;p&gt;十点多从公司回家，到家发现忘记带钥匙，于是厚着脸皮，叫棍子跑来开车带我去公司取钥匙，事毕，棍子说，明天立秋了，吃点肥肉，贴秋膘。&lt;/p&gt;
&lt;p&gt;这件事我颇不以为然，身上的膘，还可以撑过很多个秋天。&lt;/p&gt;
&lt;p&gt;而这个秋天，就这样到来了。&lt;/p&gt;
&lt;p&gt;出生和死亡，都是会让人哭泣的事情，我们为迎接一个生命而惊喜，又为送别一个生命，而悲伤。天地不仁，以万物为刍狗。&lt;/p&gt;
&lt;p&gt;不知道已经持续了多少个日夜，每每早晨打开网站看新闻，总是悲剧占据了头条，时不时还有黑体、黑字的加强版悲剧。贼老天，能不能淡定点？&lt;/p&gt;
&lt;p&gt;每到秋天，总是会唤醒我记忆中这样的场景：军训中，在深山中秋天的傍晚，嗅着充满了树叶气息的空气，看蚊子的嘴穿透汗浸湿的衣服。感觉军训带给我们的，是恍如隔世的另一种宁静。恍如隔世没有什么不好，有的时候，真想给自己再创造一些恍如隔世的机会，总是跳出这个坑，才有机会看到坑里的自己。&lt;/p&gt;
&lt;p&gt;今天，先到这里吧，我累了。&lt;/p&gt;
&lt;h3  class=&quot;related_post_title&quot;&gt;随机内容&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/life/summer-vacation-in-beijing&quot; title=&quot;北京 仲夏夜之梦&quot;&gt;北京 仲夏夜之梦&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/life/beihai-park&quot; title=&quot;北海公园游记&quot;&gt;北海公园游记&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/web-client/parseint-bug-in-firefox-3-5-2&quot; title=&quot;parseInt bug in firefox 3.5.2&quot;&gt;parseInt bug in firefox 3.5.2&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/401465452/blackcat/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/blackcat/~7043876/401465452/1224926/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/blackcat/401465452/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/blackcat/401465452/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=bbbbb8e55d132b2f2358136060280f63&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=bbbbb8e55d132b2f2358136060280f63&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=5fa47d471b6cffd2ed537dccf4f5cb8a&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=5fa47d471b6cffd2ed537dccf4f5cb8a&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=9c94e487825e359bd95ff299a8f7beec&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=9c94e487825e359bd95ff299a8f7beec&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.hanguofeng.cn/archives/life/autumn-plus-plus-plus-plus/feed</wfw:commentRss><slash:comments>0</slash:comments><description>立秋前一天，六月廿七。 十点多从公司回家，到家发现忘记带钥匙，于是厚着脸皮，叫棍子跑来开车带我去公司取钥匙，事毕，棍子说，明天立秋了，吃点肥肉，贴秋膘。 这件事我颇不以为然，身上的膘，还可以撑过很多个秋天。 而这个秋天，就这样到来了。 出生和死亡，都是会让人哭泣的事情，我们为迎接一个生命而惊喜，又为送别一个生命，而悲伤。天地不仁，以万物为刍狗。 不知道已经持续了多少个日夜，每每早晨打开网站看新闻，总是悲剧占据了头条，时不时还有黑体、黑字的加强版悲剧。贼老天，能不能淡定点？ 每到秋天，总是会唤醒我记忆中这样的场景：军训中，在深山中秋天的傍晚，嗅着充满了树叶气息的空气，看蚊子的嘴穿透汗浸湿的衣服。感觉军训带给我们的，是恍如隔世的另一种宁静。恍如隔世没有什么不好，有的时候，真想给自己再创造一些恍如隔世的机会，总是跳出这个坑，才有机会看到坑里的自己。 今天，先到这里吧，我累了。 随机内容《Web标准和SEO应用实践》读书笔记北京 仲夏夜之梦LazyLoad Girl On Marriage&lt;img src=&quot;http://www1.feedsky.com/t1/401465452/blackcat/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/blackcat/~7043876/401465452/1224926/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/blackcat/401465452/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/blackcat/401465452/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=bbbbb8e55d132b2f2358136060280f63&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=bbbbb8e55d132b2f2358136060280f63&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=5fa47d471b6cffd2ed537dccf4f5cb8a&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=5fa47d471b6cffd2ed537dccf4f5cb8a&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=9c94e487825e359bd95ff299a8f7beec&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=9c94e487825e359bd95ff299a8f7beec&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</description><category>生活感悟</category><pubDate>Mon, 09 Aug 2010 23:55:26 +0800</pubDate><author>hanguofeng</author><comments>http://www.hanguofeng.cn/archives/life/autumn-plus-plus-plus-plus#comments</comments><guid isPermaLink="false">http://www.hanguofeng.cn/?p=201</guid><dc:creator>hanguofeng</dc:creator><fs:srclink>http://www.hanguofeng.cn/archives/life/autumn-plus-plus-plus-plus?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=autumn-plus-plus-plus-plus</fs:srclink><fs:srcfeed>http://www.hanguofeng.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/blackcat/~7043876/401465452/1224926</fs:itemid></item><item><title>夏·恐惧·变化·解耦</title><link>http://item.feedsky.com/~feedsky/blackcat/~7043876/401465453/1224926/1/item.html</link><content:encoded>&lt;p&gt;今年的夏天我是怎么过的？&lt;/p&gt;
&lt;p&gt;埋头在代码里解决问题、重构。淹的喘不过气来。终究在这个湿热的夏天，闷病了。&lt;/p&gt;
&lt;p&gt;去年的夏天我是怎么过的？&lt;/p&gt;
&lt;p&gt;奔波在学校和公司之间，和老师bargain论文，和dra bargain需求，和棍子bargain设计。&lt;/p&gt;
&lt;p&gt;前年的夏天我是怎么过的？&lt;/p&gt;
&lt;p&gt;蜗居在六里桥，享受刚工作的快感。&lt;/p&gt;
&lt;p&gt;再之前呢？也许……我已经忘却。&lt;/p&gt;
&lt;p&gt;最近半年总是很多变化，从年初的记忆日搬家、到过完年回来的众多离别、到五月份的杭州之游，再到入职百度。&lt;/p&gt;
&lt;p&gt;从写程序的角度来看，没有比写永远不会经历变化的代码更无聊的事情了。写代码的快感就在应对变化，从需求的变化，到负载的变化。&lt;/p&gt;
&lt;p&gt;在程序上害怕变化的原因莫过于耦合。你认为B是一个A，于是你让B继承了A，但实际上明天出现了变化，B不再是A了，问题来了吧。人生何尝不是如此。《波若波罗密心经》有云：“心无挂碍， 无挂碍故，无有恐怖”，我们的恐惧总是来源于“挂碍”，挂碍难道不是依赖么。&lt;/p&gt;
&lt;p&gt;我所习惯的应对变化的方法，则是解耦，如果B不和A耦合的那么强，也许事情会好办很多，你所挂碍的东西，不是那么具体，也会变得好很多。&lt;/p&gt;
&lt;p&gt;现在的人，满足底层需求都是很容易的，所谓的忧愁，却偏偏是不厌其烦的要满足自己的高层需求，总是将“自我实现”继承了“钱”、“地位”，但实际上，你需要的是一个高层需求提供者，这个提供者就是更真实的你，有的时候，这个提供者提供的是钱，有的时候，是地位，还有的时候，是快乐，是幸福，是感动，是付出。别直接把高层需求假设为某个东西嘛。其实啊，钱、地位和开心、幸福在这个层次上都是平行的，实现同一个接口的东西，这个接口是自我实现。那么，这些东西，是否可以继承自一个基类，是一类东西的抽象呢？我现在还没有想明白，所以，不急，不急。慢工出细活，慢慢干。&lt;/p&gt;
&lt;p&gt;淡定哥是我，我是淡定哥。&lt;/p&gt;
&lt;p&gt;回想过去的几个月，有很多东西都被配给了需求提供者，提供者输出的东西，也在频繁变化，不想加那么多switch&amp;#8230;case，太费脑子，让他自己感应环境，自己适配吧。&lt;/p&gt;
&lt;p&gt;我好像得了很严重的职业病，之前发生过看到 season in the sun，念成session in the sun的故事，今天又在一篇普通的，没有作为“Code Life”的博客里面，用技术原理描述生活了，哎。&lt;/p&gt;
&lt;p&gt;好了，淡定，也许你又要说，看不懂，好高深，淡定啦，以后，会懂的。&lt;/p&gt;
&lt;h3  class=&quot;related_post_title&quot;&gt;随机内容&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/ecommerce/building-findable-websites-note&quot; title=&quot;《Web标准和SEO应用实践》读书笔记&quot;&gt;《Web标准和SEO应用实践》读书笔记&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/life/autumn-plus-plus-plus-plus&quot; title=&quot;立秋++++&quot;&gt;立秋++++&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/web-server/php-project-development-1&quot; title=&quot;听小韩聊PHP项目开发(1)&amp;#8211;开题的话&quot;&gt;听小韩聊PHP项目开发(1)&amp;#8211;开题的话&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/401465453/blackcat/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/blackcat/~7043876/401465453/1224926/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/blackcat/401465453/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/blackcat/401465453/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=1f1cfd5daa5819f507be92c8c600bca5&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=1f1cfd5daa5819f507be92c8c600bca5&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=96f6ea11c7172d62a7ebebdc83d2ae86&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=96f6ea11c7172d62a7ebebdc83d2ae86&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=cab249eab40e22d516b4ce3e7b9d0ef7&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=cab249eab40e22d516b4ce3e7b9d0ef7&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.hanguofeng.cn/archives/uncategorized/summer-scare-change-decouple/feed</wfw:commentRss><slash:comments>1</slash:comments><description>今年的夏天我是怎么过的？ 埋头在代码里解决问题、重构。淹的喘不过气来。终究在这个湿热的夏天，闷病了。 去年的夏天我是怎么过的？ 奔波在学校和公司之间，和老师bargain论文，和dra bargain需求，和棍子bargain设计。 前年的夏天我是怎么过的？ 蜗居在六里桥，享受刚工作的快感。 再之前呢？也许……我已经忘却。 最近半年总是很多变化，从年初的记忆日搬家、到过完年回来的众多离别、到五月份的杭州之游，再到入职百度。 从写程序的角度来看，没有比写永远不会经历变化的代码更无聊的事情了。写代码的快感就在应对变化，从需求的变化，到负载的变化。 在程序上害怕变化的原因莫过于耦合。你认为B是一个A，于是你让B继承了A，但实际上明天出现了变化，B不再是A了，问题来了吧。人生何尝不是如此。《波若波罗密心经》有云：“心无挂碍， 无挂碍故，无有恐怖”，我们的恐惧总是来源于“挂碍”，挂碍难道不是依赖么。 我所习惯的应对变化的方法，则是解耦，如果B不和A耦合的那么强，也许事情会好办很多，你所挂碍的东西，不是那么具体，也会变得好很多。 现在的人，满足底层需求都是很容易的，所谓的忧愁，却偏偏是不厌其烦的要满足自己的高层需求，总是将“自我实现”继承了“钱”、“地位”，但实际上，你需要的是一个高层需求提供者，这个提供者就是更真实的你，有的时候，这个提供者提供的是钱，有的时候，是地位，还有的时候，是快乐，是幸福，是感动，是付出。别直接把高层需求假设为某个东西嘛。其实啊，钱、地位和开心、幸福在这个层次上都是平行的，实现同一个接口的东西，这个接口是自我实现。那么，这些东西，是否可以继承自一个基类，是一类东西的抽象呢？我现在还没有想明白，所以，不急，不急。慢工出细活，慢慢干。 淡定哥是我，我是淡定哥。 回想过去的几个月，有很多东西都被配给了需求提供者，提供者输出的东西，也在频繁变化，不想加那么多switch&amp;#8230;case，太费脑子，让他自己感应环境，自己适配吧。 我好像得了很严重的职业病，之前发生过看到 season in the sun，念成session in the sun的故事，今天又在一篇普通的，没有作为“Code Life”的博客里面，用技术原理描述生活了，哎。 好了，淡定，也许你又要说，看不懂，好高深，淡定啦，以后，会懂的。 随机内容北京·冬·有雪听小韩聊PHP项目开发(3)–切分你的系统Beyond summer&lt;img src=&quot;http://www1.feedsky.com/t1/401465453/blackcat/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/blackcat/~7043876/401465453/1224926/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/blackcat/401465453/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/blackcat/401465453/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=1f1cfd5daa5819f507be92c8c600bca5&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=1f1cfd5daa5819f507be92c8c600bca5&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=96f6ea11c7172d62a7ebebdc83d2ae86&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=96f6ea11c7172d62a7ebebdc83d2ae86&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=cab249eab40e22d516b4ce3e7b9d0ef7&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=cab249eab40e22d516b4ce3e7b9d0ef7&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</description><category>闲言碎语</category><pubDate>Tue, 27 Jul 2010 00:37:12 +0800</pubDate><author>hanguofeng</author><comments>http://www.hanguofeng.cn/archives/uncategorized/summer-scare-change-decouple#comments</comments><guid isPermaLink="false">http://www.hanguofeng.cn/?p=197</guid><dc:creator>hanguofeng</dc:creator><fs:srclink>http://www.hanguofeng.cn/archives/uncategorized/summer-scare-change-decouple?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=summer-scare-change-decouple</fs:srclink><fs:srcfeed>http://www.hanguofeng.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/blackcat/~7043876/401465453/1224926</fs:itemid></item><item><title>LazyLoad Girl On Marriage</title><link>http://item.feedsky.com/~feedsky/blackcat/~7043876/401465454/1224926/1/item.html</link><content:encoded>&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;csharp&quot; style=&quot;font-family:monospace;&quot;&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;class&lt;/span&gt; Boy
    &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span style=&quot;color: #0600FF;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;string&lt;/span&gt; _name&lt;span style=&quot;color: #008000;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #0600FF;&quot;&gt;private&lt;/span&gt; Girl _girl&lt;span style=&quot;color: #008000;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #0600FF;&quot;&gt;public&lt;/span&gt; Boy&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #FF0000;&quot;&gt;string&lt;/span&gt; name,Girl girl&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
            &lt;span style=&quot;color: #0600FF;&quot;&gt;this&lt;/span&gt;._name &lt;span style=&quot;color: #008000;&quot;&gt;=&lt;/span&gt; name&lt;span style=&quot;color: #008000;&quot;&gt;;&lt;/span&gt;
            &lt;span style=&quot;color: #0600FF;&quot;&gt;this&lt;/span&gt;._girl &lt;span style=&quot;color: #008000;&quot;&gt;=&lt;/span&gt; girl&lt;span style=&quot;color: #008000;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
        &lt;span style=&quot;color: #0600FF;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0600FF;&quot;&gt;void&lt;/span&gt; Marriage&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
            &lt;span style=&quot;color: #FF0000;&quot;&gt;string&lt;/span&gt; girl_name &lt;span style=&quot;color: #008000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0600FF;&quot;&gt;this&lt;/span&gt;._girl.&lt;span style=&quot;color: #0000FF;&quot;&gt;GetName&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;;&lt;/span&gt;
            &lt;span style=&quot;color: #FF0000;&quot;&gt;string&lt;/span&gt; boy_name &lt;span style=&quot;color: #008000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0600FF;&quot;&gt;this&lt;/span&gt;._name&lt;span style=&quot;color: #008000;&quot;&gt;;&lt;/span&gt;
            &lt;span style=&quot;color: #0600FF;&quot;&gt;this&lt;/span&gt;._marriage&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;boy_name, girl_name&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
        &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;
        &lt;span style=&quot;color: #0600FF;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0600FF;&quot;&gt;void&lt;/span&gt; _marriage&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #FF0000;&quot;&gt;string&lt;/span&gt; boy_name, &lt;span style=&quot;color: #FF0000;&quot;&gt;string&lt;/span&gt; girl_name&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt; 
            &lt;span style=&quot;color: #008080; font-style: italic;&quot;&gt;//other codes&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span style=&quot;color: #FF0000;&quot;&gt;class&lt;/span&gt; Girl
    &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span style=&quot;color: #0600FF;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;int&lt;/span&gt; _id&lt;span style=&quot;color: #008000;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #0600FF;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;string&lt;/span&gt; _name&lt;span style=&quot;color: #008000;&quot;&gt;=&lt;/span&gt;null&lt;span style=&quot;color: #008000;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #0600FF;&quot;&gt;public&lt;/span&gt; Girl&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #FF0000;&quot;&gt;int&lt;/span&gt; id&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
            &lt;span style=&quot;color: #0600FF;&quot;&gt;this&lt;/span&gt;._id &lt;span style=&quot;color: #008000;&quot;&gt;=&lt;/span&gt; id&lt;span style=&quot;color: #008000;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
        &lt;span style=&quot;color: #0600FF;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;string&lt;/span&gt; GetName&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt; 
            &lt;span style=&quot;color: #0600FF;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0600FF;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #0600FF;&quot;&gt;this&lt;/span&gt;._name&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
            &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
                &lt;span style=&quot;color: #0600FF;&quot;&gt;this&lt;/span&gt;._name &lt;span style=&quot;color: #008000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0600FF;&quot;&gt;this&lt;/span&gt;._get_name_from_store&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0600FF;&quot;&gt;this&lt;/span&gt;._id&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
            &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;
            &lt;span style=&quot;color: #0600FF;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0600FF;&quot;&gt;this&lt;/span&gt;._name&lt;span style=&quot;color: #008000;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
        &lt;span style=&quot;color: #0600FF;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;string&lt;/span&gt; _get_name_from_store&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #FF0000;&quot;&gt;int&lt;/span&gt; id&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
            &lt;span style=&quot;color: #FF0000;&quot;&gt;string&lt;/span&gt; rtn &lt;span style=&quot;color: #008000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #666666;&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;;&lt;/span&gt;
            &lt;span style=&quot;color: #008080; font-style: italic;&quot;&gt;//other codes&lt;/span&gt;
            &lt;span style=&quot;color: #0600FF;&quot;&gt;return&lt;/span&gt; rtn&lt;span style=&quot;color: #008000;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;
延迟加载，不是一种设计模式，而是一种思维。当一个对象的若干属性值位于数据库或其他远程存储中，且不会被立即访问时，没有必要一开始创建对象就从远程存储读取，而是在被调用的时候，才进行读取，读取后，可以考虑放入私有变量，作为一个缓存机制，但是需要考虑当后端数据存储更新时，类实例存在脏数据的问题。&lt;br /&gt;
延迟加载在某些场合，可以提高系统性能。&lt;/p&gt;
&lt;h3  class=&quot;related_post_title&quot;&gt;随机内容&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/security/sql-injection-attack&quot; title=&quot;SQL注入攻击-来自微软安全博客的建议&quot;&gt;SQL注入攻击-来自微软安全博客的建议&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/life/autumn-plus-plus-plus-plus&quot; title=&quot;立秋++++&quot;&gt;立秋++++&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/life/wander-about-graduate&quot; title=&quot;慢慢走向毕业&quot;&gt;慢慢走向毕业&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/401465454/blackcat/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/blackcat/~7043876/401465454/1224926/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/blackcat/401465454/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/blackcat/401465454/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=45581a3d5da2de14fc514318e1410fc0&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=45581a3d5da2de14fc514318e1410fc0&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=cd404b17f193a9086f711998a715bd18&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=cd404b17f193a9086f711998a715bd18&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=4dc6ab1146efc323b91fb6fec3a5b31d&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=4dc6ab1146efc323b91fb6fec3a5b31d&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.hanguofeng.cn/archives/code-life/lazyload-girl-on-marriage/feed</wfw:commentRss><slash:comments>0</slash:comments><description>延迟加载，不是一种设计模式，而是一种思维。当一个对象的若干属性值位于数据库或其他远程存储中，且不会被立即访问时，没有必要一开始创建对象就从远程存储读取，而是在被调用的时候，才进行读取，读取后，可以考虑放入私有变量，作为一个缓存机制，但是需要考虑当后端数据存储更新时，类实例存在脏数据的问题。
延迟加载在某些场合，可以提高系统性能。&lt;img src=&quot;http://www1.feedsky.com/t1/401465454/blackcat/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/blackcat/~7043876/401465454/1224926/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/blackcat/401465454/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/blackcat/401465454/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=45581a3d5da2de14fc514318e1410fc0&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=45581a3d5da2de14fc514318e1410fc0&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=cd404b17f193a9086f711998a715bd18&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=cd404b17f193a9086f711998a715bd18&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=4dc6ab1146efc323b91fb6fec3a5b31d&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=4dc6ab1146efc323b91fb6fec3a5b31d&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Code Life</category><pubDate>Wed, 14 Jul 2010 00:57:36 +0800</pubDate><author>hanguofeng</author><comments>http://www.hanguofeng.cn/archives/code-life/lazyload-girl-on-marriage#comments</comments><guid isPermaLink="false">http://www.hanguofeng.cn/?p=191</guid><dc:creator>hanguofeng</dc:creator><fs:srclink>http://www.hanguofeng.cn/archives/code-life/lazyload-girl-on-marriage?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=lazyload-girl-on-marriage</fs:srclink><fs:srcfeed>http://www.hanguofeng.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/blackcat/~7043876/401465454/1224926</fs:itemid></item><item><title>听小韩聊PHP项目开发(3)–切分你的系统</title><link>http://item.feedsky.com/~feedsky/blackcat/~7043876/401465455/1224926/1/item.html</link><content:encoded>&lt;p&gt;【写在前面的话：看看本文的时间，最后一次保存是去年的八月份，想想，还是先发表一下，然后待续，老规矩，在本文完成之前请不要转载。】&lt;/p&gt;
&lt;p&gt;你是一个有控制欲的人么？你希望把控你的项目么？那么，切分他们吧。&lt;/p&gt;
&lt;h2&gt;1、为什么要切分你的项目&lt;/h2&gt;
&lt;p&gt;我们是邪恶的 -.-。我们希望把控我们的项目，所以，我们需要切分它。&lt;/p&gt;
&lt;p&gt;想像一下，你有一个生日蛋糕，你想吃掉它，那么，按照惯例，作为寿星的你，应该先切分它，什么？你还要点蜡烛？OMG，你要在吹蜡烛时喷口水在蛋糕上吗？你的口味好重。&lt;/p&gt;
&lt;p&gt;切分代码，大体上来说，在控制进度、应对变化、简化逻辑、代码复用、分工协作等方面，都有相当的好处。&lt;/p&gt;
&lt;h3&gt;1.1、控制进度&lt;/h3&gt;
&lt;p&gt;首先来说控制进度，当你开始开发一个大型站点时（当然，更多的时候是“你们”），作为项目经理的你来讲，你需要时不时的应对来自你的上级或者你的客户的询问&amp;#8211;“小韩，做了多少了，还有多久能做完啊”。这个时候，你总不能说，“哦，我做了一些了，还有一段时间能做完。”&lt;/p&gt;
&lt;p&gt;你的领导希望听到的是，系统一共有x个模块，我做完了x个，剩下x个模块，难度有些大，可能还需要x天的时间，等所有模块都完成了，再整体整合测试一下，就OK了。这样回答，我想你的表现会让你的领导觉得，你是一个思路清晰，能够把控的项目管理人员。这里再容我跑题一下，一般认为，管理职能分为“计划、组织、协调、控制”等。其中“计划”则首先依赖于对项目的切分，如果不能切分项目，则无从进行计划。&lt;/p&gt;
&lt;h3&gt;1.2、应对变化&lt;/h3&gt;
&lt;p&gt;我们都知道，项目，尤其是软件项目是多变的，这种变化可能来自于前期沟通的不完善，也可能来自于随着时间的发展，客户或软件使用者的需求随之发展而发生变化。如果项目中所有的部分都是互相缠绕的，那么则牵一发而动全身，你甚至无法对一个简单的变量名进行改变，而使得系统的其他部分不受到干扰。然而此时，如果对系统进行划分，将其分为若干层次、若干模块，层次与层次、模块与模块之间通过既定协议（如接口）进行通讯，则可以将原有的整体复杂系统切分为若干个子系统、子模块、子程序，各程序只要保持其输入、输出不变，则其内部的代码可以方便的更改而不怕会影响到外部。&lt;/p&gt;
&lt;p&gt;我举个例子来讲，你可能用以下代码处理用户的登录以及其登录会话的持久化（Session）。&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;php&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;//登录代码&lt;/span&gt;
&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$success_login&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;//假设$success_login为上一步判断用户名密码正确与否的标记&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
  &lt;span style=&quot;color: #000088;&quot;&gt;$_SESSION&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'user_name'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$user_name&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color: #000088;&quot;&gt;$_SESSION&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'password'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$password&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;而使用如下代码判断是否登录&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;php&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #990000;&quot;&gt;isset&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$_SESSION&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'user_name'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
  &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;//do something&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;那么假设有一天，你想使用username作为保存用户名的Session变量名称，则你需要找出所有形如$_SESSION['user_name']的代码，并修改，一旦有遗漏，你的程序将会出现难以查找的bug。&lt;/p&gt;
&lt;p&gt;这就是因为在代码中，把用户登录会话的部分耦合在了全部的系统当中。实际上，你应该专门有一个管理用户登录会话的模块，比如叫做SessionManager，你的代码则可能变为这样：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;php&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #009933; font-style: italic;&quot;&gt;/**
* 设定登录会话
*/&lt;/span&gt;
&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$success_login&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;//假设$success_login为上一步判断用户名密码正确与否的标记&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
 SessionManager&lt;span style=&quot;color: #339933;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;SetLoginUser&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$user&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #009933; font-style: italic;&quot;&gt;/**
* 判断登录状态
*/&lt;/span&gt;
&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;SessionManager&lt;span style=&quot;color: #339933;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #004000;&quot;&gt;IsLogined&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
 &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;//do something&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;这样，你在系统中，无需过度关注用户会话保存的具体实现，只要去调用SessionManager这个管理器的相关方法就可以了，而一旦发生前面提到的变化，你可以在SessionManager的内部完成此修改，而不会将这个问题渲染到全部代码。&lt;/p&gt;
&lt;h3&gt;1.3、简化逻辑&lt;/h3&gt;
&lt;p&gt;也许大部分普通的Web站点并没有复杂的逻辑，但是，随着网络世界越来越精彩，Web站点也会逐渐面临处理复杂逻辑的任务。一旦你面临复杂的系统，其中可能难倒你的，大部分不会是技术问题，而是逻辑问题，我们应当承认我们人类中的大部分，思维的稳定性和思维长度，都是有限的，我举个例子来说，在下棋的时候，在头脑中演算下一步应该如何走，对手针对你的下一步如何走这样的逻辑，没有经过一定锻炼的人，是不可能演算很多步的。对于系统逻辑来说也是一样的，同时考虑过多的问题，以及这些问题之间的关系，会让你无法承受，然而此时将一个大的、复杂的问题切分为若干小问题，在同一时刻只关注一个小问题，则可以让自己轻松快乐的去进行程序的编写。再举个例子，比如我们要写一个MSN的客户端，那么实际上是有很多问题要考虑的，你的程序如何与服务器通讯，如何构造和发送数据，如何接受和处理数据，如何将数据显示在界面上……so many，这个时候你可以将你的系统切分为若干的模块，有的模块去处理网络通讯，有的去处理数据包的解析和构造，有的去处理界面显示，有的去处理各种事件的调度，等等等等，在各个模块中，你还可以进一步划分，直到单个类遵循单一职责原则，而一个模块间各个类都是聚合的……等等等等，这里有很多方法和技巧，我们稍后会详细讨论。&lt;/p&gt;
&lt;h3&gt;1.4、代码复用&lt;/h3&gt;
&lt;p&gt;代码复用的一个重要基础是分割变化与不变的部分，并分别进行编程。还以我们上面的MSN客户端的例子来说，其处理网络通讯的模块，在其他的程序中是不是也可以使用呢？答案是肯定的，但是……这要求你能够良好设计这个模块，权衡其边界，以使其具有普适性。这种基础类的实现，不应当关联具体项目的问题，比如说最简单的，你的方法名，不应当叫做send_msn_request，而只是send_request，这只是一个很简单的例子，但是却说明了，你要考虑你系统中的某些聚合功能，是不是可以在其他项目中使用的，如果是，请将其切分出来，并撰写并非是与当前项目紧密耦合的代码，你可以使用一个适配器将其配接到当前项目中，而不是将其直接为当前项目撰写。&lt;/p&gt;
&lt;p&gt;关于代码复用的内容，您还可以查看&lt;a href=&quot;http://www.ibm.com/developerworks/cn/java/reuse/&quot;&gt;http://www.ibm.com/developerworks/cn/java/reuse/&lt;/a&gt;获得更多信息。&lt;/p&gt;
&lt;h3&gt;1.5、分工协作&lt;/h3&gt;
&lt;p&gt;分工协作首先要求在“工”上有的可分，现代生产是要求详细分工，流水线方式作业的，试想，哪怕一个简单的MP3，有做芯片的机器，有开发嵌入式系统的工程师，还有利用模具生产的合作工厂，最后将各个部分拼接起来，成为你手中那个会发声、可以控制的小玩意。程序开发也是一样的。每一个系统，无论简单复杂，总是由若干个子系统组成的，这些子系统通常是功能内聚的，并通过某些特定方式与其他子系统进行协作。简单说，你所看到的这个WordPress的系统，有文章的子模块、有分类/Tag的子模块，那么我们是否可以让两个人分别去开发文章的子模块和分类/Tag的子模块呢，答案是肯定的，合作者首先坐在一起，定义各自的系统边界，开发分类/Tag子模块的工程师无需了解文章是由标题、内容，甚至图片组成的，他只了解，需要给特定的文章（通过文章的id来作为关键标记），进行分类，或者标记Tag，同理，开发文章子模块的工程师也无需了解Tag和分类的区别，只需要做他的文章模块的CURD就可以了，彼此之间不需要了解太多，是增强系统稳定性，在变化时可以敏捷修改而不担心影响其他部分的重要方式。这可以降低系统的开发和修改成本，工程师之间不必担心进行了重复的工作，因为子系统边界已经确定，每个人需要做什么是非常清晰的，同时，他们不必担心他们所完成的功能如何被调用，因为这些调用规则在切分系统时就明确了。他们也不必考虑其他子系统是否会影响他的系统，包括其他子系统的bug或者修改，因为各子系统是&lt;a href=&quot;http://www.blogjava.net/realsmy/archive/2007/04/08/109245.html&quot; target=&quot;_blank&quot;&gt;高内聚、低耦合&lt;/a&gt;的，子系统的具体实现方式不会过多影响其他系统。&lt;/p&gt;
&lt;h2&gt;2、如何切分你的系统&lt;/h2&gt;
&lt;p&gt;切分系统是一种艺术而不是一种技术。从不同的角度看某个物体，你会得到不同的投影，一个正方形的投影，那么其原物体一定是正方体吗，当然未必。从不同的角度看待系统，就会有不同的切分方式。而我们要做的就是，试图从各个角度来看待系统，避免盲人摸象，最终选择一种权衡的、折衷的，对于系统的发展方向最契合的方式来切分。不同的程序员有不同的切分习惯，而我们也无法武断的去说一定要按照某种方式切分。毕竟，我们不是为了切分系统而切分，而是要达成某种目的，这些目的我在上面笼统的谈过，比如说，针对分工协作，如果团队中程序员的水平有一定差距，那么可以将相对内核的复杂部分切出来，交由有经验的程序员来完成，即时它可能在其他方面并不能达到你的目的。&lt;/p&gt;
&lt;p&gt;切分系统有几种角度，让我们由浅入深的聊一聊。&lt;/p&gt;
&lt;h3&gt;2.1、横向切分&lt;/h3&gt;
&lt;p&gt;对于系统的切分，横向切分是最常见的，例如&lt;a title=&quot;MVC&quot; href=&quot;http://zh.wikipedia.org/wiki/MVC&quot; target=&quot;_blank&quot;&gt;MVC&lt;/a&gt;模式：&lt;strong&gt;MVC&lt;/strong&gt;（Model-View-Controller，模型—视图—控制器模式）用于表示一种软件架构模式。它把软件系统分为三个基本部分：模型（Model），视图（View）和控制器（Controller）。&lt;/p&gt;
&lt;p&gt;这种切分方式主要考虑了系统是由几个层次来完成的，各个层次之间的功能是内聚的，比如在MVC中，Model层负责数据交互，它永远不必理解数据在界面上是如何展示的，同理，View层也不必理解数据是从MySQL数据库还是SQL Server甚至是文件中的哪个取出的。&lt;/p&gt;
&lt;p&gt;这种层次的划分，可以将系统功能划分为几个大部分，这几个大部分相对独立，然而又通过行为/数据被粘合在一起，从而使得其中某个部分发生变化时，其他部分不至于那么敏感，比如，网站的界面是会频繁改版的，然而你会发现，几乎大部分情况都是，界面上的元素摆放发生了变化，但是数据本身并没有任何变化，那么我们只需要改变View层就可以了，你的C和M层的代码一点都不用改动。&lt;/p&gt;
&lt;p&gt;另一个名词叫做“三层架构”，实际上和MVC类似，也有人将MVC直接成为三层架构。其代表是微软的示例程序PetShop（&lt;a title=&quot;PetShop的系统架构设计分析&quot; href=&quot;http://www.cnblogs.com/wayfarer/archive/2006/04/14/375382.html&quot; target=&quot;_self&quot;&gt;架构详细分析看这里&lt;/a&gt;）。其将系统大致分为DAL（Data Access Level，数据访问层）、BLL（Bussines Logic Level，业务逻辑层）以及界面表示层。&lt;/p&gt;
&lt;p&gt;但是，我窃以为，仅有MVC是不够的。在MVC中，Model层的功能实际上是可以再分为数据逻辑和业务逻辑两个层次，即更倾向于三层架构。业务逻辑层可以复用多个数据逻辑层，这在仅有Model层的系统中是难以做到的，同时，业务逻辑是可能发生频繁变更的，此时简单的数据逻辑并没有发生任何变化，不需要花代价和承担风险进行修改。我举个例子来说，我们要设计一个用户系统，该系统有注册、登录、修改信息等功能，此时，我们可以根据需求制定出一个业务逻辑层，你可以将其叫做LogicOperation/UserOperation层（下文简称UserOper），在该层中切合需求进行功能的设计，即Login、Regist、ModifyInfo，那么，我们是否在这个层次中就开始撰写关于数据库操作的代码呢，答案是否定的，因为你会发现，在Login功能中，你需要去查询用户名是否存在这样的信息，在Regist中，你同样会查询该信息，此时，你应该继续抽象出一个功能相对原子化的数据操作层，即DataManager/UserManager，在UserManager中，实现标准的CURD（Create、Update、Read、Delete）功能，以及某些可能用到的其他功能，但是这些方法应该是原子化的，可以由UserOper组合调用，例如在Regist中，可能通过UserManager的IsAccountExist方法查询用户名是否存在，然后用CreateUser方法建立用户，而在Login中，首先通过IsAccountExist方法查询用户名是否存在，然后用ReadUserByAccount方法来获得用户信息，并继而比对密码，等等，你会发现，LogicOperation层是对DataManager层方法的组合调用，而其组合方式就是具体的业务逻辑。&lt;/p&gt;
&lt;h3&gt;2.2、纵向切分&lt;/h3&gt;
&lt;h3&gt;2.3、混合切分&lt;/h3&gt;
&lt;h3&gt;2.4、切分粒度&lt;/h3&gt;
&lt;h2&gt;3、切分案例&lt;/h2&gt;
&lt;h2&gt;3.1、一个CMS系统的切分&lt;/h2&gt;
&lt;h3&gt;3.2、一个博客系统的切分&lt;/h3&gt;
&lt;h3&gt;3.3、一个校内网APP程序的切分&lt;/h3&gt;
&lt;h2&gt;4、切分作业&lt;/h2&gt;
&lt;h3  class=&quot;related_post_title&quot;&gt;相关内容&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/web-server/php-project-development-2&quot; title=&quot;听小韩聊PHP项目开发(2)&amp;#8211;观察你的项目&quot;&gt;听小韩聊PHP项目开发(2)&amp;#8211;观察你的项目&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/web-server/php-project-development-1&quot; title=&quot;听小韩聊PHP项目开发(1)&amp;#8211;开题的话&quot;&gt;听小韩聊PHP项目开发(1)&amp;#8211;开题的话&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/security/configure-fast-in-lamp-on-windows-with-xampp&quot; title=&quot;Windows下AMP平台配置FastCGI方法（以xampp为基础）&quot;&gt;Windows下AMP平台配置FastCGI方法（以xampp为基础）&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/401465455/blackcat/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/blackcat/~7043876/401465455/1224926/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/blackcat/401465455/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/blackcat/401465455/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=7fea8f7462ecd771db7bd8e110620b81&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=7fea8f7462ecd771db7bd8e110620b81&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=2fdeb6a82d357254c268a623798aed86&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=2fdeb6a82d357254c268a623798aed86&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=f396873e8d5f6533c15c624f0613c7a4&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=f396873e8d5f6533c15c624f0613c7a4&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.hanguofeng.cn/archives/web-server/php-project-development-3/feed</wfw:commentRss><slash:comments>0</slash:comments><series:name>听小韩聊PHP项目开发</series:name><description>【写在前面的话：看看本文的时间，最后一次保存是去年的八月份，想想，还是先发表一下，然后待续，老规矩，在本文完成之前请不要转载。】 你是一个有控制欲的人么？你希望把控你的项目么？那么，切分他们吧。 1、为什么要切分你的项目 我们是邪恶的 -.-。我们希望把控我们的项目，所以，我们需要切分它。 想像一下，你有一个生日蛋糕，你想吃掉它，那么，按照惯例，作为寿星的你，应该先切分它，什么？你还要点蜡烛？OMG，你要在吹蜡烛时喷口水在蛋糕上吗？你的口味好重。 切分代码，大体上来说，在控制进度、应对变化、简化逻辑、代码复用、分工协作等方面，都有相当的好处。 1.1、控制进度 首先来说控制进度，当你开始开发一个大型站点时（当然，更多的时候是“你们”），作为项目经理的你来讲，你需要时不时的应对来自你的上级或者你的客户的询问&amp;#8211;“小韩，做了多少了，还有多久能做完啊”。这个时候，你总不能说，“哦，我做了一些了，还有一段时间能做完。” 你的领导希望听到的是，系统一共有x个模块，我做完了x个，剩下x个模块，难度有些大，可能还需要x天的时间，等所有模块都完成了，再整体整合测试一下，就OK了。这样回答，我想你的表现会让你的领导觉得，你是一个思路清晰，能够把控的项目管理人员。这里再容我跑题一下，一般认为，管理职能分为“计划、组织、协调、控制”等。其中“计划”则首先依赖于对项目的切分，如果不能切分项目，则无从进行计划。 1.2、应对变化 我们都知道，项目，尤其是软件项目是多变的，这种变化可能来自于前期沟通的不完善，也可能来自于随着时间的发展，客户或软件使用者的需求随之发展而发生变化。如果项目中所有的部分都是互相缠绕的，那么则牵一发而动全身，你甚至无法对一个简单的变量名进行改变，而使得系统的其他部分不受到干扰。然而此时，如果对系统进行划分，将其分为若干层次、若干模块，层次与层次、模块与模块之间通过既定协议（如接口）进行通讯，则可以将原有的整体复杂系统切分为若干个子系统、子模块、子程序，各程序只要保持其输入、输出不变，则其内部的代码可以方便的更改而不怕会影响到外部。 我举个例子来讲，你可能用以下代码处理用户的登录以及其登录会话的持久化（Session）。 //登录代码 if&amp;#40;$success_login&amp;#41; //假设$success_login为上一步判断用户名密码正确与否的标记 &amp;#123; $_SESSION&amp;#91;'user_name'&amp;#93; = $user_name; $_SESSION&amp;#91;'password'&amp;#93; = $password; &amp;#125; 而使用如下代码判断是否登录 if&amp;#40;isset&amp;#40;$_SESSION&amp;#91;'user_name'&amp;#93;&amp;#41;&amp;#41; &amp;#123; //do something &amp;#125; 那么假设有一天，你想使用username作为保存用户名的Session变量名称，则你需要找出所有形如$_SESSION['user_name']的代码，并修改，一旦有遗漏，你的程序将会出现难以查找的bug。 这就是因为在代码中，把用户登录会话的部分耦合在了全部的系统当中。实际上，你应该专门有一个管理用户登录会话的模块，比如叫做SessionManager，你的代码则可能变为这样： /** * 设定登录会话 */ if&amp;#40;$success_login&amp;#41; //假设$success_login为上一步判断用户名密码正确与否的标记 &amp;#123; SessionManager::SetLoginUser&amp;#40;$user&amp;#41;; &amp;#125; &amp;#160; /** * 判断登录状态 */ if&amp;#40;SessionManager::IsLogined&amp;#40;&amp;#41;&amp;#41; &amp;#123; //do something &amp;#125; 这样，你在系统中，无需过度关注用户会话保存的具体实现，只要去调用SessionManager这个管理器的相关方法就可以了，而一旦发生前面提到的变化，你可以在SessionManager的内部完成此修改，而不会将这个问题渲染到全部代码。 1.3、简化逻辑 也许大部分普通的Web站点并没有复杂的逻辑，但是，随着网络世界越来越精彩，Web站点也会逐渐面临处理复杂逻辑的任务。一旦你面临复杂的系统，其中可能难倒你的，大部分不会是技术问题，而是逻辑问题，我们应当承认我们人类中的大部分，思维的稳定性和思维长度，都是有限的，我举个例子来说，在下棋的时候，在头脑中演算下一步应该如何走，对手针对你的下一步如何走这样的逻辑，没有经过一定锻炼的人，是不可能演算很多步的。对于系统逻辑来说也是一样的，同时考虑过多的问题，以及这些问题之间的关系，会让你无法承受，然而此时将一个大的、复杂的问题切分为若干小问题，在同一时刻只关注一个小问题，则可以让自己轻松快乐的去进行程序的编写。再举个例子，比如我们要写一个MSN的客户端，那么实际上是有很多问题要考虑的，你的程序如何与服务器通讯，如何构造和发送数据，如何接受和处理数据，如何将数据显示在界面上……so many，这个时候你可以将你的系统切分为若干的模块，有的模块去处理网络通讯，有的去处理数据包的解析和构造，有的去处理界面显示，有的去处理各种事件的调度，等等等等，在各个模块中，你还可以进一步划分，直到单个类遵循单一职责原则，而一个模块间各个类都是聚合的……等等等等，这里有很多方法和技巧，我们稍后会详细讨论。 [...]&lt;img src=&quot;http://www1.feedsky.com/t1/401465455/blackcat/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/blackcat/~7043876/401465455/1224926/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/blackcat/401465455/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/blackcat/401465455/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=7fea8f7462ecd771db7bd8e110620b81&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=7fea8f7462ecd771db7bd8e110620b81&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=2fdeb6a82d357254c268a623798aed86&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=2fdeb6a82d357254c268a623798aed86&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=f396873e8d5f6533c15c624f0613c7a4&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=f396873e8d5f6533c15c624f0613c7a4&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</description><category>听小韩聊PHP项目开发</category><category>Web服务器端技术</category><category>PHP</category><pubDate>Mon, 12 Jul 2010 20:04:09 +0800</pubDate><author>hanguofeng</author><comments>http://www.hanguofeng.cn/archives/web-server/php-project-development-3#comments</comments><guid isPermaLink="false">http://www.hanguofeng.cn/?p=144</guid><dc:creator>hanguofeng</dc:creator><fs:srclink>http://www.hanguofeng.cn/archives/web-server/php-project-development-3?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=php-project-development-3</fs:srclink><fs:srcfeed>http://www.hanguofeng.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/blackcat/~7043876/401465455/1224926</fs:itemid></item><item><title>Singleton.Lover</title><link>http://item.feedsky.com/~feedsky/blackcat/~7043876/401465456/1224926/1/item.html</link><content:encoded>&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;csharp&quot; style=&quot;font-family:monospace;&quot;&gt;    &lt;span style=&quot;color: #FF0000;&quot;&gt;class&lt;/span&gt; Lover
    &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span style=&quot;color: #0600FF;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0600FF;&quot;&gt;static&lt;/span&gt; Lover _instance&lt;span style=&quot;color: #008000;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #0600FF;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0600FF;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0600FF;&quot;&gt;readonly&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;object&lt;/span&gt; _locker &lt;span style=&quot;color: #008000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #0600FF;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0600FF;&quot;&gt;static&lt;/span&gt; Lover getInstance&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
            &lt;span style=&quot;color: #0600FF;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0600FF;&quot;&gt;null&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;==&lt;/span&gt; Lover._instance&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
            &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
                &lt;span style=&quot;color: #0600FF;&quot;&gt;lock&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;Lover._locker&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
                &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
                    &lt;span style=&quot;color: #0600FF;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0600FF;&quot;&gt;null&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;==&lt;/span&gt; Lover._instance&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;
                    &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#123;&lt;/span&gt;
                        Lover._instance &lt;span style=&quot;color: #008000;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;new&lt;/span&gt; Lover&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;;&lt;/span&gt;
                    &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;
                &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;
            &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
            &lt;span style=&quot;color: #0600FF;&quot;&gt;return&lt;/span&gt; Lover._instance&lt;span style=&quot;color: #008000;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span style=&quot;color: #000000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;单例模式（单件模式、Singleton）是一种为方便管理类的实例的数量的设计模式，属于建造型模式。当然，这个数量一般是1。单例模式可以使得在生存期内，所有使用类实例的场合，都使用相同的类实例，从而保证在某些应用场景下，所操作的数据是你需要操作的那一份，同时有一个副作用的方便就是不再需要记住所使用的是哪个类实例。&lt;/p&gt;
&lt;hr /&gt;顺便发一个小笑话：&lt;/p&gt;
&lt;p&gt;如何加一个条件让查询：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;sql&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;SELECT&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;FROM&lt;/span&gt; 女人 &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;WHERE&lt;/span&gt; will_love_me&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;true&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;不返回空记录集呢&lt;/p&gt;
&lt;p&gt;答案是&amp;#8230;&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;sql&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;SELECT&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;FROM&lt;/span&gt; 女人 &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;WHERE&lt;/span&gt; will_love_me&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;true &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;OR&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;好吧，这很冷。。。&lt;/p&gt;
&lt;p&gt;QQREADER0EAE6F8FD43BDC7F&lt;/p&gt;
&lt;h3  class=&quot;related_post_title&quot;&gt;随机内容&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/life/beijing-winter-snow&quot; title=&quot;北京·冬·有雪&quot;&gt;北京·冬·有雪&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/life/missing-showgood&quot; title=&quot;从Showgood怀念起&quot;&gt;从Showgood怀念起&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/web-server/php-serialize-json&quot; title=&quot;PHP串行化与JSON&quot;&gt;PHP串行化与JSON&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/401465456/blackcat/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/blackcat/~7043876/401465456/1224926/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/blackcat/401465456/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/blackcat/401465456/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=e4cc7de6caa9ce1be17cf1b71831ecd8&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=e4cc7de6caa9ce1be17cf1b71831ecd8&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=2023174943dd452ec7bb415e4d59c9b1&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=2023174943dd452ec7bb415e4d59c9b1&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=72653f9f539367aaba4f647a9268e45e&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=72653f9f539367aaba4f647a9268e45e&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.hanguofeng.cn/archives/code-life/singleton-lover/feed</wfw:commentRss><slash:comments>3</slash:comments><description>class Lover &amp;#123; private static Lover _instance; private static readonly object _locker = new object&amp;#40;&amp;#41;; public static Lover getInstance&amp;#40;&amp;#41; &amp;#123; if &amp;#40;null == Lover._instance&amp;#41; &amp;#123; lock &amp;#40;Lover._locker&amp;#41; &amp;#123; if &amp;#40;null == Lover._instance&amp;#41; &amp;#123; Lover._instance = new Lover&amp;#40;&amp;#41;; &amp;#125; &amp;#125; &amp;#125; &amp;#160; return Lover._instance; &amp;#125; &amp;#125; 单例模式（单件模式、Singleton）是一种为方便管理类的实例的数量的设计模式，属于建造型模式。当然，这个数量一般是1。单例模式可以使得在生存期内，所有使用类实例的场合，都使用相同的类实例，从而保证在某些应用场景下，所操作的数据是你需要操作的那一份，同时有一个副作用的方便就是不再需要记住所使用的是哪个类实例。 顺便发一个小笑话： 如何加一个条件让查询： SELECT * FROM 女人 WHERE will_love_me=true 不返回空记录集呢 [...]&lt;img src=&quot;http://www1.feedsky.com/t1/401465456/blackcat/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/blackcat/~7043876/401465456/1224926/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/blackcat/401465456/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/blackcat/401465456/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=e4cc7de6caa9ce1be17cf1b71831ecd8&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=e4cc7de6caa9ce1be17cf1b71831ecd8&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=2023174943dd452ec7bb415e4d59c9b1&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=2023174943dd452ec7bb415e4d59c9b1&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=72653f9f539367aaba4f647a9268e45e&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=72653f9f539367aaba4f647a9268e45e&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Code Life</category><pubDate>Tue, 01 Dec 2009 21:17:21 +0800</pubDate><author>hanguofeng</author><comments>http://www.hanguofeng.cn/archives/code-life/singleton-lover#comments</comments><guid isPermaLink="false">http://www.hanguofeng.cn/?p=174</guid><dc:creator>hanguofeng</dc:creator><fs:srclink>http://www.hanguofeng.cn/archives/code-life/singleton-lover?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=singleton-lover</fs:srclink><fs:srcfeed>http://www.hanguofeng.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/blackcat/~7043876/401465456/1224926</fs:itemid></item><item><title>北京·冬·有雪</title><link>http://item.feedsky.com/~feedsky/blackcat/~7043876/401465457/1224926/1/item.html</link><content:encoded>&lt;p&gt;今年的气候不太正常，11月刚露出半个脸庞，就蒙上了轻纱，天会突然变得阴暗，然后雪就降了下来。&lt;/p&gt;
&lt;p&gt;今天晚上，又是这样的，只是，天蒙蒙有些橙色，树都被妆成了圣诞节的样子。&lt;/p&gt;
&lt;p&gt;我希望今天是一场梦，我希望，这一年，是一场梦。&lt;/p&gt;
&lt;p&gt;然而，不是的。&lt;/p&gt;
&lt;p&gt;ade，dota战友，ade，加班总是没蓝的同事，ade，东来顺，ade，很多次被用记号笔画过的白板，ade，glass floor，ade，220，ade，2007。&lt;/p&gt;
&lt;p&gt;and,never,forget,those days in dream.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;alignnone&quot; title=&quot;never-forget-jiyiri&quot; src=&quot;http://www.hanguofeng.cn/wp-content/uploads/2009/11/never-forget-jiyiri.png&quot; alt=&quot;&quot; width=&quot;600&quot;/&gt;&lt;/p&gt;
&lt;h3  class=&quot;related_post_title&quot;&gt;随机内容&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/security/configure-fast-in-lamp-on-windows-with-xampp&quot; title=&quot;Windows下AMP平台配置FastCGI方法（以xampp为基础）&quot;&gt;Windows下AMP平台配置FastCGI方法（以xampp为基础）&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/ecommerce/sns-and-marketing&quot; title=&quot;SNS与营销&quot;&gt;SNS与营销&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/life/mop-in-memory&quot; title=&quot;回忆当年在猫扑的故事&quot;&gt;回忆当年在猫扑的故事&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/401465457/blackcat/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/blackcat/~7043876/401465457/1224926/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/blackcat/401465457/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/blackcat/401465457/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=f28a8bf1e78ce7f7fe65f52d99f8861e&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=f28a8bf1e78ce7f7fe65f52d99f8861e&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=ee1f187c455617d9af438c8b9ad465ce&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=ee1f187c455617d9af438c8b9ad465ce&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=f0836dcb601cfeb844a8ecaf85f1baa4&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=f0836dcb601cfeb844a8ecaf85f1baa4&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.hanguofeng.cn/archives/life/beijing-winter-snow/feed</wfw:commentRss><slash:comments>1</slash:comments><description>今年的气候不太正常，11月刚露出半个脸庞，就蒙上了轻纱，天会突然变得阴暗，然后雪就降了下来。 今天晚上，又是这样的，只是，天蒙蒙有些橙色，树都被妆成了圣诞节的样子。 我希望今天是一场梦，我希望，这一年，是一场梦。 然而，不是的。 ade，dota战友，ade，加班总是没蓝的同事，ade，东来顺，ade，很多次被用记号笔画过的白板，ade，glass floor，ade，220，ade，2007。 and,never,forget,those days in dream. 随机内容北京的冬天，有点冷始于九月Singleton.Lover&lt;img src=&quot;http://www1.feedsky.com/t1/401465457/blackcat/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/blackcat/~7043876/401465457/1224926/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/blackcat/401465457/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/blackcat/401465457/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=f28a8bf1e78ce7f7fe65f52d99f8861e&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=f28a8bf1e78ce7f7fe65f52d99f8861e&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=ee1f187c455617d9af438c8b9ad465ce&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=ee1f187c455617d9af438c8b9ad465ce&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=f0836dcb601cfeb844a8ecaf85f1baa4&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=f0836dcb601cfeb844a8ecaf85f1baa4&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</description><category>生活感悟</category><pubDate>Tue, 10 Nov 2009 00:29:11 +0800</pubDate><author>hanguofeng</author><comments>http://www.hanguofeng.cn/archives/life/beijing-winter-snow#comments</comments><guid isPermaLink="false">http://www.hanguofeng.cn/?p=171</guid><dc:creator>hanguofeng</dc:creator><fs:srclink>http://www.hanguofeng.cn/archives/life/beijing-winter-snow?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=beijing-winter-snow</fs:srclink><fs:srcfeed>http://www.hanguofeng.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/blackcat/~7043876/401465457/1224926</fs:itemid></item><item><title>parseInt bug in firefox 3.5.2</title><link>http://item.feedsky.com/~feedsky/blackcat/~7043876/401465458/1224926/1/item.html</link><content:encoded>&lt;p&gt;&lt;!--doubanclaim514a3bae359e95af--&gt;&lt;br /&gt;
来，先让我们看下面的JS代码：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot; style=&quot;font-family:monospace;&quot;&gt;  &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; i&lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #CC0000;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;i &lt;span style=&quot;color: #339933;&quot;&gt;&amp;amp;&lt;/span&gt;lt&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #CC0000;&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;i&lt;span style=&quot;color: #339933;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; result &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; parseInt&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #CC0000;&quot;&gt;15.02&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
	document.&lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt; result &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
	document.&lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span style=&quot;color: #3366CC;&quot;&gt;''&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;你觉得他会输出什么？一串的-15？恩，也许在其他浏览器中是这样的，但是据我的测试，在Firefox 3.5.2里面，只有开始的几个是-15，其他都是-16，而且-15的个数不一定，有时是3个，有时又会出现4个。&lt;/p&gt;
&lt;p&gt;那么，怎么解决呢，将其改为：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot; style=&quot;font-family:monospace;&quot;&gt;parseInt&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #CC0000;&quot;&gt;15.02&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #CC0000;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;即可&lt;br /&gt;
&lt;span id=&quot;more-160&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;
English version for foreign friends:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ok,let&amp;#8217;s get to the codes below:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot; style=&quot;font-family:monospace;&quot;&gt;  &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; i&lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #CC0000;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;i &lt;span style=&quot;color: #339933;&quot;&gt;&amp;amp;&lt;/span&gt;lt&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #CC0000;&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;i&lt;span style=&quot;color: #339933;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; result &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; parseInt&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #CC0000;&quot;&gt;15.02&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
	document.&lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt; result &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
	document.&lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;write&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span style=&quot;color: #3366CC;&quot;&gt;''&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;What do you think it will output?Rows of -15?It might be in other browsers except Firefox 3.5.2 according to my test.In Firefox 3.5.2,only the begins are -15,others are -16,and the number of -15 is varying at different time,sometime 3 and sometimes maybe 4.&lt;/p&gt;
&lt;p&gt;Then,codes following will works:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot; style=&quot;font-family:monospace;&quot;&gt;parseInt&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #CC0000;&quot;&gt;15.02&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #CC0000;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3  class=&quot;related_post_title&quot;&gt;随机内容&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/web-client/google-ajax-language-api-developers-guide&quot; title=&quot;[译文]Google AJAX Language API开发者参考&quot;&gt;[译文]Google AJAX Language API开发者参考&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/code-life/lazyload-girl-on-marriage&quot; title=&quot;LazyLoad Girl On Marriage&quot;&gt;LazyLoad Girl On Marriage&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/life/missing-showgood&quot; title=&quot;从Showgood怀念起&quot;&gt;从Showgood怀念起&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/401465458/blackcat/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/blackcat/~7043876/401465458/1224926/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/blackcat/401465458/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/blackcat/401465458/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=01dc1cd697c3025ac6717fc855f5eea6&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=01dc1cd697c3025ac6717fc855f5eea6&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=71fcf184ec8f397cfc04ede56967e31d&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=71fcf184ec8f397cfc04ede56967e31d&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=9712cb877854060952a65665266ae18f&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=9712cb877854060952a65665266ae18f&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.hanguofeng.cn/archives/web-client/parseint-bug-in-firefox-3-5-2/feed</wfw:commentRss><slash:comments>3</slash:comments><description>来，先让我们看下面的JS代码： for&amp;#40;var i=0;i &amp;#38;lt; 1000;i++&amp;#41; &amp;#123; var result = parseInt&amp;#40;-15.02&amp;#41;; document.write&amp;#40; result &amp;#41;; document.write&amp;#40; '' &amp;#41;; &amp;#125; 你觉得他会输出什么？一串的-15？恩，也许在其他浏览器中是这样的，但是据我的测试，在Firefox 3.5.2里面，只有开始的几个是-15，其他都是-16，而且-15的个数不一定，有时是3个，有时又会出现4个。 那么，怎么解决呢，将其改为： parseInt&amp;#40;-15.02,10&amp;#41;; 即可 English version for foreign friends: Ok,let&amp;#8217;s get to the codes below: for&amp;#40;var i=0;i &amp;#38;lt; 1000;i++&amp;#41; &amp;#123; var result = parseInt&amp;#40;-15.02&amp;#41;; document.write&amp;#40; result &amp;#41;; document.write&amp;#40; '' &amp;#41;; &amp;#125; What do you think it will [...]&lt;img src=&quot;http://www1.feedsky.com/t1/401465458/blackcat/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/blackcat/~7043876/401465458/1224926/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/blackcat/401465458/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/blackcat/401465458/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=01dc1cd697c3025ac6717fc855f5eea6&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=01dc1cd697c3025ac6717fc855f5eea6&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=71fcf184ec8f397cfc04ede56967e31d&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=71fcf184ec8f397cfc04ede56967e31d&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=9712cb877854060952a65665266ae18f&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=9712cb877854060952a65665266ae18f&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Web客户端技术</category><pubDate>Sun, 06 Sep 2009 10:25:37 +0800</pubDate><author>hanguofeng</author><comments>http://www.hanguofeng.cn/archives/web-client/parseint-bug-in-firefox-3-5-2#comments</comments><guid isPermaLink="false">http://www.hanguofeng.cn/?p=160</guid><dc:creator>hanguofeng</dc:creator><fs:srclink>http://www.hanguofeng.cn/archives/web-client/parseint-bug-in-firefox-3-5-2?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=parseint-bug-in-firefox-3-5-2</fs:srclink><fs:srcfeed>http://www.hanguofeng.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/blackcat/~7043876/401465458/1224926</fs:itemid></item><item><title>听小韩聊PHP项目开发(2)–观察你的项目</title><link>http://item.feedsky.com/~feedsky/blackcat/~7043876/401465459/1224926/1/item.html</link><content:encoded>&lt;p&gt;Hello，时隔半年，我终于继续了 =.=&lt;/p&gt;
&lt;h2&gt;1、为什么要观察你的项目&amp;#8211;需求的重要性。&lt;/h2&gt;
&lt;p&gt;俗话说，磨刀不误砍柴工，当开始一个项目时，我希望你就像在街上看到了美女，你要先好好打量打量，然后再思考，“啊，我怎么去问她的电话呢~”&lt;/p&gt;
&lt;p&gt;So,same as our projects.&lt;/p&gt;
&lt;p&gt;当开始一个项目时，你应当首先审视的是项目的需求，要注意了，除非是你自己为自己闲着没事做的东西，其他的项目，都是为别人做的，怎么理解呢，我的意思是说，你项目的目的就是满足别人的需求。软件实际上是一种商品。所谓商品，就是商品是为交换而生产（或用于交换）的对他人或社会有用的劳动产品[&lt;a href=&quot;http://baike.baidu.com/view/68843.htm&quot; target=&quot;_blank&quot;&gt;百度百科&lt;/a&gt;]。请注意“对他人或社会有用”，这就是在讲，我们所编写的软件是为了满足需求而存在的，如果不能满足需求，哪怕你用了再高的技术，软件做的再漂亮，运行效率再高，都不能被称之为一款合格的软件。&lt;/p&gt;
&lt;p&gt;为什么突然要扯这么远呢，是因为，我曾经和很多人一样，在做开发的时候，开始的时候无时不刻的都在想，这个东西有什么技术创新点，什么地方的效率会很低，应该解决，后来我听到了一句话，叫做“过早优化是万恶之源（premature optimization is the root of all evil&amp;#8211;&lt;a href=&quot;http://en.wikipedia.org/wiki/Donald_Knuth&quot; target=&quot;_blank&quot;&gt;Donald Knuth&lt;/a&gt;）”，可能的确有那样一些项目，他们要求很高的效率，或者，该项目的需求者一直在询问你关于效率的问题，但是无论如何，在你什么都没有的时候，你就什么都不能做，就像你并没有一个女儿，你却时刻想着如何去打扮她一样毫无意义。&lt;/p&gt;
&lt;p&gt;请记住，我们所编写的软件，它的第一要务是满足需求，当然，运行效率、界面美化可能是需求的一部分（非功能性需求，我们稍后会谈到），但是请将其作为需求考虑，而不是贯穿软件的全部。&lt;/p&gt;
&lt;p&gt;关于需求，这里有一幅漫画，来源未知（提示：你可以点击图片放大）：&lt;br /&gt;
&lt;a href=&quot;http://picasaweb.google.com/lh/photo/TDuCZ-g51Jx6Bry-m9D6vQ?feat=embedwebsite&quot;&gt;&lt;img src=&quot;http://lh3.ggpht.com/_OkD473b7axo/Si08GNdByVI/AAAAAAAAAic/mqkDFXeLXsg/s400/8bdbce98-4d20-3784-891b-a3d4f0970df3.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;另外还有此图片的中文版：http://picasaweb.google.com/lh/photo/ZK59I5p5-jfsc7kl213htQ?feat=directlink&lt;/p&gt;
&lt;h2&gt;2、我要观察到什么&amp;#8211;什么是需求&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;“需求是产品必须完成的事以及必须具备的品质。需求存在的原因要么是该类型的产品要求一定的功能和品质，要么是客户希望需求成为交付的产品的一部分。”&lt;/em&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot;&gt;&lt;em&gt;&amp;#8211;《掌握需求过程》ISBN:9787115159830&lt;/em&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;从上面的漫画中，可以很有趣的发现，由于沟通方式，对目标的理解差异和技术水平的不同，都会让需求在传递中发生变化，这种变化有时可能是致命的，我们人类在沟通时多采用语言，然而语言，尤其是口头语言，极易发生变化。因此，就需要大家对需求有一个统一的认识，什么是需求，需求应该包括哪些内容，不应该包括哪些内容，应该如何去分析需求。&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;本节引言中的话，严格来讲不是对需求的定义，让我们来看IEEE软件工程标准词汇表(1997年)中“需求”的定义：&lt;/p&gt;
&lt;p&gt;(1)用户解决问题或达到目标所需的条件或权能(Capability)。&lt;/p&gt;
&lt;p&gt;(2)系统或系统部件要满足合同、标准、规范或其它正式规定文档所需具有的条件或权能。&lt;/p&gt;
&lt;p&gt;(3)一种反映上面(1)或(2)所描述的条件或权能的文档说明&lt;/p&gt;
&lt;p&gt;软件需求包括三个不同的层次—业务需求、用户需求和功能需求—也包括非功能需求。业务需求( business requirement)反映了组织机构或客户对系统、产品高层次的目标要求，它们在项目视图与范围文档中予以说明。用户需求(user requirement) 文档描述了用户使用产品必须要完成的任务，这在使用实例(use case)文档或方案脚本(scenario)说明中予以说明。功能需求(functional requirement)定义了开发人员必须实现的软件功能，使得用户能完成他们的任务，从而满足了业务需求。所谓特性(feature)是指逻辑上相关 的功能需求的集合，给用户提供处理能力并满足业务需求。&lt;/p&gt;
&lt;p&gt;简单来说，需求就是说明你软件将要满足的用户需要，需求是你软件的功能列表，这里的功能可能包括看得见的功能和看不见的功能。同时需要注意实际用户（用户是重要的需求分析参与者，难以想象一个只有开发者而没有用户参与的需求分析，所得出的是什么）可能对需求的理解有误，有时他们甚至不了解活无法向你描述出他的需求，也有时，他会“啰啰嗦嗦”的向你讲一堆不是需求的东西。&lt;/p&gt;
&lt;p&gt;同时，需求还包括非功能的部分，例如，“单次搜索查询必须在0.1秒内完成”、“用户传输文件的速度不应低于其网络最高可用带宽的50%”，这些内容并非软件的功能性要求，但是实际上是软件的使用者使用软件体验、感受的重要感受点甚至是其是否能完成功能性需求的制约。&lt;/p&gt;
&lt;h2&gt;3、我没有马王爷的第三只眼&amp;#8211;那么我如何分析需求呢&lt;/h2&gt;
&lt;p&gt;哦，这很麻烦，是的，好吧，我们退一步，作为开发人员，你可以让你的产品经理去和客户打交道，但是你必须和你的产品经理打交道，同时，你还必须和你的代码打交道。&lt;/p&gt;
&lt;p&gt;与产品经理打交道和与代码打交道是两码事，八杆子打不到一块，你不能和产品经理讲if(xxx)  {} ，也不能去问你的代码，这里是让用户操作的，还是你丫自动操作的。&lt;/p&gt;
&lt;p&gt;在与产品人员打交道时，你有责任用他们的语言来描述问题，这并不是单纯为了对方能够听懂你说什么，更重要的是，这会大大减少你们在交流沟通中的误解。所以，熟知你所在的行业，熟悉他们的业务，如果你要开发财务系统，请去阅读财会相关书籍，如果你要开发ERP系统，请去和工人师傅、基层管理人员多聊聊，在拓展你领域的同时，也会让你对你的编程思想有新的看法。&lt;/p&gt;
&lt;p&gt;在与代码打交道的时候，你需要是一个好的建筑师，你应当构建严谨、运行健壮、可扩展性强的代码，这要求你在充分理解需求的情况下，看到需求的发展方向以及需求中可能发生变动的情况，甚至你需要和产品经理、客户去沟通，提出你的想法，当你问道“我觉得这里这样做的话，系统可能存在不稳定的因素，如果怎么怎么样做，不仅系统稳定了，您的操作也会更方便”，客户恍然大悟，你又减轻了工作量，何乐不为呢。&lt;/p&gt;
&lt;p&gt;在理解需求、分析系统时，我建议你首先这样做：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;将系统中存在的活动者都列出来，然后依次列出他们的操作功能和反应。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;比如，一个简单的文章系统，我们可能这样去描述它&lt;/p&gt;
&lt;div style=&quot;background:#EEE&quot;&gt;普通用户：注册、登录、找回密码、修改个人信息、查看类别、查看文章、查看某个类别下的文章、输入关键字搜索文章、发表评论、当别人发表对自己评论的回复时收到邮件。&lt;br /&gt;
管理员：查看用户信息、CURD（Create-Update-Read-Delete）类别、CURD文章&lt;/div&gt;
&lt;p&gt;在上面的需求描述中，涉及了两个活动者，分别是“普通用户”和“管理员”，同时两个活动者都有若干功能，其中“普通用户”的“当别人发表对自己评论的回复时收到邮件”实际上不是用户的主动操作，而是用户对某个操作的反应，需要注意的是，这样的信息也需要在需求分析中体现。&lt;/p&gt;
&lt;p&gt;需求分析可以体现为UML用例图，其好处是更直观，同时由于是统一化的表达，更有助于沟通，其他程序员可以更方便的理解你的意思，而不容易出现理解误差。&lt;/p&gt;
&lt;p&gt;关于UML用例图方面的内容，可以到http://hi.baidu.com/jyangstu/blog/item/5d2f89131ef270c6c3fd7833.html查看一份简介。&lt;/p&gt;
&lt;p&gt;我的需求方法实际上是用例图的一个超级简版，这个方法不能体现活动者与活动者、用例与用例（就是活动者所做的那些事情）之间的关系，一般适用于小型项目或大中型项目的模块级需求分析，对大中型项目的整体需求分析，实际上是一个非常复杂、有机结合的多个过程的系统，以后有机会我们再探讨。&lt;/p&gt;
&lt;h3  class=&quot;related_post_title&quot;&gt;相关内容&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/web-server/php-project-development-3&quot; title=&quot;听小韩聊PHP项目开发(3)–切分你的系统&quot;&gt;听小韩聊PHP项目开发(3)–切分你的系统&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/web-server/php-project-development-1&quot; title=&quot;听小韩聊PHP项目开发(1)&amp;#8211;开题的话&quot;&gt;听小韩聊PHP项目开发(1)&amp;#8211;开题的话&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/security/configure-fast-in-lamp-on-windows-with-xampp&quot; title=&quot;Windows下AMP平台配置FastCGI方法（以xampp为基础）&quot;&gt;Windows下AMP平台配置FastCGI方法（以xampp为基础）&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/401465459/blackcat/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/blackcat/~7043876/401465459/1224926/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/blackcat/401465459/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/blackcat/401465459/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=18b81f63902c88241b9f9c72f0967539&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=18b81f63902c88241b9f9c72f0967539&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=b3ce247e944b49afbe10ef11cd125aa3&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=b3ce247e944b49afbe10ef11cd125aa3&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=b8a814596b4e09aa98608fa24f5ec386&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=b8a814596b4e09aa98608fa24f5ec386&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.hanguofeng.cn/archives/web-server/php-project-development-2/feed</wfw:commentRss><slash:comments>2</slash:comments><series:name>听小韩聊PHP项目开发</series:name><description>Hello，时隔半年，我终于继续了 =.= 1、为什么要观察你的项目&amp;#8211;需求的重要性。 俗话说，磨刀不误砍柴工，当开始一个项目时，我希望你就像在街上看到了美女，你要先好好打量打量，然后再思考，“啊，我怎么去问她的电话呢~” So,same as our projects. 当开始一个项目时，你应当首先审视的是项目的需求，要注意了，除非是你自己为自己闲着没事做的东西，其他的项目，都是为别人做的，怎么理解呢，我的意思是说，你项目的目的就是满足别人的需求。软件实际上是一种商品。所谓商品，就是商品是为交换而生产（或用于交换）的对他人或社会有用的劳动产品[百度百科]。请注意“对他人或社会有用”，这就是在讲，我们所编写的软件是为了满足需求而存在的，如果不能满足需求，哪怕你用了再高的技术，软件做的再漂亮，运行效率再高，都不能被称之为一款合格的软件。 为什么突然要扯这么远呢，是因为，我曾经和很多人一样，在做开发的时候，开始的时候无时不刻的都在想，这个东西有什么技术创新点，什么地方的效率会很低，应该解决，后来我听到了一句话，叫做“过早优化是万恶之源（premature optimization is the root of all evil&amp;#8211;Donald Knuth）”，可能的确有那样一些项目，他们要求很高的效率，或者，该项目的需求者一直在询问你关于效率的问题，但是无论如何，在你什么都没有的时候，你就什么都不能做，就像你并没有一个女儿，你却时刻想着如何去打扮她一样毫无意义。 请记住，我们所编写的软件，它的第一要务是满足需求，当然，运行效率、界面美化可能是需求的一部分（非功能性需求，我们稍后会谈到），但是请将其作为需求考虑，而不是贯穿软件的全部。 关于需求，这里有一幅漫画，来源未知（提示：你可以点击图片放大）： 另外还有此图片的中文版：http://picasaweb.google.com/lh/photo/ZK59I5p5-jfsc7kl213htQ?feat=directlink 2、我要观察到什么&amp;#8211;什么是需求 “需求是产品必须完成的事以及必须具备的品质。需求存在的原因要么是该类型的产品要求一定的功能和品质，要么是客户希望需求成为交付的产品的一部分。” &amp;#8211;《掌握需求过程》ISBN:9787115159830 从上面的漫画中，可以很有趣的发现，由于沟通方式，对目标的理解差异和技术水平的不同，都会让需求在传递中发生变化，这种变化有时可能是致命的，我们人类在沟通时多采用语言，然而语言，尤其是口头语言，极易发生变化。因此，就需要大家对需求有一个统一的认识，什么是需求，需求应该包括哪些内容，不应该包括哪些内容，应该如何去分析需求。 本节引言中的话，严格来讲不是对需求的定义，让我们来看IEEE软件工程标准词汇表(1997年)中“需求”的定义： (1)用户解决问题或达到目标所需的条件或权能(Capability)。 (2)系统或系统部件要满足合同、标准、规范或其它正式规定文档所需具有的条件或权能。 (3)一种反映上面(1)或(2)所描述的条件或权能的文档说明 软件需求包括三个不同的层次—业务需求、用户需求和功能需求—也包括非功能需求。业务需求( business requirement)反映了组织机构或客户对系统、产品高层次的目标要求，它们在项目视图与范围文档中予以说明。用户需求(user requirement) 文档描述了用户使用产品必须要完成的任务，这在使用实例(use case)文档或方案脚本(scenario)说明中予以说明。功能需求(functional requirement)定义了开发人员必须实现的软件功能，使得用户能完成他们的任务，从而满足了业务需求。所谓特性(feature)是指逻辑上相关 的功能需求的集合，给用户提供处理能力并满足业务需求。 简单来说，需求就是说明你软件将要满足的用户需要，需求是你软件的功能列表，这里的功能可能包括看得见的功能和看不见的功能。同时需要注意实际用户（用户是重要的需求分析参与者，难以想象一个只有开发者而没有用户参与的需求分析，所得出的是什么）可能对需求的理解有误，有时他们甚至不了解活无法向你描述出他的需求，也有时，他会“啰啰嗦嗦”的向你讲一堆不是需求的东西。 同时，需求还包括非功能的部分，例如，“单次搜索查询必须在0.1秒内完成”、“用户传输文件的速度不应低于其网络最高可用带宽的50%”，这些内容并非软件的功能性要求，但是实际上是软件的使用者使用软件体验、感受的重要感受点甚至是其是否能完成功能性需求的制约。 3、我没有马王爷的第三只眼&amp;#8211;那么我如何分析需求呢 哦，这很麻烦，是的，好吧，我们退一步，作为开发人员，你可以让你的产品经理去和客户打交道，但是你必须和你的产品经理打交道，同时，你还必须和你的代码打交道。 与产品经理打交道和与代码打交道是两码事，八杆子打不到一块，你不能和产品经理讲if(xxx)  {} ，也不能去问你的代码，这里是让用户操作的，还是你丫自动操作的。 在与产品人员打交道时，你有责任用他们的语言来描述问题，这并不是单纯为了对方能够听懂你说什么，更重要的是，这会大大减少你们在交流沟通中的误解。所以，熟知你所在的行业，熟悉他们的业务，如果你要开发财务系统，请去阅读财会相关书籍，如果你要开发ERP系统，请去和工人师傅、基层管理人员多聊聊，在拓展你领域的同时，也会让你对你的编程思想有新的看法。 在与代码打交道的时候，你需要是一个好的建筑师，你应当构建严谨、运行健壮、可扩展性强的代码，这要求你在充分理解需求的情况下，看到需求的发展方向以及需求中可能发生变动的情况，甚至你需要和产品经理、客户去沟通，提出你的想法，当你问道“我觉得这里这样做的话，系统可能存在不稳定的因素，如果怎么怎么样做，不仅系统稳定了，您的操作也会更方便”，客户恍然大悟，你又减轻了工作量，何乐不为呢。 在理解需求、分析系统时，我建议你首先这样做： 将系统中存在的活动者都列出来，然后依次列出他们的操作功能和反应。 比如，一个简单的文章系统，我们可能这样去描述它 普通用户：注册、登录、找回密码、修改个人信息、查看类别、查看文章、查看某个类别下的文章、输入关键字搜索文章、发表评论、当别人发表对自己评论的回复时收到邮件。 管理员：查看用户信息、CURD（Create-Update-Read-Delete）类别、CURD文章 在上面的需求描述中，涉及了两个活动者，分别是“普通用户”和“管理员”，同时两个活动者都有若干功能，其中“普通用户”的“当别人发表对自己评论的回复时收到邮件”实际上不是用户的主动操作，而是用户对某个操作的反应，需要注意的是，这样的信息也需要在需求分析中体现。 需求分析可以体现为UML用例图，其好处是更直观，同时由于是统一化的表达，更有助于沟通，其他程序员可以更方便的理解你的意思，而不容易出现理解误差。 关于UML用例图方面的内容，可以到http://hi.baidu.com/jyangstu/blog/item/5d2f89131ef270c6c3fd7833.html查看一份简介。 我的需求方法实际上是用例图的一个超级简版，这个方法不能体现活动者与活动者、用例与用例（就是活动者所做的那些事情）之间的关系，一般适用于小型项目或大中型项目的模块级需求分析，对大中型项目的整体需求分析，实际上是一个非常复杂、有机结合的多个过程的系统，以后有机会我们再探讨。 [...]&lt;img src=&quot;http://www1.feedsky.com/t1/401465459/blackcat/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/blackcat/~7043876/401465459/1224926/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/blackcat/401465459/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/blackcat/401465459/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=18b81f63902c88241b9f9c72f0967539&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=18b81f63902c88241b9f9c72f0967539&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=b3ce247e944b49afbe10ef11cd125aa3&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=b3ce247e944b49afbe10ef11cd125aa3&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=b8a814596b4e09aa98608fa24f5ec386&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=b8a814596b4e09aa98608fa24f5ec386&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</description><category>听小韩聊PHP项目开发</category><category>Web服务器端技术</category><category>PHP</category><pubDate>Sun, 28 Jun 2009 13:42:06 +0800</pubDate><author>hanguofeng</author><comments>http://www.hanguofeng.cn/archives/web-server/php-project-development-2#comments</comments><guid isPermaLink="false">http://www.hanguofeng.cn/?p=125</guid><dc:creator>hanguofeng</dc:creator><fs:srclink>http://www.hanguofeng.cn/archives/web-server/php-project-development-2?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=php-project-development-2</fs:srclink><fs:srcfeed>http://www.hanguofeng.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/blackcat/~7043876/401465459/1224926</fs:itemid></item><item><title>北海公园游记</title><link>http://item.feedsky.com/~feedsky/blackcat/~7043876/401465460/1224926/1/item.html</link><content:encoded>&lt;p&gt;周六晚上决定出去逛一下，毕竟的确有一段时间没有出去玩了，自己的、或者公司、学校的事总是一件接着一件，it&amp;#8217;s OK。&lt;/p&gt;
&lt;p&gt;周日起来，洗了衣服，再慢慢等它们变干的时候，已经是下午两点多了，匆忙查了路线，又步行一段距离，到了北土城坐奥运2，没有想到会在鼓楼附近堵了将近20分钟。到达北海公园的时候，已经是三点多了 -。-逛公园的貌似很少有这个时间的吧。&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-116&quot;&gt;&lt;/span&gt;想去北海公园，主要是因为从小的时候就一直在听“&lt;span&gt;海面倒映着美丽的白塔，四面环绕着绿树红墙&lt;/span&gt;”，可是来北京这么久，还一直没有去亲眼目睹下这美丽的白塔。&lt;/p&gt;
&lt;p&gt;到了公园，买票进了大门，豁然开朗的是一片蓝蓝的。。。湖。很多人站在湖边，举起手机、相机狂派，于是我慢慢从很囧的“修水管”的工具包里面掏出相机，挂在脖子上，然后慢慢靠上河边的围栏，开拍。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://pic.yupoo.com/hanguofeng/3288570df4f0/medium.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;alignnone&quot; src=&quot;http://pic.yupoo.com/hanguofeng/3288570df4f0/medium.jpg&quot; alt=&quot;北海公园-白塔&quot; width=&quot;400&quot; height=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;蓝的逼人眼的湖面上，波光荡漾，倒映着一座白塔，水中的白塔和天上的白塔相映成趣，仿佛一个可以对折的世界。&lt;/p&gt;
&lt;p&gt;然后随着人群，漫步过桥。&lt;/p&gt;
&lt;p&gt;过桥后，俨然是另一番景象，一座亭子中，一些老人在欢乐的歌唱着，他们自己吹拉弹唱，吸引了很多游客，看着一曲结束后，他们脸上会心的笑容，我感受到，这才是平和的和谐社会。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://pic.yupoo.com/hanguofeng/8762570dfd7b/medium.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;alignnone&quot; src=&quot;http://pic.yupoo.com/hanguofeng/8762570dfd7b/medium.jpg&quot; alt=&quot;北海公园&quot; width=&quot;400&quot; height=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;一曲终了，依依不舍的再往前漫步，就到了永安寺，永安寺是一座黄庙。穿过永安寺的后门，便来到了一列台阶前。&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;alignnone&quot; src=&quot;http://pic.yupoo.com/hanguofeng/3620070df2cc/medium.jpg&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;400&quot; /&gt;&lt;/p&gt;
&lt;p&gt;拾阶而上，到了白塔，近看白塔，威仪壮观。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://pic.yupoo.com/hanguofeng/0616770df38c/medium.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;alignnone&quot; src=&quot;http://pic.yupoo.com/hanguofeng/0616770df38c/medium.jpg&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;被白塔震撼后，慢慢下山，便来到了太液池旁，事实上，才看到了真正的北海全貌，夕阳下的白海，显得格外静逸，一抹夕阳洒在水面上，波光粼粼的阳光的碎片让人沉迷。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://pic.yupoo.com/hanguofeng/0189370dff00/medium.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;alignnone&quot; src=&quot;http://pic.yupoo.com/hanguofeng/0189370dff00/medium.jpg&quot; alt=&quot;北海&quot; width=&quot;400&quot; height=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;夕阳的水面上，归巢的水鸟自在游弋，如果看到这一幕，我想你的心境会不自主的平静下来，在这片喧嚣的都市，竟然有如此宁静的一片桃源。&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;alignnone&quot; src=&quot;http://pic.yupoo.com/hanguofeng/4678670dffd3/medium.jpg&quot; alt=&quot;&quot; width=&quot;400&quot; height=&quot;300&quot; /&gt;&lt;/p&gt;
&lt;p&gt;想想最近的生活，很多忙碌，却有很多的进步，然而却总是缺少坐下来静静思考的时间，人，是需要经常思考的，不是吗。我的朋友们，不要为你们现在的忙碌而抱怨，不要为你们现在的迷惘而失落，生活本如此，既然未来是光明的，那么我们为什么还要低头沉浸在自己的影子中呢。&lt;/p&gt;
&lt;h3  class=&quot;related_post_title&quot;&gt;相关内容&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/life/cold-winter-in-beijing&quot; title=&quot;北京的冬天，有点冷&quot;&gt;北京的冬天，有点冷&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/life/wander-about-graduate&quot; title=&quot;慢慢走向毕业&quot;&gt;慢慢走向毕业&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/life/travelling-fayua-temple&quot; title=&quot;北京法源寺游记&quot;&gt;北京法源寺游记&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/blackcat/401465460/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/blackcat/401465460/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=c1a8d8c1680d874bc5f115267df7b907&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=c1a8d8c1680d874bc5f115267df7b907&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=ddd6a406f870b3ccfdde589468d72e9f&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=ddd6a406f870b3ccfdde589468d72e9f&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=1978607865a199fe01328bcc26a17e38&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=1978607865a199fe01328bcc26a17e38&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.hanguofeng.cn/archives/life/beihai-park/feed</wfw:commentRss><slash:comments>3</slash:comments><description>周六晚上决定出去逛一下，毕竟的确有一段时间没有出去玩了，自己的、或者公司、学校的事总是一件接着一件，it&amp;#8217;s OK。 周日起来，洗了衣服，再慢慢等它们变干的时候，已经是下午两点多了，匆忙查了路线，又步行一段距离，到了北土城坐奥运2，没有想到会在鼓楼附近堵了将近20分钟。到达北海公园的时候，已经是三点多了 -。-逛公园的貌似很少有这个时间的吧。 想去北海公园，主要是因为从小的时候就一直在听“海面倒映着美丽的白塔，四面环绕着绿树红墙”，可是来北京这么久，还一直没有去亲眼目睹下这美丽的白塔。 到了公园，买票进了大门，豁然开朗的是一片蓝蓝的。。。湖。很多人站在湖边，举起手机、相机狂派，于是我慢慢从很囧的“修水管”的工具包里面掏出相机，挂在脖子上，然后慢慢靠上河边的围栏，开拍。 蓝的逼人眼的湖面上，波光荡漾，倒映着一座白塔，水中的白塔和天上的白塔相映成趣，仿佛一个可以对折的世界。 然后随着人群，漫步过桥。 过桥后，俨然是另一番景象，一座亭子中，一些老人在欢乐的歌唱着，他们自己吹拉弹唱，吸引了很多游客，看着一曲结束后，他们脸上会心的笑容，我感受到，这才是平和的和谐社会。 一曲终了，依依不舍的再往前漫步，就到了永安寺，永安寺是一座黄庙。穿过永安寺的后门，便来到了一列台阶前。 拾阶而上，到了白塔，近看白塔，威仪壮观。 被白塔震撼后，慢慢下山，便来到了太液池旁，事实上，才看到了真正的北海全貌，夕阳下的白海，显得格外静逸，一抹夕阳洒在水面上，波光粼粼的阳光的碎片让人沉迷。 夕阳的水面上，归巢的水鸟自在游弋，如果看到这一幕，我想你的心境会不自主的平静下来，在这片喧嚣的都市，竟然有如此宁静的一片桃源。 想想最近的生活，很多忙碌，却有很多的进步，然而却总是缺少坐下来静静思考的时间，人，是需要经常思考的，不是吗。我的朋友们，不要为你们现在的忙碌而抱怨，不要为你们现在的迷惘而失落，生活本如此，既然未来是光明的，那么我们为什么还要低头沉浸在自己的影子中呢。 相关内容北京的冬天，有点冷慢慢走向毕业北京法源寺游记&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/blackcat/401465460/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/blackcat/401465460/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=c1a8d8c1680d874bc5f115267df7b907&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=c1a8d8c1680d874bc5f115267df7b907&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=ddd6a406f870b3ccfdde589468d72e9f&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=ddd6a406f870b3ccfdde589468d72e9f&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=1978607865a199fe01328bcc26a17e38&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=1978607865a199fe01328bcc26a17e38&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</description><category>生活感悟</category><category>北京</category><category>北海公园</category><pubDate>Tue, 03 Mar 2009 01:48:25 +0800</pubDate><author>hanguofeng</author><comments>http://www.hanguofeng.cn/archives/life/beihai-park#comments</comments><guid isPermaLink="false">http://www.hanguofeng.cn/?p=116</guid><dc:creator>hanguofeng</dc:creator><fs:srclink>http://www.hanguofeng.cn/archives/life/beihai-park?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=beihai-park</fs:srclink><fs:srcfeed>http://www.hanguofeng.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/blackcat/~7043876/401465460/1224926</fs:itemid></item><item><title>反思之我（们）需要什么样的IT书</title><link>http://item.feedsky.com/~feedsky/blackcat/~7043876/401465461/1224926/1/item.html</link><content:encoded>&lt;p&gt;&lt;strong&gt;他们没有关注的需求&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;发现现在除了JSP和.Net之外，例如php、ruby之类的，还有js，甚至css、html，都没有人讲过在企业化开发的时候，这些东西应该遵循什么样的模式，达到高可用性和对需求变动的敏捷性 。&lt;/p&gt;
&lt;p&gt;PHP、ruby、JS可能还好一些，但是CSS和HTML这些的可重用性，和对需求变动的敏捷性，讲的太少啊了，单纯说可用性、语义性，都是针对单个来讲的，而没有谈到比如说淘宝、搜狐这样的大型网站，他的CSS和页面如何重用，这应该是一个不小的话题。&lt;/p&gt;
&lt;p&gt;按照柱子哥的思路做东西，就发现我以前从来没有这么做过事情，也没有网上的教程或者书籍告诉过我，基本上都是在讲，一个人的时候怎么开发，也没有过多考虑需求变动导致的影响。&lt;br /&gt;
我相信随着当前互联网形式的进一步推动，人们会逐渐重视这些方面，同时这样一些东西可以把原来二把刀的程序员，培养成可以胜任企业开发的人员，给大型网站或者大型公司做开发，也解决了很多实际的问题 &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;如何让读者理解&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;单纯告诉你去如何做，和没有告诉是一样的，因为每个人都希望固守自己之前的方式，除非你明确指出了它的缺点，并让他实际感受到他固有方式的不便和新方法给他带来的实惠。这恐怕真的得用例子来带来共鸣。&lt;/p&gt;
&lt;h3  class=&quot;related_post_title&quot;&gt;随机内容&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/life/travelling-fayua-temple&quot; title=&quot;北京法源寺游记&quot;&gt;北京法源寺游记&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/life/begining-at-september&quot; title=&quot;始于九月&quot;&gt;始于九月&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.hanguofeng.cn/archives/web-server/php-serialize-json&quot; title=&quot;PHP串行化与JSON&quot;&gt;PHP串行化与JSON&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/blackcat/401465461/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/blackcat/401465461/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=3bbb3eb2dd6fa24b52761b72844f1d45&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=3bbb3eb2dd6fa24b52761b72844f1d45&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=7033026b2db6d6014af8f297262ac031&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=7033026b2db6d6014af8f297262ac031&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=37ea4f9b85b961c644d411cf66098cb5&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=37ea4f9b85b961c644d411cf66098cb5&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.hanguofeng.cn/archives/life/it-books-i-need/feed</wfw:commentRss><slash:comments>3</slash:comments><description>他们没有关注的需求 发现现在除了JSP和.Net之外，例如php、ruby之类的，还有js，甚至css、html，都没有人讲过在企业化开发的时候，这些东西应该遵循什么样的模式，达到高可用性和对需求变动的敏捷性 。 PHP、ruby、JS可能还好一些，但是CSS和HTML这些的可重用性，和对需求变动的敏捷性，讲的太少啊了，单纯说可用性、语义性，都是针对单个来讲的，而没有谈到比如说淘宝、搜狐这样的大型网站，他的CSS和页面如何重用，这应该是一个不小的话题。 按照柱子哥的思路做东西，就发现我以前从来没有这么做过事情，也没有网上的教程或者书籍告诉过我，基本上都是在讲，一个人的时候怎么开发，也没有过多考虑需求变动导致的影响。 我相信随着当前互联网形式的进一步推动，人们会逐渐重视这些方面，同时这样一些东西可以把原来二把刀的程序员，培养成可以胜任企业开发的人员，给大型网站或者大型公司做开发，也解决了很多实际的问题 如何让读者理解 单纯告诉你去如何做，和没有告诉是一样的，因为每个人都希望固守自己之前的方式，除非你明确指出了它的缺点，并让他实际感受到他固有方式的不便和新方法给他带来的实惠。这恐怕真的得用例子来带来共鸣。 随机内容Singleton.Lover北海公园游记立秋++++&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/blackcat/401465461/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/blackcat/401465461/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;fsflare&quot;&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=3bbb3eb2dd6fa24b52761b72844f1d45&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=3bbb3eb2dd6fa24b52761b72844f1d45&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=7033026b2db6d6014af8f297262ac031&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=7033026b2db6d6014af8f297262ac031&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/blackcat?a=37ea4f9b85b961c644d411cf66098cb5&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/blackcat?i=37ea4f9b85b961c644d411cf66098cb5&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</description><category>生活感悟</category><category>书</category><pubDate>Sun, 22 Feb 2009 23:02:09 +0800</pubDate><author>hanguofeng</author><comments>http://www.hanguofeng.cn/archives/life/it-books-i-need#comments</comments><guid isPermaLink="false">http://www.hanguofeng.cn/?p=113</guid><dc:creator>hanguofeng</dc:creator><fs:srclink>http://www.hanguofeng.cn/archives/life/it-books-i-need?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=it-books-i-need</fs:srclink><fs:srcfeed>http://www.hanguofeng.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/blackcat/~7043876/401465461/1224926</fs:itemid></item></channel></rss>