从头学习Drupal--基本架构一

来源:互联网 发布:mac能玩什么大型游戏 编辑:程序博客网 时间:2024/05/20 06:52

前面学习了Drupal的一些基本概念, 其实我们在构建一个系统的时候, 一般都需要从两个方面来考虑问题:

  1. 业务模型

    也就是领域模型, 是面向我们所要解决的问题域所构建的模型, 前面我们说的关于内容描述方面的几个概念, 其实就是对领域内概念,元素进行概括,抽象得出的业务模型基类. 构建良好的业务模型, 能有效地将问题域中的对象进行分类,综合, 理清他们间的关联, 阐明他们相互间的协作, 并为最终形成系统的对象数据模型打下基础. 我们所说的面向对象(OO), 其实主要就是一个建模的思想.

  2. 系统架构

    它是从系统的实现角度出发的, 涉及的概念更多, 它主要是用来解决系统如何构建, 以实现业务的需求, 它还涉及系统的健壮性, 性能, 可扩展性, 可操作性, 可获得性等一些其他质量属性. 比如经典的MVC架构, WEB的二层, 三层, 四层架构, 这些都是架构实现的一种形式.

这两方面相辅相成, 任何一方面设计不好都将极大的影响系统的质量(Quality). 很多人在系统设计时出于某种主观或客观原因要么从单方面考虑, 要么是把两者混淆起来考虑, 这都不是好的系统设计方法, 都有很大的局限性.

说了这么些没人感兴趣的东西, 还是回到我们的主题, Drupal的架构. 其实我目前还是粗略看了Drupal, 主要是爬爬洋文, 大概看了一下bootstrap的代码; 所以下面的描述主要关注Drupal的主体框架, 对其内部不进行深入描述(能力问题, 象国足看齐); 而且因为我本身的多语言支持(Internationalization)实现的并不太好, 这里记录下来的就是仅我自己的理解, 供你们参考和指正.

什么是Drupal的架构?
简单的说, Drupal是一个基于B/S架构的内容管理系统(CMS), 它用PHP语言实现, 并以关系数据库为存储机制. 与其说它是一个CMS, 不如说它是一个CMS框架更好. 单纯做博客(Blog), 它不如WordPress简单快速; 直接当CMS, 它不如Joomla美观方便, 甚至不如某些国产, 但其实经过扩展, Drupal能够做得与它们一样好, 甚至更好, 这就取决于Drupal幽雅的架构设计. 这里我为啥用幽雅不用优雅呢? 其实就在于Drupal的具体实现, PHP本身是支持面向对象(OO)的, 但Drupal却为了兼容老版本并没有使用, 而是通过一系列的约定俗成的编码约定(Convention)来达到类似的效果. (期待Drupal 7的到来...)
好了, 下面是一个我简单画的Drupal的系统架构图.


我们看到, Drupal主要是一个三层结构: 表现层, 逻辑层数据持久层. 顾名思义, 数据持久层主要是处理数据的持久化, 它是领域模型在具体数据库中的实现; 而逻辑层则基于领域模型进行数据的业务逻辑处理, 它是整个结构的核心; 表现层则侧重于领域数据的呈现和工作流在用户侧的控制表现, 它主要基于以用户为中心来设计(UCD).
逻辑层, 包括两部分:Drupal的核心库和模块组(Modules).
核心库主要包含Druapl的请求流程(Bootstrap)和一系列常用的公共支撑库, 比如数据库抽象接口, 多语言支持, 邮件处理, 图像优化等. 当然还有最关键的钩子(hook)框架, 钩子是贯穿Drupal核心的一个重要特性, 它使得Drupal能高效灵活地协调模块们的工作. 这里把它叫做核心库确实不妥当, 以为它不仅仅是一个库, 更是一个公共框架.
模块就是Drupal的功能组件, 它处理具体的业务逻辑, 模块如何划分, 取决于你的业务划分, 你的工作流, 你的设计思想.Drupal安装包里包涵了10多个模块, 但它最核心的只有5个模块: Block, Filter, Node, System, User. 如果说核心库是刘备的话, 那这五个就是他的五虎上将了. 看看他们的功能吧, System使得系统具备了系统管理的能力, User使得系统具备了安全管理的能力, Node+Block+Filter使得系统具备了基本内容管理的能力.
天哪, Drupal难吗, 真的不难, 这就是一个系统的完整原型, 这架构就是多少人心目中的完美架构啊! 从这里出发, 你就能实现任何你想要的了, 想要什么就实现个什么模块, 什么自己做不了, 怕什么, 社区里有的是人在做, 拿来主义就行啊.
表现层, 有多少人是冲着Drupa的l外观来的, 应该不多吧, 你要真冲这个来, 还真得劝你去选个别的CMS, 没必要和自己骄矜.
但是,对一个CMS系统来说, 可定制的外观是必须提供的能力的. 因此, Drupal提供了相当强大的内容表现扩展机制--主题(Theme)系统, 真的是很黄很暴力, 它包含主题引擎和主题两个子层, 允许开发者全方位控制内容的表现. 系统对最终用户的输出, 你可以从主题层输出, 也可以从主题引擎层输出, 还可以直接从逻辑层里的模块层输出; 什么, 你不想实现表现层? OK, 完成一个机机接口的纯后台系统也是你的选择. 不过太灵活并不一定是好事, 特别在一个具体的项目开发过程中, 记住, 制定必要的开发规约是保证项目质量和进度的有效手段.
还是回到正题, 虽然Drupal的整个主题机制强大复杂, 但在机制的最顶层--主题, 却并不复杂. 它简单到由一系列的模板文件, CSS文件, JS文件和图片即可定义出美仑美奂的外观.

持久层, 支持关系型数据库, 模块一般通过核心的数据库API访问, 你想直接访问数据库也支持, 但最好还是通过API, 这样便于迁移和扩展.