PHP China | 中国开源之路 's Archiver

wbsifan 发表于 2008-11-17 13:58

浅析成功的系统为何都是面像过程的

很遗憾,标题可能需要改一下.
"知名的,公认的好用的系统 为何[color=red]大[/color]都是面像过程的?"

很多朋友都看过DZ的代码,看完了基本上都会说一句话:
DZ的代码乱得不行.

是的,刚看的时候,我也是这样认为.
不是追求面向对象吗? 不是要方面布署,要结构化,要分离MV,要方便维护吗?
为什么到处都是if else, 为什么随处可见的SQL?
做为PHP界的老大,DZ难道不应该引领PHP向更加新的方向前进吗?

当我们仍然天天追求一此所谓新的东西的时候,当我们永远从技术角度去讨论我们的项目的时候,
当我们强调一定要用某某模式去构建我们的系统的时候.
我们是否应该抽时间想一想,我们的用户他们最关心的是什么?

用户不会在意你是基于什么构建的, 不会管你是面向过程还是对象, 不会管你代码是否乱得无法阅读,
不会管你是否采用了标准化最先进的结构,不会管你文件是否整齐美观.
他只会在意一点:  系统好用,用起来方便,想要的功能都有,尽可能少的出问题.

DZ,PW很多成功的系统.虽然如你所说"代码乱得不行",但是,就在你如此这般评价们的时候,
你的站里说不定还跑着基于他们的BBS..

我也是一个新进技术的追崇者,在MYPIC的项目里,
我无时无刻不在想让自己的系统结构有多么的MVC化,
让代码多么的优雅.
事实上,有确MP得到许多做PHP的朋友认同和好的评价,
但是,MP的用户呢?  
对于他们来说,他们会不在乎这些东西?

经常有用户在群里面提一些小的问题,而且不止一次的提, 说实话,有的时候我都不想再回答这样的问题.
因为实在是太简单,太菜了!
然而用户才是我们项目的最终体验者, 他在乎的就是细节,就是这些细小的功能是否轻松的实现.
如果这些小的功能都实现不了,这些小的问题都得不到解决,
我想不会还有人选择MP.
相反只要功能满足需求,用户常得好用够用,
才不管MP是什么狗屁构架,也不会管MP是面向过程还是面向对象.

这个标题只是向征意义上的.
并不是说面像过程就一定成功,必须面向过程才会成功.
肯定不是这个意思.
当我们在用技术的眼光的角度审视我们的项目的时候,
我们是否应该抽点时间用用户的眼光再来看看我们的项目.

[[i] 本帖最后由 wbsifan 于 2008-11-17 14:08 编辑 [/i]]

银子 发表于 2008-11-17 14:00

做为PHP界的老大 应该改为 做为中国PHP界的老大?

P.S.DZ的代码没看过..不知道有多乱.:lol:

追梦ren 发表于 2008-11-17 14:28

对于用户来说不会看你写的代码多好,,代码是面向对象还是面向过程
面向对象的系统简单地说是面向程序员的!

七月十五 发表于 2008-11-17 14:49

DZ的代码的确是不够严谨
由于历史的原因很多成功的项目都是基于PHP3和PHP4的
也有考虑到兼容性的问题
所以很多项目依旧停留在面向过程和PHP4甚至于PHP3阶段
[color=blue]但是过去并不能代表未来,现在也不能代表未来[/color]
随着PHP5及后续的版本OOP越来越得到重视和应用
在项目管理设计开发上OOP有着更大的优越性
更多更好的OOP优秀项目将会雨后春笋般成长起来
而现有的非OOP的优秀项目也会逐渐面临OOP及PHP5时代的升级
不久的将来将可以看到OOP优秀项目的大量涌现
我们拭目以待

fzm010 发表于 2008-11-17 15:07

优秀的代码和优秀的产品之间没有直接的关系   

优秀的产品的不是因为他代码好

isno 发表于 2008-11-17 15:25

呵呵  和我想的差不多,程序好坏是老板和用户来定义的

某个人 发表于 2008-11-17 15:38

