版权归原作者所有,如有侵权,请联系我们

[科普中国]-二次开发

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能,一般来说都不会改变原有系统的内核。

简介一般的来说,一些大公司如IBM开发了一个大型的软件系统平台,根据不同的客户的需要,一些其它的中小公司为客户根据需求在该平台上进行第二次有针对性的开发。是否提供相应的接口,有的软件公司只提供软件,但也有小公司连代码一起出售,如是后者,就更方便进行二次开发。比如售票系统,车站里面弄好了,提供几个储存过程给银行,银行就可以代理售票了,这也是一种,还有一种如我们利用delphi,C#等操作word等。1

如何进行二次开发第一,你要有这个开源产品的所用语言的语言基础,能看懂代码是最基本的。

第二,你要对这个开源产品的功能和使用要有比较熟悉,因为你熟悉了,你才知道一个需求下来,你要改什么,什么是系统自带的,大概要怎么改。

第三,你要熟悉这个开源产品的数据结构,代码结构,系统的框架结构,核心是哪里,附属功能是在哪里。简单点说,就是数据库,代码逻辑,文件目录的熟悉。

第四,根据你的需求,然后利用开源产品的内核,进行系统的扩展和修改,以达到你的需求。

基本要求第一,你要有这个开源产品的所用语言的语言基础。2

第二,你要对这个开源产品的功能和使用要有比较熟悉,因为你熟悉了,你才知道一个需求下来,你要改什么,什么是系统自带的,大概要怎么改。

第三,你要熟悉这个开源产品的数据结构,代码结构,系统的框架结构,核心是哪里,附属功能是在哪里。简单点说,就是数据库,代码逻辑,文件目录的熟悉。如果是用接口式的二次开发,则需要你对这个接口比较熟悉,一般来说会有相应的文档。

第四,根据你的需求,然后利用开源产品的内核,进行系统的扩展和修改,以达到你的需求。

第五,对其提供的SDK中的API函数有一定了解,以利于你对SDK中个函数的使用更加灵活方便。

PRO/ENGINEER二次开发PRO/ENGINEER在提供强大的设计、分析、制造功能的同时,也为用户提供了多种二次开发工具。

工具常用的二次开发工具有:族表(Family Table)、用户定义特征(UDF)、Pro/Program、J-link、Pro/toolkit等。3

1)族表(Family Table) 通过族表可以方便的管理具有相同或相近结构的零件,特别适用于标准零件的管理。族表通过建立通用零件为父零件,然后在其基础上对各参数加以控制生成派生零件。整个族表通过电子表格来管理,所以又被称为表格驱动。

2)用户定义特征(UDF) 用户定义特征是将若干个系统特征融合为一个自定义特征,使用时作为一个整体出现。系统将UDF特征以gph文件保存。UDF适用特定产品中的特定结构,有利于设计者根据产品特征快速生成几何模型。

3)Pro/ENGINEER软件对于每个模型都有一个主要设计步骤和参数列表―Pro/Program。它是由类似BASIC的高级语言构成的,用户可以根据设计需要来编辑该模型的Program,使其作为一个程序来工作。通过运行该程序,系统通过人机交互的方法来控制系统参数、特征出现与否和特征的具体尺寸等。

4)J-link是PRO/ENGINEER中自带的基于JAVA语言的二次开发工具。用户通过JAVA编程实现在软件PRO/ENGINEER中添加功能。

5)Pro/Toolkit同J-link一样也是Pro/E自带的二次开发工具,在Pro/Toolkit中,PTC向用户提供了大型的C语言函数库,函数采用面向对象的风格,通过调用这些底层函数,用户能方便而又安全地访问Pro/ENGINEER的数据库及内部应用程序,进行二次开发,扩展一些特定功能。

6)基于VB API的二次开发过程,Pro/E Wildfire 4.0开始可以采用Visual Basic API,通过 Visual Basic NET应用程序和应用程序 (如 Microsoft Word、Excel 或 Access) 中的 Visual Basic 宏来进行二次开发。

7)pro/web.link 这种方法使用的语言是javascript,以网页的形式来访问proe 模型一般情况下,采用比较多的是Pro/Toolkit,进行二次开发。

程序模式同步模式(Synchronous Mode)和异步模式(Asynchronous Mode)。同步模式下,Pro/E根据注册文件中的信息启动应用程序,Pro/Toolkit应用程序和Pro/E产生各自的进程,程序的控制权在两个进程之间切换。该应用程序不能够独立于Pro/E而运行。在异步模式下,Pro/Toolkit应用程序和Pro/E能够进行各自的操作,在通信方面,异步模式使用远程调用(Remote Procedure Calls,RPC)方式,程序(含有独立主函数)能独立于Pro/E启动。由于异步模式采用远程调用,程序运行速度相比同步模式慢很多,整合性也不好,所以一般基于Pro/E的Toolkit开发采用同步模式。在同步模式下又有两种开发方式:动态链接库(DLL Mode)和多进程(Multiprocess 或Spawned Mode)。前者为的动态连接库文件,无自身主程序函数,直接连接于Pro/E进行程序调用。后者为.exe文件,有独立的主程序和Pro/E进行相连接。一般为了调试方便,开发程序时可以采用多进程模式,在程序完成时,采用动态连接库提高程序运行效率

