让软件具有二次开发功能,提高产品的应变能力

任何一个软件,都不可能完全满足所有用户的需求,为此,我们必须经常修改我们的程序,随着用户的数量的增加,我们会感觉很累,尽管我们的程序增加了很多可以配置的功能,但是还不够,用户的需求总在变化,我们无法阻挡,我们不可能将程序中所有的环节都设置为可改变的。是否有一个好的办法,可以减轻一下开发人员的负担,二次开发是一个很好的选择。

很多人都知道,AutoDesk是一个著名的CAD软件公司,AutoCAD是其最著名的产品之一,该软件在世界各地的应用非常普及,除了产品本身的易用性和适应性之外,软件本身具有的二次开发功能,是其在很多行业根深蒂固的重要原因之一。AutoCAD本身功能有限,但是由于其良好的设计,并且兼有非常优秀的SDK解决方案,用户可以通过二次开发按照自己的要求扩充软件功能,甚至使得AutoCAD与企业的管理系统融为一体,很多企业,尤其是制造业,几乎无法离开AutoCAD。

我们设计软件开始时,往往首先考虑实现功能,然后再考虑优化,基本上不考虑二次开发的功能,其实,二次开发功能也是软件可维护性的一部分。我们的软件具有二次开发功能,则在一定程度上,用户可以自己实现一些不具备的功能,而不是由公司的程序员修改代码,然后重新由工程人员给用户升级,这样周期长,维护的费用非常之高。软件具备二次开发功能,具有如下的几点好处:1、提高软件产品的竞争力,软件的适应性更高,可以更多方面的满足用户的需求;2、降低软件的维护成本,尤其在信息管理类软件上,用户的需求总在变化,程序员没有必要总是修改代码,用户可以自己实现,或者由售后工程师自己在用户工作现场实现。3、将软件系统的功能限制在一定的范围之内,而不是根据用户的要求,无限制的修改程序代码,以增加新的功能,可以在一定程度上降低、甚至消除因修改系统代码带来的风险。

当然,增加软件具有二次开发功能,要做很多工作,会使初期的开发周期较长。但是,考虑到后期的种种好处,前期的付出是完全值得的。

那么,如何让我们的软件具备支持二次开发的功能?最基本的就是程序动态调用预定义的DLL中的函数或类,实际的情况可能会复杂一些,下面举一个简单的例子,通过纯粹的DLL说明如何实现一个二次开发功能。

1)首先我们完成一个简单的程序,其中包括两个模块,MyApp.EXE和Sys.DLL。MyApp直接调用Sys.DLL,Sys.DLL包括所以系统的命令函数。这两个模块组成了一个功能完整的系统,可以很好的运行。

2)增加一个SDK.DLL,其中封装了Sys.DLL中的很多公开的函数,供用户调用。

3)我们规定用户在SDK.DLL上开发得到的新的DLL必须具有两个基本函数,第一个函数是BOOL IsUserDLL(),并且返回TRUE,另一个函数是BOOL ExecUserCommand(void * pParam),可以执行UserDLL.DLL中的函数命令。

4)增加一个Adapter.DLL模块,该模块通过LoadLibrary函数动态调用UserDLL.DLL,并且可以执行其中的函数。它可以同时加载多个用户DLL,并且将有关函数指针保存到一个数组中,便于在适当的时候通过指针调用函数。

5)修改MyApp.EXE使之可以在适当的位置调用Adapter.DLL。

修改之后的系统如下所示:

其中UserDLL.DLL是用户根据SDK.DLL开发的,MyApp通过Adapter.DLL间接调用UserDLL.DLL,再间接调用SDK.DLL,再间接调用Sys.DLL。这样,用户可以很方便的扩充MyApp的功能,并且可以修改系统的很多属性,例如改变系统的状态,修改其菜单,修改工具条,增加新的菜单等等。

如果你认为直接通过纯粹的DLL进行二次开发不方便,你可以通过COM封装Sys.DLL,这个COM模块就是COMSDK.DLL,这样,有了COM接口,用户可以通过COM对MyApp进行二次开发,这是的adapter.DLL必须修改一下,使之既可以动态加载DLL,有可以动态加载COM。

微软推出.NET多年了,如果你希望用户可以使用.NET对MyApp进行二次开发,没有问题,您可以在COMSDK.DLL的基础上通过.NET再封装一次,产生一个NETSDK.DLL,修改adapter.DLL使之可以调用.NET的代码。修改之后系统的结构如下:

 

