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编辑  收藏  举报

导航