Friday, January 28, 2011
Jinge的vpn让我在家里也能上BYR BT
注:铁通的线路果然比电信和网通的的质量差啊。
Tuesday, January 25, 2011
Drupal的使用phpmailer进行邮件发送
drupal的系统结构总结
Drupal的系统架构总结
在一开始接到这个课题的时候很迷茫,因为drupal。。。。从来没有听说过(现在看来是见识短啊。。。。。),以前曾经做过Discuz,Wordpress的一些定制,觉得他们都是很强大了,一个专门用于做论坛,一个则是博客中的精品。对于用户来说应该是两把利剑。怎么又蹦出来个Drupal?它是用来干什么的?下面我总结了一下。什么是Drupal?
Drupal是用来构建网站的(我都觉得说的是废话)。(注意!)它是一个高度模块化,开源的web内容管理框架,并且非常注重合作,互动的重要性。主要有可扩展性强,符合标准,追求简洁代码,内核精练。Drupal自带了一些基本的核心功能,其它的额外功能可通过安装核心可选模块或者第3方模块来实现。我们可以基于Drupal进行定制,但是定制是通过覆写核心模块或者增加模块来完成的,而不是修改核心组件中的代码。(这一点非常的重要,通过外部的模块和核心模块分离开来,使得自己开发模块不会影响到主体,同时实现各种的功能,不需要把所有的逻辑都斟酌N遍,只需要写好模块,开启,就ok~~是一种非常优秀的机制)它还将内容管理和内容表示这二者进行了成功的分离。
Drupal可被用来构建一个互联网门户;个人的,部门的,或者公司的网站;一个电子商务站点;一个资源分类站点;一个在线报纸;一个图库;一个内部网,Drupal的应用非常广泛,这里仅仅提到了其中的一部分。如果想做论坛,它可以;如果想做博客,它依然可以。它甚至可用于远程教育。
有一个专门的安全小组,他们通过对回应危害和发布安全更新来保证Drupal的安全。另外还有一个非营利性的组织,Drupal协会,它通过改进drupal.org网站的基础设施,组织Drupal聚会和各种活动,来推动Drupal的发展。Drupal的社区也非常活跃,里面包括各种用户,站点管理员,设计者,和web开发者,并不断地改进着Drupal系统;可参看http://drupal.org和http://groups.drupal.org。
附一些drupal的中文学习网站:http://zhupou.cn/ http://drupalchina.org
以上是一些我对Drupal的一些基本概念, 其实我们在构建一个系统的时候, 一般都需要从两个方面来考虑问题:
业务模型(暂时不大明白)
也就是领域模型, 是面向我们所要解决的问题域所构建的模型, 前面我们说的关于内容描述方面的几个概念, 其实就是对领域内概念,元素进行概括,抽象得出的业务模型基类. 构建良好的业务模型, 能有效地将问题域中的对象进行分类,综合, 理清他们间的关联, 阐明他们相互间的协作, 并为最终形成系统的对象数据模型打下基础. 我们所说的面向对象(OO), 其实主要就是一个建模的思想.
系统架构(重点在此)
它是从系统的实现角度出发的, 涉及的概念更多, 它主要是用来解决系统如何构建, 以实现业务的需求, 它还涉及系统的健壮性, 性能, 可扩展性, 可操作性, 可获得性等一些其他质量属性. 比如经典的MVC架构, WEB的二层, 三层, 四层架构, 这些都是架构实现的一种形式.
Drupal的架构. 其实我目前还是粗略看了Drupal代码(虽然很多看不懂),不过自己总结加上网上的资料,就有了如下的心得了。
什么是Drupal的架构?
简单的说, Drupal是一个基于B/S架构(就是浏览器/服务器)的内容管理系统(CMS), 它用PHP语言实现, 并以关系数据库为存储机制. 与其说它是一个CMS, 不如说它是一个CMS框架更好. 单纯做博客(Blog), 它不如WordPress简单快速; 直接当CMS, 它不如Joomla美观方便, 甚至不如某些国产, 但其实经过扩展, Drupal能够做得与它们一样好, 甚至更好, 这就取决于Drupal架构设计。PHP本身是支持面向对象(OO)的, 但Drupal却为了兼容老版本并没有使用, 而是通过一系列的约定俗成的编码约定(Convention)来达到类似的效果.
有一种非常经典的架构模型就是MVC, Drupal就是这样的一种三层结构: 表现层(View), 控制层(Controller)和模块层(Module).
模块层主要是处理数据的持久化, 它工作在后台,是表现层在具体数据库中的实现;
控制层则基于领域模型进行数据的业务逻辑处理, 即哪一个前台模型对应着哪一个后台数据的处理模块,它是整个结构的核心;
表现层则侧重于领域数据的呈现和工作流在用户端的控制表现, 它主要基于以用户为中心来设计(UCD).
逻辑层, 包括两部分:Drupal的核心库和模块组(Modules).
核心库主要包含Druapl的请求流程(Bootstrap)和一系列常用的公共支撑库, 比如数据库抽象接口, 多语言支持, 邮件处理, 图像优化等. 当然还有最关键的钩子(hook)框架, 钩子是贯穿Drupal核心的一个重要特性, 它使得Drupal能高效灵活地协调模块们的工作. 这里把它叫做核心库确实不妥当, 以为它不仅仅是一个库, 更是一个公共框架.
模块就是Drupal的功能组件, 它处理具体的业务逻辑, 模块如何划分, 取决于你的业务划分, 你的工作流, 你的设计思想.Drupal安装包里包涵了10多个模块, 但它最核心的只有5个模块: Block, Filter, Node, System, User. 如果说核心库是刘备的话, 那这五个就是他的五虎上将了. 看看他们的功能吧, System使得系统具备了系统管理的能力, User使得系统具备了安全管理的能力, Node+Block+Filter使得系统具备了基本内容管理的能力.
其实说实话,Drupal就是一个系统的完整原型, 想要什么就实现个什么模块, 什么自己要是做不了, 就去 社区里有的是人在做, 拿来主义就行嘛。
表现层, 这个说实在话,也许算不上是非常的漂亮或者绚丽,毕竟Drupal的开发之初也不是为了漂亮。
当然,我绝不是说它不能变得很美观,对一个CMS系统来说, 可定制的外观是必须提供的能力的. 因此, Drupal提供了相当强大的内容表现扩展机制--主题(Theme)系统, 它包含主题引擎和主题两个子层,下载的主题就放在./site/all/theme里面就可以了。
模块层, 支持关系型数据库, 模块一般通过核心的数据库API访问, 你想直接访问数据库也支持, 但最好还是通过API, 这样便于迁移和扩展.
前面我提到了, Drupal的逻辑层由一个核心框架和一系列的功能模块(Module,可以看成插件)构成, 框架与模块间的协调就是通过钩子机制来实现(我正在研究这个是怎么样的一种机制), 所以钩子机制是Drupal模块化系统的关键。什么是钩子机制, 它与面向对象的接口(Interface)类似, 就是为规范定义了两个实体间的功能界面, 使得实现了该界面的实体能进行交互. 在Drupal里, 钩子就是Drupal框架与模块间进行交互的接口, 但由于Drupal没有面向对象的机制, 所以它采用编程规约来讨巧地实现.
在Drupal里, 钩子就是一系列需要实现特定功能的函数, 它们约定好了输入参数和返回类型, 同时约定以xxx_yyy() 的形式来命名, 其中xxx是要实现功能的模块名称,而yyy则是具体的钩子名称 . 举个例子, 你就更清楚了. 例如我有个模块叫myexamplemodule, 现在我想在footer中添加一些Javascript代码, 于是我在我的模块代码中实现一个叫myexamplemodule_footer()的函数, 在此函数中我实现了我想要功能; 于是用户请求页面时, Drupal的框架会检测到我的模块有myexamplemodule_footer()函数, 并且它会自动调用它, 是不是很简单明了呢! Drupal核心框架的这种调度机制, 屏蔽了用户自定义模块与框架间的实际交互, 简化了的开发, 因为你只要实现一个函数即可, 别的事情系统已经替你完成了. 更多的hook请查看Drupal的文档库.
以上是我的个人总结,对于Drupal的架构现在是了解比较多了,不过这些事基于整个Drupal系统的架构,还有一些比如菜单,模块,主题的一些应用架构我也正在关注总结中,上述的部分资料来源于网上,有些地方不大易懂,请大家积极指出,不对的地方我及时更正。毕竟现在还是菜鸟级别的。。。。呵呵~~