[转]drupal优点的发现
来源地址:http://www.shatangoj.cn/node/106
drupal优点的发现
开端
近段时间,我要开发一个内容管理站点(http://www.shatangoj.cn/)来推销家乡的特产。
选型
初期的站点原型程序选型,出于对LAMP架构的钟情,我选出了joomla和drupal这两个基于LAMP架构的开源CMS作为可选的原型来开发我的站点。
一开始,由于发现joomla站点上有3000多个扩展(extensions)可供选择,为了节省开发成本,我决定采用joomla来构建我的站点。
于是在业余时间的短短的一周之内,拼凑了好几个扩展之后,竟然把站点初步建起来了。
出现问题
但是问题来了,由于joomla的这些扩展是---相互独立、没有一致的模型和接口----堆积起来的,一旦发现有些地方不能满足我的需求需要修改模块的时候,改起来非常繁琐,工作量很大,开发和维护成本陡然增长,经过痛苦的煎熬,我毅然决定放弃joomla!
二次选型
于是剩下一个选择,drupal了。
吸取前面不清楚joomla架构原理就开始使用它构建网站而造成失败的教训,为免再蹈覆辙,我先是去网上搜寻了一番关于drupal开发的资料,找到了两篇好的文章:
一篇是developerworks的《使用开源软件设计、开发和部署协作型Web 站点》(http://www.ibm.com/developerworks/cn/web/osource/index.html) ;
另一篇是CSDN的g089h515r806翻译的《Drupal专业开发指南》一书(http://blog.csdn.net/g089h515r806/category/339068.aspx)。
读完这两篇文章,我理解了drupal架构实现的原理,再加上参考其他网友对drupal的评价,我认定drupal的二次开发效率会较高,于是决定采用drupal作为原型进行二次开发来构建自己的站点。
二次开发
接着是用drupal来搭建、开发自己的站点了。由于理解了drupal的架构、原理和优点(对drupal优点的认识在开发过程中不断加深和扩展),我以最大化利用drupal优点的原则来搭建和开发站点。整个过程非常愉快,drupal及其开发给我带来了一种技艺的美感和创造的满足!:)
drupal优点总结
总结一下我所认识的drupal的优点。
1. 模块化系统(Module system)。
Drupal把各个具有独立功能的部分抽象为模块,各个模块(除核心模块)只要按照事先巧妙设计好的统一规范来实现接口(http: //api.drupal.org/)------这些接口在drupal中表现为按照特定规则命名的PHP代码文件、特定PHP代码文件内按照特定规则命名的PHP函数、特定PHP函数内根据特定参数来执行相应功能的PHP代码块-------就能在核心代码的调度下实现模块自有的功能、在模块之间自动进行交互、通信,这样使得整个系统的功能扩展更灵活更规范。各个模块之间的功能相对独立,单个模块内部的变动一般不会对其他模块原有功能造成影响,单个模块的问题一般不会导致整个系统不可用,这样就可以大大降低系统开发和维护的成本。
Drupal 模块化的安装使用也很方便,只要将相应文件复制到modules目录下,就可以在'管理-设置'里面方便地开启使用了。
2. 钩子机制(Hooks system)
钩子机制其实是drupal模块化系统的关键部分。Drupal模块化系统基于一个"钩子"的概念,一个钩子是一个以foo_bar() 方式命名的php函数。其中foo是模块的名字,bar是钩子的名字。每个钩子都定义了一系列的参数和返回类型,执行特定的功能。例如钩子 myblog_load($node)会在系统载入模块myblog对应的节点(node)信息时候执行,把模块对应的节点特定信息附加到节点中去。钩子可以使得模块(module)可以在drupal核心的调度之下进行交互,包括和核心本身进行交互。Drupal的模块机制大大简化的实现模块具体功能的开发、维护效率,因为你只需要实现特定的钩子函数就能获得对应的功能,而根本不用关心这些函数是如何被调用、如何与系统交互。
3. 内容类型面向节点
这个术语是借用编程语言中面向对象的概念。在编程语言中,面向对象编程是指在编写应用程序时候,以对象为基本单位,在基本对象(object)的基础上,通过封装、继承、抽象、多态、重载等方式,建立起整个复杂的应用程序架构。面向对象编程通过把客观世界抽象为对象的组合及其相互交互,有效地降低了程序开发的抽象性和复杂度。
drupal把所有的内容类型都看作节点,各种内容类型都是在基本节点的基础上进行扩展而实现的。例如你的drupal站点有一个叫做供应(supply)的内容类型,那么这个内容类型就自动有了基本内容类型(node)的属性和方法了,然后你可以在这个基础之上通过添加少量额外的属性和方法来实现supply了。这跟面向对象的概念不谋而合,因此我把它称为drupal的内容类型面向节点特性。
把所有的内容类型当作节点的好处是,这样它们就可以基于相同的底层数据结构了。对于开发者来说,这意味着你可以对所有的内容以同样的代码方式进行许多操作。可以在节点上非常容易的进行一组操作,并且你也可以为你自己的节点类型添加许多额外的功能。由于所有的内容都是节点,所以所有的内容都可以轻易的使用 drupal内置的支持对内容的搜索、创建、编辑和管理等操作。这种内容一致性对于客户端用户的体验来说也同样明显。由于创建、编辑和删除节点的表单拥有一个类似的外观,这样就保持了用户体验的一致性。
不过所有内容类型均基于node,我认为也有缺点,就是drupal核心在执行node相应钩子函数的时候,会尝试执行所有节点类型对应的钩子函数,这样一旦内容类型增多,系统性能就会直线下降。
4. 表单API(Form API)
Drupal提供了一个应用程序接口(API)来生成、验证、处理HTML表单。表单的生成、验证、处理函数都是按照约定的命名规则进行命名,例如内容类型myblog的表单生成函数默认为myblog_form(&$node,&$param),对应的表单验证函数为 myblog_form_validate($form_id, $form_values),而表单处理函数为myblog_form_submit($form_id, $form_values)。drupal核心会在恰当的时候根据命名规则去执行相应的函数去生成、验证、处理表单。
另外,表单API将表单抽象为一个关于属性和值的嵌套数组。在生成页面时,表单呈现引擎会在适当的时候将数组呈现出来。
表单API的作用不但可以大大简化站点开发中最常见的表单生成、验证、处理的工作,更加大大提高了对表单变更的适应能力。
5. 主题机制(Theme system)
Drupal支持为站点配置不同的主题。一个主题是由一组展示你站点外观的文件------主要是模板文件------组成。模板文件按照约定的命名规则来进行命名。例如node.tpl.php文件为默认的节点内容显示模板文件,而node-supply.tpl.php为节点内容supply的内容显示模板文件;又如page.tpl.php为默认的页面内容显示模板文件,而page-supply.tpl.php为模块supply的页面内容显示模板文件。你甚至可以在template.php中自定义自己模板文件来实现特定的内容显示模板(参考 http://api.drupal.org/api/group/themeable)。
模板机制的好处是你可以把站点数据处理和数据显示完全分离,这样就可以把开发人员的精力从繁琐的内容显示格式的工作中解脱出来,专注于实现站点的业务逻辑功能。其次,模板机制也使得我们可以轻易的改善站点的外观而不需要调整现有程序。
6. 菜单机制(Menu system)
Drupal通过菜单钩子hook_menu来实现它的菜单机制。只要在模块中的hook_menu钩子函数中按照约定的规则来定义菜单,drupal核心就会在站点界面中实现相应的菜单(具体请参见http://api.drupal.org/api/group/menu/)。通过菜单机制,开发者可以轻易的设计和调整站点的菜单系统,大大解放了开发者的劳动。
7. Ajax支持
Drupal内置对jQuery和JSON的支持,jQuery和JSON的完美结合,使得Drupal有了一个轻量级、高效的AJAX实现,大大提高了编写AJAX应用的效率。
- admin's blog
- Login to post comments
