<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>庆亮的博客-webgame架构 &#187; 工作总结</title>
	<atom:link href="http://www.qingliangcn.com/tag/%e5%b7%a5%e4%bd%9c%e6%80%bb%e7%bb%93/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.qingliangcn.com</link>
	<description>关注LAMP&#124;PHP源代码分析&#124;web架构&#124;PHP扩展&#124;Erlang&#124;服务端架构</description>
	<lastBuildDate>Fri, 10 Jun 2011 04:10:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>第一次工作月总结</title>
		<link>http://www.qingliangcn.com/2009/05/%e7%ac%ac%e4%b8%80%e6%ac%a1%e5%b7%a5%e4%bd%9c%e6%9c%88%e6%80%bb%e7%bb%93/</link>
		<comments>http://www.qingliangcn.com/2009/05/%e7%ac%ac%e4%b8%80%e6%ac%a1%e5%b7%a5%e4%bd%9c%e6%9c%88%e6%80%bb%e7%bb%93/#comments</comments>
		<pubDate>Sat, 23 May 2009 10:03:38 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[暂未分类]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[工作总结]]></category>

		<guid isPermaLink="false">http://www.nd21.com/?p=84</guid>
		<description><![CDATA[工作已经两个月, 有一些汗水, 有一些收获, 有一些欢乐, 有一些郁闷. 前方的路依然光明, 我要继续走下去. 整理一下两个月的收获和问题，说的不全，完全以这段时间的实践为主线。 一 面向对象 VS 面向过程 1.我们的选择 项目开始时，技术经理那边决定使用面向过程作为我们的主要开发方式，当时主要的考虑点是效率和项目人员对OO和面向过程的熟悉程度。 我们的项目是一个交易平台，预计并发、高负载、快速响应会是项目最重要的问题，再结合PHP本身的特点，我们觉得面向过程应该是我们的更好选择。 另外，项目中，除了我本人接触的OO较多外，其他人对于OO的理解还仅仅位于&#8220;对象&#8221;上， 对OOA/OOD/Design Pattern等基本无概念，而由于我们的时间和现有资源的问题，我们也不可能进行这方面的入职培训。 所以最终我们决定使用面向过程。 2.如何选择 很多人大谈OO或者面向过程的好处，互相攻击对方的方法缺陷。就讨论本身而言，辩论有利于更好的交流以及对知识更深层次的理解。但也容易带来一些偏见，这些往往是由于个人的阅历经验、对新事物的心态以及是否辩证看待事物有关。每个人的工作环境、项目要求等等都不尽相同，而OO和面向过程都不是万能的解决方案，他们有各自的优缺点，有各自的适应环境（所以不能一概而论， 不能断定哪种方式绝对的好），同时也有重叠的部分（既然有重叠，那么在某些情况下使用OO和面向过程皆可，具体使用哪一种，主要取决于个人的偏好）。 因而我们讨论两种方法，重点在于分析他们各自的利弊、适应环境，而不是打败对方。我们的目的在于赢得真理， 而不是赢得讨论。无论枪有多好，刀也不会淘汰；同时枪也的确比刀强大很多&#8212;某些情况下。 以下我的一些粗浅的个人理解，用于快速的判断实际应该如何选择。限于经验和个人水平，如有不妥甚至错误的地方，欢迎指出来。 * 面向对象有利于直接将现实中的&#8220;对象&#8221;移植过来，而面向过程则有利于直接应用我们生活中最常见的&#8220;过程式&#8221;思想。但是希望大家明白，现实世界并非完全&#8220;对象&#8221;，也并非完全的&#8220;过程&#8221;。当你的项目比较简单，业务逻辑也比较简单的情况下，面向过程可能是更加快速的选择，因为在这种情况下，你不必考虑太多的类设计，简单的&#8220;一步步来&#8221;即可。如果你的业务逻辑相当的复杂，在很多地方可能会大量的重用某些逻辑处理，你们的团队相当的庞大，你们需要紧密的合作等等，此时OO的优势将会非常明显。 * 项目要求和项目环境。如果你的PHP版本过低（如PHP4甚至PHP3），由于语言本身对面向对象的支持不够好，某些本来是面向对象的优点也会变成缺点，同时很多面向对象的特性也不能应用，这个时候再坚持OO就不是个好的选择了。 或者更干脆你用的是想C语言这样的完全不支持OO的编程语言，那么什么也别想了 &#8212;&#8211;&#160;&#160;你想煮饭，首先得要有米才行。 * 应用某方式的成本。就像我们的团队一样，并非每个人都能理解OO，即使理解，理解程度也不尽相同，这可能会为大家的合作、项目的维护等带来不便。所以很多公司都有入职培训，不管你水平如何，大家一起培训，争取将大家调整到一个相近的水平线上。这需要时间、资金以及人力的投入，有时候最优的技术选择并不见得是最好的选择。 这里只能简单的列出几点判断要点，详细说的话，几本书也说不完，欢迎大家继续和我交流论坛。 PHP面向过程项目的一些细节 模板 对于一个稍有规模的网站（如何判断是没有标准的），页面显示和业务逻辑分离是一个非常重要的问题，可以说它在一定程度上决定了我们的项目的工作效率。对于很多程序员来说，编写程序的同时还要处理HTML，css，js等是一个嫉妒可怕的噩梦。可悲的是，目前为止并没有一种很好的解决方案能使得PHP程序员完全摆脱这种局面；可喜的是，我们已经有比较折中的方案：模板。 模板可以说是无数PHP程序员甚至是美工的救世主，它很方便的分离了页面显示和业务逻辑 &#8212;- 当然它不可能完全分离的开来，不过总归是比之前好太多了。比较有名如Smarty，PHPLib Template等等，前者属于编译型，后者则属解释型，各有优点，有兴趣可以搜索下。 &#160;&#160;在我们的项目中，网站有公共的头部和尾部，准确的来说，有两个公共的头部和一个尾部，如果头部和尾部都唯一的话相对来说就简单一些了。 还是考虑到我们的网站对性能上的要求，我们决定不采用任何模板技术，或者说我们决定采用内嵌PHP代码方式的模板。大家先来看下面的代码： &#160; Smarty方式： &#60;{foreach&#160;name=results&#160;from=$results&#160;item=result}&#62; &#60;b&#62;&#60;{$result.name}&#62;&#60;/b&#62; &#60;b&#62;&#60;{$result.id}&#62;&#60;/b&#62; &#60;{/foreach}&#62; 使用HereDoc： &#60;!&#8211; EOT; foreach($results&#160;as&#160;$value){print&#60;&#60;&#60;EOT &#8211;&#62; &#60;b&#62;{$value['name']}&#60;/b&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>工作已经两个月, 有一些汗水, 有一些收获, 有一些欢乐, 有一些郁闷. 前方的路依然光明, 我要继续走下去.</p>
<p>整理一下两个月的收获和问题，说的不全，完全以这段时间的实践为主线。</p>
<p><strong>一 面向对象 VS 面向过程</strong><br />
<strong>1.我们的选择</strong><br />
项目开始时，技术经理那边决定使用面向过程作为我们的主要开发方式，当时主要的考虑点是效率和项目人员对OO和面向过程的熟悉程度。<br />
我们的项目是一个交易平台，预计并发、高负载、快速响应会是项目最重要的问题，再结合PHP本身的特点，我们觉得面向过程应该是我们的更好选择。<br />
另外，项目中，除了我本人接触的OO较多外，其他人对于OO的理解还仅仅位于&ldquo;对象&rdquo;上， 对OOA/OOD/Design Pattern等基本无概念，而由于我们的时间和现有资源的问题，我们也不可能进行这方面的入职培训。 所以最终我们决定使用面向过程。</p>
<p><strong>2.如何选择<br />
</strong>很多人大谈OO或者面向过程的好处，互相攻击对方的方法缺陷。就讨论本身而言，辩论有利于更好的交流以及对知识更深层次的理解。但也容易带来一些偏见，这些往往是由于个人的阅历经验、对新事物的心态以及是否辩证看待事物有关。每个人的工作环境、项目要求等等都不尽相同，而OO和面向过程都不是万能的解决方案，他们有各自的优缺点，有各自的适应环境（所以不能一概而论， 不能断定哪种方式绝对的好），同时也有重叠的部分（既然有重叠，那么在某些情况下使用OO和面向过程皆可，具体使用哪一种，主要取决于个人的偏好）。<br />
因而我们讨论两种方法，重点在于分析他们各自的利弊、适应环境，而不是打败对方。我们的目的在于赢得真理， 而不是赢得讨论。无论枪有多好，刀也不会淘汰；同时枪也的确比刀强大很多&#8212;某些情况下。<span id="more-84"></span><br />
以下我的一些粗浅的个人理解，用于快速的判断实际应该如何选择。限于经验和个人水平，如有不妥甚至错误的地方，欢迎指出来。<br />
* 面向对象有利于直接将现实中的&ldquo;对象&rdquo;移植过来，而面向过程则有利于直接应用我们生活中最常见的&ldquo;过程式&rdquo;思想。但是希望大家明白，现实世界并非完全&ldquo;对象&rdquo;，也并非完全的&ldquo;过程&rdquo;。当你的项目比较简单，业务逻辑也比较简单的情况下，面向过程可能是更加快速的选择，因为在这种情况下，你不必考虑太多的类设计，简单的&ldquo;一步步来&rdquo;即可。如果你的业务逻辑相当的复杂，在很多地方可能会大量的重用某些逻辑处理，你们的团队相当的庞大，你们需要紧密的合作等等，此时OO的优势将会非常明显。<br />
* 项目要求和项目环境。如果你的PHP版本过低（如PHP4甚至PHP3），由于语言本身对面向对象的支持不够好，某些本来是面向对象的优点也会变成缺点，同时很多面向对象的特性也不能应用，这个时候再坚持OO就不是个好的选择了。 或者更干脆你用的是想C语言这样的完全不支持OO的编程语言，那么什么也别想了 &#8212;&#8211;&nbsp;&nbsp;你想煮饭，首先得要有米才行。<br />
* 应用某方式的成本。就像我们的团队一样，并非每个人都能理解OO，即使理解，理解程度也不尽相同，这可能会为大家的合作、项目的维护等带来不便。所以很多公司都有入职培训，不管你水平如何，大家一起培训，争取将大家调整到一个相近的水平线上。这需要时间、资金以及人力的投入，有时候最优的技术选择并不见得是最好的选择。<br />
这里只能简单的列出几点判断要点，详细说的话，几本书也说不完，欢迎大家继续和我交流论坛。</p>
<p><strong>PHP面向过程项目的一些细节<br />
</strong>模板<br />
对于一个稍有规模的网站（如何判断是没有标准的），页面显示和业务逻辑分离是一个非常重要的问题，可以说它在一定程度上决定了我们的项目的工作效率。对于很多程序员来说，编写程序的同时还要处理HTML，css，js等是一个嫉妒可怕的噩梦。可悲的是，目前为止并没有一种很好的解决方案能使得PHP程序员完全摆脱这种局面；可喜的是，我们已经有比较折中的方案：模板。<br />
模板可以说是无数PHP程序员甚至是美工的救世主，它很方便的分离了页面显示和业务逻辑 &#8212;- 当然它不可能完全分离的开来，不过总归是比之前好太多了。比较有名如Smarty，PHPLib Template等等，前者属于编译型，后者则属解释型，各有优点，有兴趣可以搜索下。</p>
<p>&nbsp;&nbsp;在我们的项目中，网站有公共的头部和尾部，准确的来说，有两个公共的头部和一个尾部，如果头部和尾部都唯一的话相对来说就简单一些了。<br />
还是考虑到我们的网站对性能上的要求，我们决定不采用任何模板技术，或者说我们决定采用内嵌PHP代码方式的模板。大家先来看下面的代码：<br />
&nbsp;</p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'">Smarty<font face="宋体">方式：</font></span><span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&lt;{foreach&nbsp;name=results&nbsp;from=$results&nbsp;item=result}&gt;</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">&lt;</span><span style="font-family: 'Courier New'; color: rgb(163,21,21); font-size: 10pt; mso-spacerun: 'yes'">b</span><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">&gt;</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&lt;{$result.name}&gt;</span><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">&lt;/</span><span style="font-family: 'Courier New'; color: rgb(163,21,21); font-size: 10pt; mso-spacerun: 'yes'">b</span><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">&gt;</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">&lt;</span><span style="font-family: 'Courier New'; color: rgb(163,21,21); font-size: 10pt; mso-spacerun: 'yes'">b</span><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">&gt;</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&lt;{$result.id}&gt;</span><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">&lt;/</span><span style="font-family: 'Courier New'; color: rgb(163,21,21); font-size: 10pt; mso-spacerun: 'yes'">b</span><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">&gt;</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&lt;{/foreach}&gt;</span><span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'">使用<font face="Times New Roman">HereDoc</font><font face="宋体">：</font></span><span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; background: rgb(255,255,255); color: rgb(0,128,0); font-size: 10pt; mso-spacerun: 'yes'">&lt;!&#8211;</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; background: rgb(255,255,255); color: rgb(0,128,0); font-size: 10pt; mso-spacerun: 'yes'">EOT;</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; background: rgb(255,255,255); color: rgb(0,128,0); font-size: 10pt; mso-spacerun: 'yes'">foreach($results&nbsp;as&nbsp;$value){print&lt;&lt;&lt;EOT</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; background: rgb(255,255,255); color: rgb(0,128,0); font-size: 10pt; mso-spacerun: 'yes'">&#8211;&gt;</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; background: rgb(255,255,255); color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">&lt;</span><span style="font-family: 'Courier New'; background: rgb(255,255,255); color: rgb(163,21,21); font-size: 10pt; mso-spacerun: 'yes'">b</span><span style="font-family: 'Courier New'; background: rgb(255,255,255); color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">&gt;</span><span style="font-family: 'Courier New'; background: rgb(255,255,255); color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">{$value['name']}</span><span style="font-family: 'Courier New'; background: rgb(255,255,255); color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">&lt;/</span><span style="font-family: 'Courier New'; background: rgb(255,255,255); color: rgb(163,21,21); font-size: 10pt; mso-spacerun: 'yes'">b</span><span style="font-family: 'Courier New'; background: rgb(255,255,255); color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">&gt;</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; background: rgb(255,255,255); color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">&lt;</span><span style="font-family: 'Courier New'; background: rgb(255,255,255); color: rgb(163,21,21); font-size: 10pt; mso-spacerun: 'yes'">b</span><span style="font-family: 'Courier New'; background: rgb(255,255,255); color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">&gt;</span><span style="font-family: 'Courier New'; background: rgb(255,255,255); color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">{$value['id']}</span><span style="font-family: 'Courier New'; background: rgb(255,255,255); color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">&lt;/</span><span style="font-family: 'Courier New'; background: rgb(255,255,255); color: rgb(163,21,21); font-size: 10pt; mso-spacerun: 'yes'">b</span><span style="font-family: 'Courier New'; background: rgb(255,255,255); color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">&gt;</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; background: rgb(255,255,255); color: rgb(0,128,0); font-size: 10pt; mso-spacerun: 'yes'">&lt;!&#8211;</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; background: rgb(255,255,255); color: rgb(0,128,0); font-size: 10pt; mso-spacerun: 'yes'">EOT;</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; background: rgb(255,255,255); color: rgb(0,128,0); font-size: 10pt; mso-spacerun: 'yes'">}</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; background: rgb(255,255,255); color: rgb(0,128,0); font-size: 10pt; mso-spacerun: 'yes'">&#8211;&gt;</span><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'">嵌入<font face="Times New Roman">html</font><font face="宋体">代码：</font></span><span style="font-family: '宋体'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(255,0,0); font-size: 10pt; mso-spacerun: 'yes'">&lt;?php</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">foreach</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">(</span><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10pt; mso-spacerun: 'yes'">$results&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">as&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10pt; mso-spacerun: 'yes'">$value</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">){</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(255,0,0); font-size: 10pt; mso-spacerun: 'yes'">?&gt;</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,128,128); font-size: 10pt; mso-spacerun: 'yes'">&lt;</span><span style="font-family: 'Courier New'; color: rgb(63,127,127); font-size: 10pt; mso-spacerun: 'yes'">b</span><span style="font-family: 'Courier New'; color: rgb(0,128,128); font-size: 10pt; mso-spacerun: 'yes'">&gt;</span><span style="font-family: 'Courier New'; color: rgb(255,0,0); font-size: 10pt; mso-spacerun: 'yes'">&lt;?php</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">echo&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10pt; mso-spacerun: 'yes'">$value</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">[</span><span style="font-family: 'Courier New'; color: rgb(0,130,0); font-size: 10pt; mso-spacerun: 'yes'">'name'</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">];</span><span style="font-family: 'Courier New'; color: rgb(255,0,0); font-size: 10pt; mso-spacerun: 'yes'">?&gt;</span><span style="font-family: 'Courier New'; color: rgb(0,128,128); font-size: 10pt; mso-spacerun: 'yes'">&lt;/</span><span style="font-family: 'Courier New'; color: rgb(63,127,127); font-size: 10pt; mso-spacerun: 'yes'">b</span><span style="font-family: 'Courier New'; color: rgb(0,128,128); font-size: 10pt; mso-spacerun: 'yes'">&gt;</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,128,128); font-size: 10pt; mso-spacerun: 'yes'">&lt;</span><span style="font-family: 'Courier New'; color: rgb(63,127,127); font-size: 10pt; mso-spacerun: 'yes'">b</span><span style="font-family: 'Courier New'; color: rgb(0,128,128); font-size: 10pt; mso-spacerun: 'yes'">&gt;</span><span style="font-family: 'Courier New'; color: rgb(255,0,0); font-size: 10pt; mso-spacerun: 'yes'">&lt;?php</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(0,0,255); font-size: 10pt; mso-spacerun: 'yes'">echo&nbsp;</span><span style="font-family: 'Courier New'; color: rgb(102,0,0); font-size: 10pt; mso-spacerun: 'yes'">$value</span><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">[id];</span><span style="font-family: 'Courier New'; color: rgb(255,0,0); font-size: 10pt; mso-spacerun: 'yes'">?&gt;</span><span style="font-family: 'Courier New'; color: rgb(0,128,128); font-size: 10pt; mso-spacerun: 'yes'">&lt;/</span><span style="font-family: 'Courier New'; color: rgb(63,127,127); font-size: 10pt; mso-spacerun: 'yes'">b</span><span style="font-family: 'Courier New'; color: rgb(0,128,128); font-size: 10pt; mso-spacerun: 'yes'">&gt;</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(255,0,0); font-size: 10pt; mso-spacerun: 'yes'">&lt;?php</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(0,0,0); font-size: 10pt; mso-spacerun: 'yes'">}</span><span style="font-family: 'Courier New'; font-size: 10pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Courier New'; color: rgb(255,0,0); font-size: 10pt; mso-spacerun: 'yes'">?&gt;</span></p>
<p><!--EndFragment--></p>
<p>
上面的代码很简单，从一个表中取出用户列表，然后循环显示。代码一和代码二的功能实际上时一样的，不同的是代码1采用了模板（smarty语法），代码2采用了PHP原生语法（heredoc）。我们可以看到我们用原生的语法完成了模板所对应的功能，并且代码也同样的简单。可能有人说，smarty可以编译，可以缓存，有很多辅助函数，这些你通过简单的代码能够实现吗？ <br />
对于上面的问题，我的看法如下：<br />
* 我认为smarty这种编译型模板提供的诸多额外函数做了过多的事情。在MVC模式下，这些函数所做的事情已经超出了V层的职责，会导致更换V层时，重复的编写一些代码，例如将V层从HTML换成WAP或者XML。当然这一点并不能使得我们做出放弃smarty的决定，因为项目不见得采用MVC模式开发，同时你也可以避免使用Smarty的某些函数。<br />
* 几乎所有模板都使用自己的一套语法，学习代价高。smarty3已经使用PHP的原生语法了。<br />
* 很多项目实时性要求相当高（我们的项目就是如此），采用编译型模板会导致数据不能及时显示，而且因为更新快，它的编译功能将变成鸡肋。而解释型模板由于不缓存结果（如果你给解释型模板提供缓存功能的话，那另当别论），每次请求都重新解释，效率不高、资源消耗相对较多。<br />
*根据前面三点，我们发现PHP本身就能够完成我们要求的功能。</p>
<p>我的看法带有片面性，因为我主要是就着我当前的项目来讨论的。</p>
<p>对于模块下公共文件的重复利用的问题，我们使用ob系列的函数来替换即可，PHP中字符串替换的效率是相当高的（尽量不要用正则）。</p>
<p><strong>纯粹的面向过程吗？<br />
</strong>我们的项目属于大中型的项目，实际编码中发现有大量的重复代码，我们的业务逻辑相当的复杂（特别是在线支付模块），这个时候我们简单了考虑了一下便决定适当的使用一些对象（当然，这还称不上OO）。我们不是纯粹的面向对象狂热者，同样也不是面向过程狂热者，只有最合适的，没有最好的。</p>
<p><strong>项目成功&ne;技术先进</strong><br />
其实这不属于面向过程的专属内容，它应该是超越开发方法的。不管你采用哪种方法开始，项目的完成才是最重要的，技术不能代表和决定一切，现实和理想总是有所相隔。代码可以重构，而项目可能没有机会进行第二次。大家要把握平衡点。<br />
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2009/05/%e7%ac%ac%e4%b8%80%e6%ac%a1%e5%b7%a5%e4%bd%9c%e6%9c%88%e6%80%bb%e7%bb%93/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>


