一种高效的跨进程MVC架构

Posted 松勤软件学院

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一种高效的跨进程MVC架构相关的知识,希望对你有一定的参考价值。

点击上方
“蓝色字”
可关注我们!



VcSmith、VcTester、VcAuto基同于一体系架构,功能层次划分清晰,很好的实现了组件重用,使用一种跨进程MVC结构,保证系统具良好的伸缩性,构造出一种软性的、脚本化的缓冲层,让调测变得很便利而高效。

VcTester分层架构

一个高效的软件开发系统应有良好的分层架构,使各层能采用最恰当、最高效的语言进行开发,层之间接口除了要简洁、清晰、便于理解,还应为调试与自动化测试提供便利,良好的分层架构还需适应经常性软件重构,便于产品功能拓展延伸,并支持大幅度代码重用或组件重用。

VcSmith、VcTester、VcAuto软件架构具备上述高效研发系统的特征。在抽象层次理解,它可以划分4层:最上层是终端操作层,其下依次是调测接口层、业务实现层、基础库支持层。

VcTester系列软件采用分布式架构,由多个可执行文件构成一个协调灵活、功能拓展便利的体系。如下图,在被测系统中驻留一个调测代理(是CSE脚本系统),然后将被测系统中的实例映射到调测代理,在调测试代理中可以用脚本自由模拟被测系统的行为,也即:调测代理具备较完整的产品功能展现能力,以此为基础衍生出各种各样的调测支持功能。

一种高效的跨进程MVC架构

用户操作终端是独立的可执行程序,它与被测系统中的调测代理通过共享内存方式建立连接。在此连接基础上,我们封装本地过程调用(Local Procedure Call,LPC)系统,之后再在LPC之上构造跨进程MVC系统,使界面操作与底层业务实现分离,并建立柔性互动,让操作接口具备良好的可扩展性与可测试性。

基于这一架构,VcTester系列软件可以方便的支持多个用户终端,包括:控制台终端(CON)、图形界面终端(GUI)、表格驱动终端(TABLE),也能方便的接入一个远程通信代理来支持远程诊断接入。

在终端操作层与其下业务实现层之间设有调测接口层,这一层是天然的脚本解释执行形式,调试、测试、诊断都方便的支撑起来,且能快速实现自动化作业。

SRPC组件接口

VcTester系列软件的各个进程主要通过共享内存方式实现通信,这是一种端到端、总线式结构,各个端口都挂接在共享内存总线上,每个端口都用它的注册名标识(比如VcSmith与VcTester的被测系统缺省注册名是CseClient,用户界面注册名是CseWin),各端口在底层通信层次是对等的,无client、server之分,而在此之上叠加特定框架结构(比如MVC)后才有client与server之分。

VcTester采用CSE提供的共享内存架构,即SRPC组件(Simple Remote Procedure Call),之所以称RPC,是因为该组件既支持LPC,也支持RPC,两者基于同一架构,远程通信插件作用于LPC,就成为RPC,所以统称为RPC。SRPC提供两类远程调用,一类是exec调用,另一类是eval调用,前者是异步模式,不要求等待返回结果,后者是同步模式,等待返回结果,除了远程调用,SRPC还提供建立(或停止)通信连接、查看连接端状态等辅助功能。

用户可以将CSE的SRPC组件引入到自己的产品中,因为CSE是共享软件,SRPC组件允许用于二次发布,另外,SRPC提供多种接口,包括C/C++、Delphi、CSE、Python、VBA等,方便接入各个系统,在SRPC之上还提供一些封装(如跨进程MVC)。

跨进程MVC结构

将用户操作终端与业务逻辑实现分离到两个进程后,我们构造一种跨进程的MVC结构,如下图,其中Module提供业务逻辑实现,在驻留于被测系统的调测代理中实现,View与Controller在用户界面实现。有关CSE的跨进程MVC实现细节可到CSE官方网站查阅相关资料。

各个层次重用

因为VcTester系列软件具备良好框架结构,所以能实现大幅度代码重用或组件重用。高度重用是我们研发过程的显著特色,它让我们在维持低成本生产的同时,能快速推出产品。

在基础库支持层(在调测代理中),我们重用CSE脚本语言(这是一款开源的共享软件)、VC调测组件接口(既支持映射系统,也支持我们集成界面的单步调试)。

在调测接口层与终端操作层,我们重用了SRPC与跨进程MVC组件,在GUI界面重用了CVP插件系统、SynEditV2控件(用于构造脚本编辑器、C/C++编辑器),我们还重用VC编译功能,提取编译结果信息来实施更精准、更智能的C/C++语言分析。

当然,重用不限于源码或组件,我们在构筑VcTester系列工具形成一套技术体系与调测理念的过程中,方方面面都体现重用思想。被测实体映射到脚本,让脚本系统具备对等的表现能力,是一种重用;调试驱动脚本与测试驱动分享,调试操作生成测试脚本,也是一种重用;单元与集成测试、接口测试、自动化测试、诊断测试各阶段工作成果可重用;本系列工具的IDE环境提供强大的外部工具集成功能,象Pclint、VSS、VLD、ANT、SourceMonitor、Koders等工具都能方便集成进来,当然也是一种重用;再如,采用Excel构造表格驱动,也体现了一种重用,否则我们要自行开发(Excel够强大了,没必要重复发明一个轮子,再说,我们怎么做也超不过Excel)。

就连用户学习CSE语言,也可以高度重用。CSE具备良好的表述能力与语言映射能力,CSE V1.5将引入兼容Python的功能,任意Python扩展模块都可重用到CSE系统中,会用CSE意味着你开始敲打掌握超强测试语言的大门。另外,CSE从V1.6开始支持混合编程,CSE脚本能自动转化为C/C++代码,此方式可让编程效率倍升,上述SRPC与跨进程MVC也从该版本开始延伸为一个高效的编程框架,用户可将它重用到自己的产品。再进一步,在CSE V2与V3规划中,语言映射技术将进一步拓展,支持跨平台,支持64位,展现文档化编程、可视化编程、扁平化编程等理念。


以上是关于一种高效的跨进程MVC架构的主要内容,如果未能解决你的问题,请参考以下文章

Android面试Android跨进程通信之Binder

Android 基于共享内存实现跨进程大数据的高效传输

Android 基于共享内存实现跨进程大数据的高效传输

Android 基于共享内存实现跨进程大数据的高效传输

基于JSON RPC的一种Android跨进程调用解决方案了解一下?

跨进程通信之Messenger