建议倡导模块开发的标准 [技术论坛 - 模块综合讨论区] imag1

正在浏览:   1 名游客




(1) 2 3 4 »


建议倡导模块开发的标准
Support Team
注册日期:
2005/2/24 15:17
所属群组:
注册会员
技术文档组
帖子: 430 | 精华: 25
等级: 19; EXP: 26
HP: 0 / 456
MP: 143 / 4123
离线
浏览一些常用的模块,发现每个模块都是各有特色,
代码风格与结构不同,这必然使得阅读和修改模块代码都困难
希望DJ等老大可以搞出一套比较通用的标准做为以后新模块开发
的标准。

这些标准包括:
代码风格
结构风格
文档风格
注释风格
.....

规范一下开发行为比如:
表单生成倡导使用xoopsForm类
自开发类要继承核心类
尽量使用自带类或者扩展自带类


一些个人想法,不过大家意见如何?

2006/6/8 17:37
_________________
nightcat 小站
不同时刻的访问,有不同的惊喜 小站已经改版,欢迎有事没事来踩踩,内容丰富不少,希望你有喜欢的,

Xoops 模块演示站 (筹备中....)
模块演示站

Xoops 开发...
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: 建议倡导模块开发的标准
网站管理员
注册日期:
2004/6/25 19:16
所属群组:
网站管理员
注册会员
Dev+Hack
帖子: 5886 | 精华: 11
等级: 54; EXP: 57
HP: 1071 / 1339
MP: 1962 / 14711
离线
很有必要
核心组几个人正在准备基于新框架的模块开发,准备先做几个例子

2006/6/8 20:43
_________________
XOOPS Project -- |自由|开源|共享|
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: 建议倡导模块开发的标准
版主
注册日期:
2004/7/13 3:29
所属群组:
注册会员
风格美化组
帖子: 1030 | 精华: 3
等级: 28; EXP: 34
HP: 136 / 683
MP: 343 / 7411
离线
记得以前xoops.org的QA TEAM曾经发布了一个检查表,可以根据这个表来测试模块,包括安全性、对xoops核心的支持程度等诸多方面,不知道以后这方面的工作还会不会继续

2006/6/8 23:36
_________________
theme.xoops.org.cn诚邀大家共建~
———————————————————
XoopsChina风格模版演示站点
http://theme.xoops.org.cn
———————————————————
email & msn:
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: 建议倡导模块开发的标准
Support Team
注册日期:
2005/12/1 9:15
来自 GZ.CN
所属群组:
注册会员
Dev+Hack
帖子: 261 | 精华: 2
等级: 15; EXP: 11
HP: 0 / 352
MP: 87 / 2396
离线
其实标准都已经有了,只是没有写文档。

这段时间我都不断在写模块,从一开始看着别人的教程,用面向过程的方法,直接在程序内通过SQL访问数据表,到现在使用OOP的方法,通过XoopsObject和XoopsHandler的方式去进行数据访问。感觉后者OOP正是XOOPS的精妙之处的所在!用XoopsObject和XoopsHanlder可以减少了对数据表访问50%的开发工作量,这归功于核心开发组人员对XOOPS的构建。在此我简单地说一说这种开发方式,大家一起分享一下:

首先,要说一说XOOPS的两个最基本的类xoopsObject和xoopsHandler。熟悉面向对象编程(OOP)的朋友应该明白对象和类的概念,我这里简单地打个比如:人是一个对象,一个人有身高,体重等等身体特征,这个可以看成是类的属性;人会走,会跑,会做动作,这个可以看作是类的方法。那么我们可以形象地写成:

class 
{
    var 
姓名;
    var 
身高;
    var 
体重;
    var 
出生年月;
    var 
姓别;

    function 
($name$h$w$sex)
    {
        
//这里是类的构造函数,也就是生成类的实例化时所执行的第一个函数
        //通常用作初始化,形象一点就相当于人的出生:)
        
$this->姓名 $name;
        
$this->身高 $h;
        
$this->体重 $w;
        
$this->姓别 $sex;
        
$this->出生年月 date('Y-m-d H:i:s');
    }

    
fucntion 走路()
    {
        ......
    }
    
    function 
跑步() 
    {
        ......
    }
    
    ......
}


