从头学习Drupal--基本架构一
来源:互联网 发布:mac能玩什么大型游戏 编辑:程序博客网 时间:2024/05/20 06:52
前面学习了Drupal的一些基本概念, 其实我们在构建一个系统的时候, 一般都需要从两个方面来考虑问题:
- 业务模型
也就是领域模型, 是面向我们所要解决的问题域所构建的模型, 前面我们说的关于内容描述方面的几个概念, 其实就是对领域内概念,元素进行概括,抽象得出的业务模型基类. 构建良好的业务模型, 能有效地将问题域中的对象进行分类,综合, 理清他们间的关联, 阐明他们相互间的协作, 并为最终形成系统的对象数据模型打下基础. 我们所说的面向对象(OO), 其实主要就是一个建模的思想.
- 系统架构
它是从系统的实现角度出发的, 涉及的概念更多, 它主要是用来解决系统如何构建, 以实现业务的需求, 它还涉及系统的健壮性, 性能, 可扩展性, 可操作性, 可获得性等一些其他质量属性. 比如经典的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, 这样便于迁移和扩展.
- 从头学习Drupal--基本架构一
- 从头学习Drupal--基本架构二
- 从头学习Drupal--基本架构三
- 从头学习Drupal--基本架构四
- 从头学习Drupal--基本架构五
- 从头学习Drupal--基本概念和架构
- 从头学习Drupal--基本概念
- 从头学习Drupal--基本概念
- Drupal学习笔记(一)
- Drupal 系列一:如何快速学习 Drupal
- Drupal 模块开发基本教程(一)
- Drupal 內的基本CSS (一)
- HBase概念学习(一)基本架构
- drupal 学习笔记一 安装docker or drupal
- 从头学习JAVA(一)
- Drupal学习笔记一:Druple安装
- Drupal 模块开发基本教程(一)
- Android游戏开发学习(一):游戏的基本架构
- 全新整理:微软、谷歌、百度等公司经典面试100题[第101-160题]
- 执着
- 沃尔玛加入封杀国产彩电
- 一个研究生的公式
- 毕设啊
- 从头学习Drupal--基本架构一
- Android通讯录查询篇--ContactsContract.Data 二(续)
- Javascript Object与Function使用
- Eclipse快捷键(转)
- 用过的excel命令。记录一下
- 从头学习Drupal--基本架构二
- vi 中文显示乱码-问题解决
- ubuntu10.10修改mysql的root用户密码
- MySQL Replication(复制)基本原理