Home >Backend Development >PHP Tutorial >用封装类来合理的设计PHP项目--谈PHP项目中类的封装_PHP

用封装类来合理的设计PHP项目--谈PHP项目中类的封装_PHP

WBOY
WBOYOriginal
2016-06-01 12:34:14936browse

 编码对于合格的PHP程序员来说并不是什么难事(也许只是花费时间长短的问题),因此系统分析和设计这一阶段就显得尤为重要。不过本文并不打算讨论和需求分析、获取商业逻辑相关的话题,而是针对系统设计方面进行探讨。

编码对于合格的PHP程序员来说并不是什么难事(也许只是花费时间长短的问题),因此系统分析和设计这一阶段就显得尤为重要。对于一个担任PHP项目的系统分析员来说,面临着两个难题:

  1. PHP语言本身的限制。
    这一点在复杂系统的面向对象设计中尤其显著。PHP的面向对象特性在现有版本中虽然得到了改善,但是还不甚健全,根本不足以担任面向对象设计的实现语言;即使眼光长远一些,在即将释出的以Zend Engine 2.0支持的全新PHP中,面向对象特性也不会像现在流行的Java或者C++那样(关于这方面的内容可以参见我在developerWorks中国网站发表的另一篇文章)。但是如果采用完全面向过程(准确说是面向Web页面)的方式,可以想见整个系统的设计会非常复杂,而由此带来的编码复杂和维护困难更加难以应付。
  2. 现有资料的严重缺乏。
    这是众所周知的现象即针对Web项目的系统设计资料不足;而在这些有限资料中,关于PHP的设计资料又非常匮乏。如果本公司或本人也没有相关的技术积累,系统分析员只能在黑暗中摸索方法(更坏的两种情况,一是照搬其他项目比如Java或者C++的设计,二是认为项目简单而不负责任的草草了事)。


既然如此,采用何种方法妥善处理PHP系统的分析和设计?最初的构想应该需要分清项目承担任务的类型:

  1. 涉及大量客户本身或者客户所在行业的商业逻辑的项目,包括办公系统、订单系统以及其他商业系统。
  2. 简单网站项目,包括一些需要承担高访问量或要求快速响应的项目比如品牌网站或者活动网站以及其他一些网站。
  3. 综合性网站项目。通常包含多个相对独立的子系统比如新闻子系统、论坛子系统、产品陈列子系统等等。


PHP的设计初衷在于解决后两种项目的迫切需求,语言本身对于这些项目进行了良好的改造。而众多的PHP开发者对这些项目也具有或多或少的经验,相关书籍中的范例也大都围绕于此。相对说来第一种系统所有的资料不多,各种出版物对其内容也很少提及。因此在本文中将题所述对第一种类型的项目进行详细讲述(有关MVC模式和类封装),同时附带提及第二种项目(有关黑客代码)以及第三种项目的设计方法。当然,并不是被归类的这些项目就只能采用本文描述的方式,系统分析员需要权衡各方面因素加以选择。

如何分离用户界面和后台操作?如何避免将商业逻辑混淆于一般的流程控制中?作为一个严谨的商用项目,就需要考虑很多类似的问题。对于由PHP担当的这类项目,贯彻Model-View-Controller(MVC)模式的设计是一个非常好的方法。

理论描述
在这里我不想多加解释MVC模式本身--简单的从字面上以及应用上说,通过将系统的设计分为Model模型/逻辑、View视图/界面、Controller控制/流程三个逻辑部分达到良好的项目效果,以此便利各部分开发者的工作并降低日后的维护成本。(如果您熟悉JSP开发的Model 2模式,可以发现它也是MVC模式的很好体现。)就现实的项目开发而言,现存的很大问题包括网页设计人员和程序开发人员的工作交错和冲突以及商业逻辑嵌入页面造成不可重用也很难维护等等。引入MVC模式一方面可以为系统的总体设计指出明确的方向,对于开发团队的分工也是良好的指导。

既然依照MVC模式要求对系统的总体结构在逻辑上分成三部分,那么团队的开发者中也存在着针对各个部分的开发者。

开发者角色 相关系统逻辑 职责
网页设计人员 View视图/界面 设计所有用户界面的网页模板。
控制流程开发人员 Controller控制/流程 编写系统流程中的所有PHP页面。
商业逻辑开发人员 Model模型/逻辑 开发系统设计中规定的各个类(其中的方法)。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn