Discuz!官方免费开源建站系统

 找回密码
 立即注册
搜索

关于插件开发使用Table类的问题

[复制链接]
magicmeteor 发表于 2012-8-6 18:11:16 | 显示全部楼层 |阅读模式
自从X2.5出来之后,引入了Table类作为DAO层的存在。我之前有文章详细说到过这个DAO层的作用的相关内容。(详细见:https://discuz.dismall.com/thread-2794818-1-1.html

但是在插件开发的时候我发现一个问题,就是Table类在插件上面的使用比较尴尬。在开发技术文库里面其实对Table类的描述非常模糊。只是告诉大家使用C::t(Table类文件名)来访问和存放的路径。但是事实上访问的时候不能只用Table类文件名,而是#插件id#Table类文件名(且这个文件并是不带前面的table_的)这种方式来访问。
这个可以算是技术文档上面的笔误或者没说清楚的地方。

但是我想说的不仅仅是这个笔误的问题。而是在使用中,特别是要扩展原有Table内容的时候却发现非常尴尬的一面。作为OO,对于扩展已有功能,通常会使用继承和重写(php5的类方法还不支持重载)。作为插件往往会对原有的一些功能进行扩展或者运用,这里就涉及到对原有表数据的操作,往往这些操作是原来功能不具备的。为了不影响原有系统代码的完整性,最好的办法就对原有的
Table类进行继承和方法的重写。

而在插件里面的Table类,因为引用的时候指定了#插件id#,所以正常来说,只需要在插件目录下建立同名的Table类,并作为继承,则可以实现类的扩展和方法的重写。但是悲剧的是C::T这个方法竟然是先读取source/class/table/(也就是原系统的Table路径)如果没发现同名的,再来根据#插件id#来读取插件的Table类,也就是说你永远也别想在插件里面用到跟原Table同名的类。如果你的确要扩展你只能改名了。(pass:虽然文件名和类名甚至数据库表名都不强迫一致,但是作为良好的开发习惯还是建议一致使用。)当然,这种做法对于保证优先保证原系统类的加载是起了一定的保护作用,但是个人认为不太利于二次开发的应用,既然你通过##来区分的来源,那至少出现##符号的时候是要优先加载这个吧?

pass:建议开发技术文库能再完善一些,增加多一点例子,目前的文库看起来很费劲,而且很多描述过于简单导致不知所云。而且很多细节都没有进行约束,例如插件模板的图片和样式表应该放哪?安装文件和更新文件应该怎么写?如果涉及到要修改元系统文件的时候或者需要把文件放到非插件目录的时候,在安装文件和修改文件上面应该怎样写?安全方面应该注意什么?都没有进行详细的说明。

回复

使用道具 举报

波︶ㄣ依然 发表于 2012-8-12 12:23:38 | 显示全部楼层
{:soso_e100:}来看看~~路过…………
回复

使用道具 举报

qwe13136564 发表于 2012-8-12 15:39:27 | 显示全部楼层
特别是要扩展原有Table内容的时候却发现非常尴尬的一面



































Signature---------------------------------------------------------------------
In 2011, the cheap air max brand corresponding to its three headed spokesperson AIR, EXPLOSIVE and QUICK, the concept of the three product lines, this classification is the NIKE brand to return to the position of nike air max 2012shoes again after a lapse of many years the route, which most embodies the NIKE brand's traditional "Raymond" series is the endorsement by Wade the main. nike air max 24-7
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-9-10 14:04 , Processed in 0.103357 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表