Ecshop二次开发ECShop是一款B2C独立网店系统,适合企业及个人快速构建个性化网上商店。系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序。目前最新版本为2.7.3。

系统在实际使用过程中用户会有各种不同的需求,往往需要进行二次开发,针对这些需求 php服务中心专门建立ecshop二次开发部门,来解决用户以上问题,同时 php服务中心齐永东齐老师总结二次开发经验录制了大量ecshop二次开发视频并提供免费下载。3

必备基础:非常熟悉HTML

熟悉DIV+CSS的布局

扎实的PHP基础,熟悉结构化编程,了解OOP,并能看懂和使用

熟悉Smarty模板引擎

熟悉MYSQL,掌握SQL语言

文件结构分析\includes\cls_captcha.php: 验证码图片类

\includes\cls_ecshop.php: 基础类

\includes\cls_ecshop.php(56): 密码编译方法;

\includes\cls_rss.php: RSS 类

\includes\cls_smtp.php: SMTP 邮件类

\includes\inc_constant.php: 常量

\includes\init.php: 前台公用文件

\includes\lib_common.php: 公用函数库

\includes\lib_goodscat.php: 前台公用函数库

\includes\lib_insert.php: 动态内容函数库

\includes\lib_main.php: 前台公用函数库

\includes\lib_payment.php: 支付接口函数库

\includes\iconv\cls_iconv.php: 字符集转换类

\includes\ip\cls_ip.php: IP 归属地查询类

\includes\modules\integrates\discuz.php: 会员数据处理类

\includes\modules\integrates\ecshop.php: 会员数据处理类

DedeCMS二次开发必备基础:非常熟悉HTML4

熟悉DIV+CSS的布局

扎实的PHP基础,熟悉结构化编程,了解OOP,并能看懂和使用

熟悉MYSQL,掌握SQL语言

文件结构分析熟悉每个文件的基本功能,方便做修改,知道每个文件的大概作用之后,可以方便的对文件进行修改

文件结构摘要:

common.inc.php 数据库配置文件

config.cache.bak.php 后台系统配置备份

config.cache.inc.php 后台系统配置文件缓存

downmix.data.php 采集混淆缓存文件

mysql_error_track.inc MYSQL错误日志

safequestions.php 安全问题

sitemap.html 站点地图

sys_pay.cache.php 支付网关配置

template.rand.php 随机模板设置

……

· DedeCMS数据库结构分析,至少要熟悉每个表的作用

熟悉每个表的作用,了解几个核心表的设计及字段的含义,方便拿到新的需求之后,能快速的判断是否加字段,还是新建表来处理。同时也能理解DedeCMS的数据库设计思想,把有用的设计思路加到自己的系统中。

· DedeCMS的流程控制,及一些核心文件的解析

熟悉一些登陆,注册,文档管理,权限控制,分类管理,模型设置等一些常用流程控制。对几个核心文件进行解剖,了解其编程技巧及安全机制

· DedeCMS插件的开发(插件和内嵌式插件)

熟悉两种插件的编写,插件的导入导出,插件搭配模型的使用

常见的PHP缓存技术分析在大部份情况下我们的网站都会使用数据库作为站点数据存储的容器。当你执行一个SQL查询时,典型的处理过程是:连接数据库->准备SQL查询->发送查询到数据库->取得数据库返回结果->关闭数据库连接。但数据库中有些数据是完全静态的或不太经常变动的,缓存系统会通过把SQL查询的结果缓存到一个更快的存储系统中储,从而避免频繁操作数据库而很大程度上提高了程序执行时间,而且缓存查询结果也允许你后期处理。4

数据缓存这里所说的数据缓存是指数据库查询缓存,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据,并把查询结果序列化后保存到文件中,以后同样的查询结果就直接从缓存文件中获得。

页面缓存每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问的时候页面文件就发挥作用了。(模板引擎和网上常见的一些缓存类通常有此功能)

内存缓存Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。

dbcached 是一款基于Memcached 和 NMDB 的分布式 key-value 数据库内存缓存系统。

以上的缓存技术虽然能很好的解决频繁查询数据库的问题,但其缺点在在于数据无时效性,下面介绍项目中常用的方法:

时间触发缓存检查文件是否存在并且时间戳小于设置的过期时间,如果文件修改的时间戳比当前时间戳减去过期时间戳大,那么就用缓存,否则更新缓存。

设定时间内不去判断数据是否要更新,过了设定时间再更新缓存。以上只适合对时效性要求不高的情况下使用 ,否则请看下面。

内容触发缓存当插入数据或更新数据时,强制更新缓存。

在这里我们可以看到,当有大量数据频繁需要更新时,最后都要涉及磁盘读写操作。怎么解决呢?我在日常项目中,通常并不缓存所有内容,而是缓存一部分不经常变的内容来解决。但在大负荷的情况下,最好要用共享内存做缓存系统。

其缺点是,因为每次请求仍然要经过PHP解析,在大负荷的情况下效率问题还是比效严重,在这种情况下,也许会用到静态缓存。

静态缓存这里所说的静态缓存是指HTML缓存,HTML缓存一般是无需判断数据是否要更新的,因为通常在使用HTML的场合一般是不经常变动内容的页面。数据更新的时候把HTML也强制更新一下就可以了。

本词条内容贡献者为:

闫晓东 - 副教授 - 中央民族大学信息工程学院