[quote]原帖由 [i]七月十五[/i] 于 2008-11-17 14:49 发表 [url=http://bbs.phpchina.com/redirect.php?goto=findpost&pid=726466&ptid=91405][img]http://bbs.phpchina.com/images/common/back.gif[/img][/url]
DZ的代码的确是不够严谨
由于历史的原因很多成功的项目都是基于PHP3和PHP4的
也有考虑到兼容性的问题
所以很多项目依旧停留在面向过程和PHP4甚至于PHP3阶段
但是过去并不能代表未来,现在也不能代表未来
随着PH ... [/quote]
十五的话才是重点。时间!
为什么php的OOP化一直是个问题。因为没有这个重要的契机。现在大部分语言,java. .net。等等都有自己的类库。而php自身只有函数库。当然现在php5已经包含进了非常多的类。反射API你用过吗?XML处理类库你用过吗?Per类库你用过吗?虽然这些我也没用过。但在我作为OOP的坚决拥护者,我肯定要学习和使用。
OOP化最大的瓶颈我觉得应该是在php没有自己的类库。程序员需要长时期的积累自己的类库。但事实上,国内的phper尤其是早期的。都是从php3 php4过来的。手上最多的是函数包。而不是类包。所以导致他们宁愿用函数也不愿意用类。因为麻烦啊。谁不会给自己减少负担?
当然,已经有不少的程序员已经认识到这一点,慢慢的转变函数为类包。所以十五说的未来基于OOP的项目会更多。
OOP是趋势。不管现在效率还是什么原因。将来的硬件等客观因素的减少。公司追求利益最大化的需求增大。项目用OOP开发也会更多。况且现在谁不希望一个程序能不停的出新功能。平心而论,面向过程的项目和面向对象的项目从版本更新,bug修复,功能更新等角度来讲完全不是一个档次的。

就与DZ的代码而言。我觉得我还是有一点点的发言权的。他的代码相对于其他的面对过程的代码其实并不乱。相反,调理非常清晰。只是要仔细看=。=因为大量镶嵌的逻辑=。=
他现在也在用类处理一些相对容易的问题。而且在我看来。可能是php4发布的时候才加上去的。因为每个类都判断了版本问题。
这也是为什么DZ不能完全使用面向对象的原因。他已经发展了这么多年。架构重写?噢!那需要多大的成本?你试过将面向过程的重新写成面向对象的么?结构,逻辑,层次。全部需要重新写。这个人工成本可不能小看。DZ的老大心里自然清楚的很。

况且有个问题。是这些所谓的知名项目所必须解决的。就是广泛性。wp也好。dz也罢,他们是建立在一个通用性的平台。你无法预知你的用户在使用哪个版本的php或者sql。况且每个站点的访问量如果做得好可能百万级的访问。这个面向过程是有优势的。

所以我觉得php的面向对象最大的应用应该在商业项目中使用。因为商业项目在我的理解里,需要强壮,稳定,bug容易修复,更新速度快,扩展容易,易维护的特点。相对而言效率就是次要的了。

fhjr999 发表于 2008-11-18 11:46

并不完全是因为这个,OOP的性能比较差,而对于DZ这样的系统来说,性能确实至关重要的。

想想看,需要建立论坛的人,在论坛本身即可满足需求,不需进行二次开发的情况下,他会不会选择一个更小的投资就能获得更大的收获的系统。

OOP的便于维护便于扩展是以牺牲性能为前提的,这也是那些流行的系统并不会选择它的原因,而且我也认为,几年之内,甚至更长时间,OOP也并不会取代面向过程,对于性能敏感的系统会一直存在,除非硬件真的到了跟大白菜一样,几毛钱一斤的程度。

拿C和汇编来说,目前的应用范围非常广,为什么还没有灭亡??明明是应该已经过气了的东西,C不支持面向对象,汇编更是麻烦,据说一个简单的打印函数就要120多航代码,为什么还没有灭亡??就是因为有些应用对性能实在过于敏感。

我相信,你不会喜欢用JAVA开发的操作系统,C的可以接受,汇编的很好,机器码的才是完美。

isno 发表于 2008-11-18 13:06

[quote]原帖由 [i]fhjr999[/i] 于 2008-11-18 11:46 发表 [url=http://www.phpchina.com/bbs/redirect.php?goto=findpost&pid=728739&ptid=91405][img]http://www.phpchina.com/bbs/images/common/back.gif[/img][/url]
并不完全是因为这个,OOP的性能比较差,而对于DZ这样的系统来说,性能确实至关重要的。

想想看,需要建立论坛的人,在论坛本身即可满足需求,不需进行二次开发的情况下,他会不会选择一个更小的投资就能获得更大的 ... [/quote]

以前回过某一个帖子,意思和你有点相近
  别人对我说:你为什么不用汇编写网页呢

七月十五 发表于 2008-11-18 13:15

不敢认同fhjr999的观点

按存在即合理的说法,C和ASM的存在,因为它们有合理的用途,对于硬件底层接口编程开发来说,低级语言ASM更加适合一些,而“中级语言”C擅长于OS层面的系统软件的开发。这些都是很多高级语言所不具备的。有时候不光光是从性能上去考虑的。

如果有比ASM更接近硬件,比C跟能胜任系统软件开发的语言,ASM和C依然会面临淘汰的威胁。假如真的出现,谁敢说这个新的强大的可以自如操控硬件接口的底层语言会不会以OOP的设计语法呢?

PHP面向过程语言的成熟程序很多,很大程度跟PHP的发展历史有关系。随着PHP越来越向企业化大型应用发展,OOP的应用在PHP程序上将会越来越多,越来越得到重视。

Ben 发表于 2008-11-18 13:24

代码的优劣和产品的优劣之间没有任何关系,你不能用A的优去反衬B的劣。

七月十五 发表于 2008-11-18 13:28

赞同

代码的优劣跟不是不OOP没有太直接的关系
当然跟是不是面向过程也没有太直接的关系
跟项目规划、实现逻辑、代码效率、用户体验等关系密切一些

面向过程可以写很优秀的程序
面向对象很可能建筑一个豆腐渣工程

fhjr999 发表于 2008-11-18 14:32

[quote]原帖由 [i]isno[/i] 于 2008-11-18 13:06 发表 [url=http://www.phpchina.com/bbs/redirect.php?goto=findpost&pid=729210&ptid=91405][img]http://www.phpchina.com/bbs/images/common/back.gif[/img][/url]


以前回过某一个帖子,意思和你有点相近
  别人对我说:你为什么不用汇编写网页呢 [/quote]

我并没有说OOP不好,只是说,出于性能考虑,有些对性能比较敏感的应用,也许会选择面向对象。

fhjr999 发表于 2008-11-18 14:36

OOP更适合企业级应用,这一点我是赞成的,企业级应用,对性能的要求不敏感,相反,对扩展,维护的要求更高。

值得关注的是,未来将会有更多的企业级应用向WEB转型。

我也在一直学习OOP,实际项目中,我也同样会用到面向过程,两者各有各的优势。

随着硬件性能的提高以及价格的降低,OOP的性能缺陷会越来越不受关注,就好像JAVA的发展例程一样,OOP是趋势,但要想短期内彻底击败面向过程还不太可能。

[[i] 本帖最后由 fhjr999 于 2008-11-18 14:38 编辑 [/i]]

shebao 发表于 2008-11-18 14:37

用oop 我还是不如用java,和python

fhjr999 发表于 2008-11-18 14:40

回LS,等PHP6出来也就差不多了,良好的面向对象支持,再加上快速灵活的特点,反正我是想不出我还有什么另选JAVA的理由。

七月十五 发表于 2008-11-18 14:54

OOP的性能不一定就低于面向过程
你可以测试一下
实现逻辑的好坏才真正对性能产生巨大的影响

在极小数量级的性能和大型项目规划严谨方便的交手之中
OOP胜算很高

据说ZendFramewok在性能方面有很大的诟病
但如果要为大型项目选用一个框架,一般首先是ZendFramework

[[i] 本帖最后由 七月十五 于 2008-11-18 14:56 编辑 [/i]]

fhjr999 发表于 2008-11-18 15:37

性能的差异并不小的,代码本身的执行上效率差异很小,但是OOP中会出现大量的代码冗余,当然面向过程也会有,但是跟OOP比起来就显得有些小巫见大巫了。

举个例子,你将用户表的所有操作都封装到了一个类中,在某个页面中,你需要执行其中的一个操作,就必须首先将这整个类完全加载进来,这样就造成了代码的冗余,加载了为数不少的代码,而只用到了其中的一小部分。

某个人 发表于 2008-11-18 16:26

啊。。在我实际调试面向对象的程序中的时候大概的了解了为什么会有效率问题。
他先把所有访问到的页面的reqire文件读进来。如果项目大。。这确实需要一大比的开支。
但java编译性语言不同。他可以直接编译好了的。。直接访问编译后文件。php是每此访问都要解释每一个函数和类。这个可能就是两者OOP效率的本质速度区别。

飘渺晴霜 发表于 2008-11-18 17:19

面向过程调用的文件也不见得比OOP的少,他不用调用?不用解释?

页: [1] 2 3

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.