APL: C++模块紧密耦合 ---> C++模块松散耦合 的设计思想
APL设计之初的想法就是要去掉 C++语言模块之间的紧密偶合的做法, 而把C++语言模块之间变成松散偶合.
C++语言模块之间的依赖关系主要有:
.h文件 // 宏定义, 结构定义, 方法定义, 类定义, interface定义.
.lib文件 // 链接.
也就是模块与模块之间的调用 是依赖彼此上述文件的定义, 这导致模块与模块之间是 完全被紧密约束在一起的,
模块与模块之间有非常大的约束.
而APL的模块与模块之间的依赖关系永远 遵循APL接口标准, 所有模块暴露出来的接口( 方法和类别 )都是以 APL接口标准再通过
模块内的动态映射完成的, 因此单个模块的编译只 需要APL接口就可以了, 模块与模块之间 不再存在 紧密耦合( 不依赖彼此内部的
数据结构和类... )
因此, APL中, exe, aplRuntime.dll(APL运行库), aplSCADA.dll(组态模块), aplScriptEngine.dll(脚本引擎模块)... 所有APL模块都是 松散耦合的.
aplScriptEngine.dll在 解析一段脚本的时候, 里面的 APIs分布在
exe,
aplScriptEngine.dll,
aplScada.dll
..... 等等模块中,
都是通过APL接口 与 aplRuntime控制下的 动态映射 完成的.
------------------------------------------------------------------------------------------------------------------
aplBrowser.exe中 如何实现 APIs能被 脚本模块调用?
组态窗体在创建时候, 可以接收 一个上下文(全局变量表) + 脚本代码 来给脚本模块控制,
aplBrowser.exe中要点:
1. CMainFrame支持 APL_IEntry接口.
2. aplBrowser.exe在 创建组态窗体时候, 在这个组态窗体的上下文中 放了一个变量, $$main = g_pMainFrm ;
因此scada脚本中, 可以用 $$main->xxx(), 去调用 CMainFrame的 APL方法.
也就是说, 应用程序控制者 可以在 组态窗体的 脚本环境中预置任何 想要放的变量信息, 来扩展脚本功能.
posted on 2012-08-27 15:32 smartfish_liu 阅读(779) 评论(0) 编辑 收藏 举报