当需要使用这个的时候,必须要先进行实例化,用new关键字并赋值给一个变量。套用上面的例子,我们可以生成一个叫“张小三”的人的实例:

$man 
= new ("张小三""60cm""30kg""男");


这样就出现了一个“人”,然后人可以做各种动作:

$man
->跑步();
$man->走路();


说到这里,大家应该明白,类实际上类似于一个组合,把一个对象抽象化之后封装在一个类里面。如果大家想更了解OOP的话请参考相关书藉。(其实我对OOP也不是理解得十分透彻,一直以来都是在工作中积累和慢慢的理解,并没有看太多理论性的书藉,因为我只能使用上面一个例子来解释OOP,希望高手能指正一下。)

下面就开始讲xoopsObject和xoopsHandler。有了OOP基础后,使用这两个类就会很方便。首先要说明一下,xoopsObject是一个针对数据记录操作的类,具有对字段读写的方法;xoopsHandler则是一个针对数据表操作的类,它具有插入、更新、删除、读取记录的基本功能,因此xoopsHandler可以称作句柄(就像文件操作的handle一样)。有了这一对搭档,对于读写一个数据表会变得非常容易。下面看一下这个例子:

//生成一个category的句柄
$cat_handler =& xoops_getmodulehandler('category');
//读取ID号为1的记录
$cat $cat_handler->get(1);
//输出该记录的cat_id字段的内容
echo $cat->getVar("cat_id");
//把id号改成2
$cat->setVar("cat_id"2);
//注意,setVar方法虽然已经改变了cat_id的内容,但是它并没有向数据表进行更新,只在内存里面修改
//因此还得对数据记录更新
$cat_handler->insert($cattrue);


怎么样,是不是很很简单?你可能会问,怎么一个SQL语句就能读出数据表的东西呢?答案就在于xoopsObject和xoopsHandler里面了。XOOPS的核心开发人员把最基本的数据表操作和SQL语句已经封装好,所以你仅仅要做的就是按照上面的方法去读写数据表就行了,这也就是为什么XOOPS会易于扩展的奥秘。

那这个category类应该怎么写呢?
在你的模块目录下面建立一个class目录,然后在里面建立一个category.php的文件,结构如下:
Module Name
|
└ class
|
└ category.php

categroy.php代码:

class ModuleNameCategory extends XoopsObject {
        function class 
ModuleNameCategory () {
            
$this->initVar('cat_id'XOBJ_DTYPE_INTnulltrue);
            
$this->initVar('cat_title'XOBJ_DTYPE_TXTBOX);
            
$this->initVar('cat_description'XOBJ_DTYPE_TXTAREA);
            
$this->initVar('cat_weight'XOBJ_DTYPE_INT);           
        }
    }

    class 
ModuleNameCategoryHandler extends XoopsPersistableObjectHandler {
        function 
ModuleNameCategoryHandler(&$db) {
            
$this->XoopsPersistableObjectHandler($db'b_category'"ModuleNameCategory""cat_id"'cat_title');
        }
    }


category文件里面包含了ModuleNameCategory和ModuleNameCategoryHandler两个类,前者是继承于XoopsObject,后者则继承于XoopsPersistableObjectHandler(XoopsPersistableObjectHandler是XoopsHandler的子类,主要是把XoopsHandler的方法重载)。

假设b_category数据表有cat_id、cat_title、cat_description和cat_weight四个字段。在ModuleNameCategory的构造函数里,主要是把字段与类的内部变量进行初始化,以便后续的读写操作。而ModuleNameCategoryHandler的构造函数则是把数据库操作实例、数据表名、返回值对象名和关键字段名传递给父级的构造函数。其实际作用就是把一些涉及数据表操作所要用到的变量或关联信息告诉给XoopsHandler听,以便在使用各方法时生成相应的SQL语句和执行。

到这里,大家应该明白为什么时候短短的几句程序就能实现数据表的操作。不需要涉及SQL的编写,大大的减少了重复性的工作。

通过extends之后的类,还可以在类内部建立一些新的方法,甚至可以重载父级的方法。由此看来,OOP是有助于程序的扩展,同时能够精简代码结构,对于开发调试都很有帮助。有兴趣想深入了解XoopsObject和XoopsHandler的工作过程,可以打开XOOPS目录下的kernel/object.php文件看看。

