implementation
end.
另两个codemyth开头的单元是我自己的函数包,其中codemyth.util.objectList声明了TObjectList类,它继承自TstringList类,但它可以自动销毁Objects中存储的对象实例而已.你可以用TstringList代替它,但你就需要自己释放TPluginList中的接口变量列表(虽然接口不需要释放,他通过引用计数来自释放
我们可以想像这样一个系统,与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的的通常操作的流程是什么样子呢?
上图没有包含一些全