我通过通过VC6编写的MyAPP,其中的SYS.DLL,SDK.DLL,Adapter.DLL都是通过VC开发的,如果希望程序支持.NET,建议使用Visual Studio 2005开发,C++/CLR可以方便的实现C++与.NET代码的混合编程。

我们设计的新版软件,现在面临这样的问题:面对新的用户,我们直接在新程序的基础上修改代码以满足用户的要求,还是,将软件的基本功能限制在一个范围之内,然后通过SDK,开发新的功能,以满足该用户的特殊要求?在经历了苦难的维护历程之后,我毅然决然的选择了后者,我们的新版软件必须具有二次开发的功能,否则,我们死定了。

软件二次开发的基本结构确定之后,就是明确设置一个软件的功能范围,那些是产品的基本功能,那些功能应该通过SDK实现等等,这点非常重要。另外,Sys.DLL可能由多个DLL组成,这些DLL的力度,功能,以及他们之间的接口等问题,看看设计模式和面向对象的设计等书籍,当然,关键是实事求是。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
# 单页面和多页面开发及应用 # 单页面: - 什么是单页面:单页面是指只有一个主页面的应用,浏览器一开始要加载所有必须的 html, js, css。所有的页面内容都包含在这个所谓的主页面。但在写的时候,还是会分开写(页面片段),然后在交互的时候由路由程序动态载入。 - 跳转仅加载一次,用于PC和公务网站 - 页眉 -> 第一页,第二页, 第三页 -> 脚本 # 单页面技术: -AngularJS是一个全面的客户端侧框架。其模板基于双向UI数据绑定。数据绑定是一种自动方法,在模型改变时更新视图,以及在视图改变时更新模型。其HTML模板在浏览器编译。编译步骤创建纯HTML,浏览器将其重新渲染到实时视图。该步骤会在随后的页面浏览重复。在传统的服务器端HTML编程,控制器和模型等概念在服务器进程进行交互以产生新的HTML视图。在AngularJS框架,控制器和模型状态在客户端的浏览器维护,从而使生成新页面不依赖与服务器的交互。 -Ember.js是基于模型-视图-控制器(MVC)软件架构模型的客户端侧JavaScript Web应用程序框架。它允许开发人员在一个框架通过常用的习惯用语和最佳实践来创建可伸缩的单页面应用程序。该框架提供丰富的对象模型、声明性双向数据绑定、计算属性,Handlebars.js提供的自动更新模板,以及一个路由器管理应用程序状态。 -Meteor.js是一个专门为单页应用设计的全栈(客户端-服务器)JavaScript框架。它具有比Angular、Ember或ReactJS更简单的数据绑定特性且使用--Distributed Data Protocol和一个发布/订阅来自动将数据更改传播到客户端,无需开发人员编写任何同步代码。全栈反应确保从数据库到模板的所有层都可以在必要时自动更新。诸如服务器端渲染等生态系统包则解决搜索引擎优化(SEO)等问题。 -Aurelia是一个适用于移动设备、桌面和网页的JavaScript客户端框架。它类似AngularJS,但更新、更符合标准,并采用模块化举措。Aurelia使用下一代ECMAScript编写。 -Vue.js(通常称为Vue)是一个用于构建用户界面的开源渐进式JavaScript框架。 -React(通常写为React.js或ReactJS)是一个构建用户界面的JavaScript函式庫。它由Facebook、Instagram和个人开发者以及企业社区维护。React最大的优势是易于使用——基本上任何熟悉HTML的开发人员都可以创建React应用程序。另一个所称的优势是可能使用相同的技术堆栈来同时创建Web与移动应用程序。有多家公司使用React和Redux库来让开发人员创建复杂但可扩展的Web应用程序。 -Fulcro是一个全栈库,它采用Netflix的Falcor,Facebook的Relay和Om Next对反应性,功能性,数据驱动软件进行改编的数据驱动原则。 -单页面做seo(搜索引擎优化): -根据部分进行优化为每个关键字创建一个<div>或<section>或每个关键字并为其分配一个适当的ID,该页面上的内部链接将链接至ID。 -优化页面速度对于单页网站SEO来说至关重要。 - 做了seo 以后,单页面还是单页面 # 单页面优点: -减小服务器压力。 如果不用单页面(spa),如果每次切换页面的时候,都向服务器发送一个请求,服务器返回一个html文件;但是如果使用了单页面,在切换时,不需要请求服务器,只要通过本地的js来切换即可。并且服务器端就不需要配置路由,完全做到了前后端分离 -增强用户体验,增加app的使用流畅性。 使用spa之后,页面在切换的时候非常流畅,完全没有那种不断刷新的感觉,而是非常快的就有了响应,因为js运行速度很快,所以js在做本地路由的时候,就会非常快。 -单页应用没有页面之间的切换,就不会出现“白屏现象”,也不会出现假死并有“闪烁”现象。 -单页应用相对服务器压力小,服务器只用出数据就可以,不用管展示逻辑和页面合成,吞吐能力提高几倍。 -良好的前后端分离。后端不再负责模板渲染、输出页面工作,后端API通用化,即同一套后端程序代码,不用修改就可以用于Web界面、手机、平板等多种客户端。 -单页面缺点: -首次加载耗时比较多。 解决办法:可以采用基于HTTP Chunk 的首屏数据渐进式预加载方案,该方案总体减少了单页应用1.2s的首屏呈现时间。首屏数据渐进式预加载的优化思路也得到了体现: 优化首屏数据加载节点的速度。 预先加载首屏数据,使得多个串行节点并行化。 -SEO问题,不利于百度,360等搜索引擎收录。 解决办法:可以采用prerender服务,它拿到请求够,直接在服务端的一个js engine里,运行这个HTML(就像浏览器做的那样),直到内容动态填完之后,再广播一个事件告诉phantomjs“内容已经好了,可以返回给爬虫了”,这样爬虫就拿到了一份完整的HTML,就和在浏览器里渲染完的一样。目前流行的框架都有对应的服务器渲染框架 -如有造成Css命名冲突。 解决办法:我们可以使用Sass、LESS和Stylus等CSS预处理器,在一定程度上可以解决该问题。 -前进、后退、地址栏、书签等,都需要程序进行管理,页面的复杂度很高,需要一定的技能水平和开发成本高。 # 多页面: -什么是多页面:每一次页面跳转的时候,后台服务器都会给返回一个新的html文档,这种类型的网站也就是多页网站,也叫做多页应用 - 跳转需要刷新所有资源,用于app 或 客户端 - 页眉 -> 第一页 -> 脚本,页眉 -> 第二页 -> 脚本,页眉 -> 第三页 -> 脚本 -多页面优点:给用户提供一个完美的视觉方向,重点是没有很多的菜单,简洁明了的SEO管理。由于可以针对每页一个关键字优化应用程序 -多页面缺点:后端和移动客户端不能同时使用,前端和后端开发紧密结合。开发变得相当复杂。开发人员需要为客户端和服务器端使用框架。这导致应用程序开发时间更长。 # 区别: -组成:单页面由一个外壳页面和多个页面组成, 多页面由多个完整页面组成 -css(资源公用):单页面为共用,只需要外壳部分加载,多页面则不共用,每个页面单独加载 -刷新方式:单页面页面局部更改或刷新,多页面整页刷新 -url模式:单页面 a.com/#/pageone 多页面 a.com/pageone.html -用户体验:单页面页面切换快,用户体验良好,多页面加载缓慢,流畅度不够,用户体验较差 -转场动画:单页面容易实现,多页面无法实现 -数据传递:单页面容易,多页面需要依赖url传参,或cookie,localSrorage等 -搜索引擎优化:单页面需要单独方案,实现较为困难,不利于SEO搜索,可利用与SSR优化,多页面实现方法容易 -适用范围:单页面高要求的体验度,追求页面的流畅,多页面追求高度支持搜索引擎的应用 -开发成本:单页面较高,需要专业的框架,多页面较低,但页面重复代码较多 -维护成本:单页面相对容易,双页面相对复杂
院 系:软 件 学 院 实验课程:软件工程 实验项目:《餐饮管理系统》需求分析说明书 指导老师:庞雄文 开课时间:2012 ~ 2013年度第 1学期 专 业:软件工程(数字媒体) 班 级:2010级7,8班 学 生:邓润锋 何嘉妮 余晶晶 学 号:20102003007 20102003009 20102003066 华南师范大学教务处 需求分析规格说明书 1. 引言 ................................................................................................................................. 3 1.1. 编写目的................................................................................................................... 3 1.2. 背景........................................................................................................................... 3 1.3. 定义........................................................................................................................... 4 1.4. 参考资料 ................................................................................................................... 4 2. 任务概述 ......................................................................................................................... 5 2.1. 目标........................................................................................................................... 5 2.1.1. 总体目标 ........................................................................................................ 5 2.1.2. 概要目标 ........................................................................................................ 5 2.1.3. 系统结构 ........................................................................................................ 5 2.2. 用户特点 ................................................................................................................... 6 2.3. 假定和约束 ............................................................................................................... 7 3. 需求设计 ......................................................................................................................... 7 3.1. 系统详细设计 ...............................................................................................

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值