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

你可能感兴趣的:(mvc,工作,log4j,action,Delphi,pascal)