四/090
drupal设计原则
一点关于drupal设计的小见解,欢迎高手拍砖。
drupal的数据类型除了用户和评论,剩下的大都是节点的形式存在。我们要想自己开发一个新的模块,和DB有交互,首先要考虑好数据格式。我觉得drupal相关的开发两个东西很重要,一个是节点(node),一个是分类(taxonomy)。组织自己数据的时候要围绕这两点展开,以节点的形式保存,以taxonomy的方式分类。这样写出的代码才很“drupal”,因为drupal有很多第三方模块可以使用,如果我们的数据不是基于节点展开的,那么很多模块都使用不了。如果脱离了节点,相当于我们只使用了drupal的DB层,用它来安全的进行db操作,这个就有违于drupal的可扩展设计了。因为drupal对节点的操作和管理已经很细致了,我们只要格式化好数据,一切都不用管了,方便省事,并且有一大堆第三方(或者drupal集成)模块可以使用。
这么说好像有点抽象,我举个例子。比如我们要做一个特殊的内容类型,比如说笔记本。(这里抛开CCK模块不说,我们手写内容类型),传统上,怕麻烦的人(喜欢从头构建自己程序的人),可能想着创建两个表,一个内容,一个分类表,将这两个create table语句写到install文件中,剩下的就是读取和操作了,似乎没有什么问题。但是这些东西drupal早已经给我们做好了,可以使用node_info钩子自己创建内容类型,自己定制表单,剩下什么都不用做。而且和节点搜索,节点类型限制等等相关模块接合的很好,只要我们把关于节点查询的sql语句用db_rewrite_sql包起来就好了。
写到这里,你可能会说,这个很简单啊,因为你可能自己手动或者用cck创建了很多内容类型了,已经很熟悉了。但我们应该想得更远一步,更多的数据可以抽象成节点,更多的关于分类我们可以使用taxonomy做出来,我相信国内写drupal代码的人很多代码经不起drupal化的考验,对drupal的钩子机制理解没有那么深入。
总之,多看几个系统内置的模块,让你的模块无缝的放进drupal中去,和别的部件正常工作,并且能相互通信,而不要孤零零的插入一些干燥的代码。