2006/6/9 1:05
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: 建议倡导模块开发的标准
Support Team
注册日期:
2005/12/1 9:15
来自 GZ.CN
所属群组:
注册会员
Dev+Hack
帖子: 261 | 精华: 2
等级: 15; EXP: 11
HP: 0 / 352
MP: 87 / 2396
离线
上一帖只是简略地说了一下在XOOPS框架下使用XoopsObject和XoopsHandler对数据表的操作。现在也简单地说一下开发模式。

参考了一下article(D.J.大师的作品)还有其它一些比较大型的模块,不难发现它们都有一个共同点:
以article来说,在article目录下有一个edit.article.php,action.article.php,还有include/form.article.php。这三个文件所构成的就是article模块的文章操作功能。根据我个人的分析,单从文件名可以令人联想到MVC(Module-View-Control)开发模式。MVC包括三类对象。Model是应用对象,View是它在屏幕上的表示,Controller定义用户界面对用户输入的响应方式。其对应关系为
Module - action.article.php
View - form.article.php
Control - edit.article.php

使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。

2006/6/9 1:40
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: 建议倡导模块开发的标准
资深会员
注册日期:
2004/12/5 19:34
来自 308627538
所属群组:
注册会员
帖子: 229 | 精华: 5
等级: 14; EXP: 14
HP: 0 / 328
MP: 76 / 3180
离线
句柄指得是什么呢。是不是数据表的字段

2006/6/9 2:53
_________________

IT技术互助



工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: 建议倡导模块开发的标准
Support Team
注册日期:
2005/12/1 9:15
来自 GZ.CN
所属群组:
注册会员
Dev+Hack
帖子: 261 | 精华: 2
等级: 15; EXP: 11
HP: 0 / 352
MP: 87 / 2396
离线
引文:

hasj 写道:
句柄指得是什么呢。是不是数据表的字段


句柄不是指数据表的字段。确切的说,XoopsObject和XoopsHandler与数据表的一部分,它们是封装了数据表操作的两个类而已。

在上面的ModuleNameCategory类构造函数里面就体现了XoopsObject在实例化的时候与数据表记录的字段绑定,然后就可以通过getVar()和setVar()方法进行读写操作

2006/6/9 8:04
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: 建议倡导模块开发的标准
Support Team
注册日期:
2006/3/7 9:41
所属群组:
注册会员
帖子: 21 | 精华: 2
等级: 3; EXP: 31
HP: 0 / 57
MP: 7 / 348
离线
顶引文:

scottlai 写道:
引文:

hasj 写道:
句柄指得是什么呢。是不是数据表的字段


句柄不是指数据表的字段。确切的说,XoopsObject和XoopsHandler与数据表的一部分,它们是封装了数据表操作的两个类而已。

在上面的ModuleNameCategory类构造函数里面就体现了XoopsObject在实例化的时候与数据表记录的字段绑定,然后就可以通过getVar()和setVar()方法进行读写操作

2006/6/9 11:43
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: 建议倡导模块开发的标准
Support Team
注册日期:
2005/12/1 9:15
来自 GZ.CN
所属群组:
注册会员
Dev+Hack
帖子: 261 | 精华: 2
等级: 15; EXP: 11
HP: 0 / 352
MP: 87 / 2396
离线
顶一下

2006/6/10 21:25
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: 建议倡导模块开发的标准
高级会员
注册日期:
2006/5/26 15:44
来自 日本
所属群组:
注册会员
帖子: 78
等级: 7; EXP: 77
HP: 0 / 169
MP: 26 / 911
离线
这个建议很好。在jp.xoops.org里,有很多xoops的开发规则(不知道在www.xoops.org中是否存在), 但是还需要进一步完善。

我在hack news, newbb, mydownloads, mylinks, Smartfaq, weblog等应用模块时,感到最头痛的就是各个模块的参数options[]。如果能定义一个统一格式就方便多了。

-----------------
ITWorld21
www.itworld21.com

2006/6/11 11:56
工具箱 短消息 Email PDF 书签 打印 举报 回顶部





可以查看帖子。
不可发帖。
不可回复。
不可编辑自己的帖子。
不可删除自己的帖子。
不可发起投票调查。
不可在投票调查中投票。
不可上传附件。
不可不经审核直接发帖。
不可使用主题类别。
不可以使用HTML语法。
不可以使用签名档。

[高级搜索]