bpl插件系统开发(4)

  我们可以想像这样一个系统,与mvc的思想比较相同,controller负责整个系统的调度,当用户执行了某个action后,controller将其处理后用某个特定的view来呈现给用结果.这就是mvc

先看看这个图

这图是我用Together6.1画的,关心的设计思想,而不是代码本省,而且together本身也不支持pascal语法生成(不知道有没有插件)

其中的IMisDriver就是mvc中的TController,它负责协调整个系统,驱动系统工作起来.在delphi中它就是一个全局变量,任何单元都可以包含它,并访问它的功能,在IMisDriver内部,将会用到我们上一章说到的TPluginLoader来持有所有的服务接口

下面解释一下各个接口的作用,

ITracer,这是一个用来写入跟踪信息的接口,它仿照了一些log4j的思想.

ILogin,它用于登录的到系统,至于它后台使用的机制,当然要靠我们的实现来进行验证

IUserInfo:它返回当前登录用户的各种信息,

IAuthentic用于验证当前用户是否具有某个操作的权限.

IDataService用于提供数据服务,它可以从数据库中取得数据,并支持事务,

IShortcutDispather它用于将用户的快捷输入转化为某个操作

IActionManager用于管理用户动作和该动作应采用的处理数据的类的对应关系,

IProcessData用于处理给定的数据.

我们还可以看到IView和IReport从IProcessData继承下来,他们同样用来处理数据,只不过

IVew用于给用户呈现数据的crud界面

IReport用于给用户呈现报表

继承自IView的几个接口,用于对同一数据呈现不同的操作界面,我在另一个项目FormLib中基本实现了这些功能.

那么mvc的的通常操作的流程是什么样子呢?

上图没有包含一些全局的操作,例如ITracer等.

设计给了我们对软件更清晰的认识,3年后的今天,算是远远的看到了软件设计的大门.用周xx的话来说,这个世界前所未有的清晰.....

这样的设计为什么能够说有扩展性呢?,

整个系统靠IMisDriver驱动起来,它使用接口来完成工作,每一个接口,你可以使用不同的方法来实现,并发布它(bpl形式),就像你从pc上拔掉了一个优盘,插上了另一个优盘,你就可以看到故事的后半部分.

再举个实际的例子:你原先的权限验证需要去掉,现在不再需要权限,那么你可以实现一个总返回"允许操作"的IAuthentic,发布出去,系统的执行行为整个就改变了.

这导致的结果是:IMisDriver说我需要哪些接口,你只要提供了相应数量和类型的接口,他就可以按照预先设定的调度来完成整个系统.

那么如果整个系统的调度需要变化怎么办呢?这在软件设计中简直就是灾难,但是在这样的插件系统下,你只需要修改IMisDriver,或者重新设计一个IDriver来驱动其他的接口,这样的改变已经最大可能的保证了软件的价值.

如何规划好你的系统,这将是日后软件复用,重构的重要因素,

理论不知道说的够清楚没有,之后的工作,将是枯燥的代码编写了,

总结一下,

1.面向接口,提供给插件式系统中插件开发成为可能.

2.bpl机制,很大程度上把我们从把插件本地化的工作中逃离,它的机制在delphi中特有,基于delphi我们能做的可能只有通过它来的最方便了

3.系统的设计对于哪怕是一个简单的系统来说,能更好的帮助你对产品有着更全面的思想.一定要做,那怕只是花两个圆呢.^_^

 

(水平有限,说不定错误百出,大家注意大牙别掉了,谢谢)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值