[连载]《C#通讯(串口和网络)框架的宏图以及实现》- 7.表面接口的规划

目       录

第七段           外部接口的设计… 2

7.1           插件接口… 2

7.2           图形显示接口… 3

7.3           数据导出接口… 5

7.4           服务组件接口… 6

7.5           插件管理器… 8

7.6           框架整合、重构… 9

7.7           小结… 10

第七回     外部接口的计划性

开发者不仅可以二次开发设备驱动,还足以二次开发自定义图形显示形式、

自打定义数据导出格式和多作业服务,并且配备驱动接口及当时三栽接口进行事件响应与数量交互。

7.1    插件接口

   
图形显示接口、数据导出接口及服务组件接口都持续自统一之插件接口(IPlugins),主要是方便管理和扩张。插件接口的代码定义如下:

public interface IPlugins : IDisposable
{
       /// <summary>
       /// 服务Key,要求唯一
       /// </summary>
       string ThisKey { get; }

       /// <summary>
       /// 服务名称
       /// </summary>
       string ThisName { get; }

       /// <summary>
       /// 更新设备数据,用于接收来自设备驱动的数据信息
       /// </summary>
       /// <param name="devid">设备ID</param>
       /// <param name="obj">设备对象</param>
       void UpdateDevice(int devid, object obj);

       /// <summary>
       /// 移除设备,当框架平台删除设备的时候进行响应。
       /// </summary>
       /// <param name="devid">设备ID</param>
       void RemoveDevice(int devid);
}

    
图形显示接口、数据导出接口及劳务组件接口和插件接口的存续关系而下图:

C# 1 

    
设备驱动只要有更新数据就见面通过波将多少传送到UpdateDevice接口里,这个接口内部到底怎么处理了是因为二次开发者来支配。当接触设备驱动之删减事件,就会见调用RemoveDevice接口,以删、释放资源。

7.2    图形显示接口

   
框架平台通讯设备驱动把数据搜集上的独自是故数据,经过处理后如若形成工作数据,那么尽管会见发显、分析、查询、打印、报表等事务职能,并且针对同的数信息,不同之用户要求处理的方法发生死怪之两样。这部分效益转移异常十分,但是还要非能够每次来改观就要去窜框架平台,因为框架是“稳定”的一些,形成版本控制后就是未任更改了。

  
基于这样考虑,作为框架而提供一个建制,能够加载二次开发者设计之UI窗体。用于展示采集终端设备的数码,可以把不同类型设备的多寡为多种形式集成显示在不同界面及。方便为用户提供多种的、更要好之人机交互界面。

  
首先,框架平台不克当起步之时光即便显得所有UI窗体,具体要来得谁UI窗体完全出于用户自己决定,所以,我们若透过配备文件之款型拿二次开发的机件信息加载到菜单里,提供可点的亮事件入口,如下图:

C# 2 

   其次,那么为安的形式展示窗体呢?像许多管理体系一样,我们利用Form
Tab的道展示,如下图:

 C# 3

  
UI部分之筹划虽如此了,但是自从业务角度我们如果考虑个别码事:(1)在二次开发的窗体上单击鼠标右键事件不时只要展示相应设备的上下文菜单,也就是说要调用IRunDevice设备驱动的ShowContextMenu函数,要于IGraphicsShow接口中提供MouseRightContextMenuHandler事件,以令调用ShowContextMenu函数显示上下文菜单。(2)当单击菜单项的时,会盖Tab的花样显得窗体,但是当数单击后是无克数显示UI窗体的,所以要生一个管理器(GraphicsShowController),通过接口的ThisKey属性判断时形的UI窗体是否留存,如果非存在,那么就算显得该UI窗体,否则退出操作;既然生一个管理器,当关闭窗体的时段,需要把该UI窗体实例从管理器中剔除掉,避免无法再次展示窗体,因为她直接留存吃管理器中。所以还用以接口中定义一个停歇窗体的风波GraphicsShowClosedHandler,释放窗体资源后由管理器中去除实例。

   至此,自定义窗体显示有就是规划完毕了,IGraphicsShow接口定义代码如下:

public interface IGraphicsShow : IPlugins
{
       /// <summary>
       ///    关闭窗体事件时发生
       /// </summary>
       event GraphicsShowClosedHandler GraphicsShowClosedHandler;

       /// <summary>
       ///     单击右键
       /// </summary>
       event MouseRightContextMenuHandler MouseRightContextMenuHandler;
}

7.3    数据导出接口

   
在数集成系统项目中,要么是合二为一其他厂家的配备数量,要么是外厂家集成自己下的设施数量,在无统一之科班前提下,会出各种集成数据的格式。为了满足此类的场景,为设备导出数据专门计划了接口,开发者可以连续该接口,设备在处理了数据后,会把数据自动传输至拖欠接口,可以依照规定之数码格式进行输出了。

     对配备驱动实时数据导出,可以拿同像样的配备数量导出成又数量格式。

    
导出数插件可以由此配备文件进行加载,只要设备驱动有数量更新,就将多少通过波传递让导出数据接口。不在部署文件被安排插件信息,则程序不进行加载,不开展导出操作。所以,这种事务性的服务不需界面来完成,可以当宿主程序启动时经过代码来就。

    IExportData数据导出接口代码定义如下:

public interface IExportData:IPlugins
{
       /// <summary>
       /// 格式化数据
       /// </summary>
       /// <param name="devid"></param>
       /// <param name="obj"></param>
       /// <returns></returns>
       object FormatDataString(int devid, object obj, DeviceType devicetype);
}

7.4    服务组件接口

    
围绕着装备驱动模块采集的数额,根据应用场、需求,可以提供多应用服务,例如:数据转发服务、4-20mA服务、短信服务、LED服务、OPC服务、以及错综复杂的实时数据解析服务等。在维系数据实时性、稳定性的前提下,服务接口可以供合的劳务体制,方便开发者进行二次开发。

    
服务插件的劳务措施,这种劳动是旷日持久运行的事务性任务,所以更复杂一些。

   
有些服务要随宿主程序启动而自动运行,有些服务得人工手动启动才运行。在宿主程序启动之上经过配制文件要把劳务的信息加载到菜单上,菜单里展示的劳务或有些已经起步了;有些要经过单击操作,显示窗体并填写必要的信息后才可能启动。所以,宿主程序及劳务插件不是光为交互,而是双向数据、事件交互。

   
IappService服务接口于IPlugins基础及开展扩展,增加了函数、属性和事件,代码定义如下:

public interface IAppService : IPlugins
{
        /// <summary>
       ///     启动服务
       /// </summary>
       void StartService();

       /// <summary>
       ///     是否自动启动
       /// </summary>
       bool IsAutoStart { set; get; }

         /// <summary>
       ///     服务类型
       /// </summary>
       ServiceType ServiceType { set; get; }

       /// <summary>
       ///     单击事件,关联菜单
       /// </summary>
       void OnClick();

       /// <summary>
       ///     释放服务
       /// </summary>
       void ReleaseService();

       /// <summary>
       ///     写日志事件
       /// </summary>
       event WriteLogHandler WriteLogHandler;
}

(1)   
StartService函数:当服务的开行方式(IsAutoStart)为”自动启动”的时候,框架平台于加载服务之时刻,会自行调用这个接口函数,表示对劳动开展启动操作。

(2)   
IsAutoStart属性:服务启动项目,标识是否遵循框架平台启动而自动启动,也不怕是标识是否会调用StartService接口函数。

(3)   
ServiceType属性:服务类型分为:显示模式及隐身模式。显示模式之服务会在框架平台的食谱上加载以ThisName标识的劳务号;隐藏模式不会见以框架平台的食谱中加载服务号,可以管该类服务的IsAutoStart属性设置也自行启动,框架平台启动后自动启动服务。代码定义如下:

public enum ServiceType
{
    [EnumDescription("显示模式")]
    Show = 0x00,
    [EnumDescription("隐藏模式")]
    Hide = 0x01
}

(4)   
OnClick事件函数:当服务类型ServiceType为“显示模式“的早晚,服务号会被加载到菜单中,当单击服务菜单项的时,会调用相应服务的OnClick接口函数,可以在是接口函数里调用窗体。

(5)   
ReleaseService函数:当关闭框架平台及人工手动停止服务后,可以由此此函数释放服务资源。

 另外,对于服务组件接口还提到到服务状态,标识服务以运作的过程遭到居于

于什么流,例如:服务在启动、服务已经起步、服务着周转、服务正在止、服务已休等等。因为根据服务之事情复杂度不同,服务的状态也说不定两样,所以服务状态的概念交给了二次开发者友好定义。

7.5    插件管理器

   
图形显示接口、数据导出接口及劳动组件接口都分别发生一个接口管理器,负责对各职能接口进行管制,它们都延续自IBaseManager<TKey,
TValue>接口。继承关系图如下:

 C# 4

7.6    框架整合、重构

   
总的来说,框架平台涉及到四独重要的接口:IRunDevice设备驱动接口、IGraphicsShow图形显示接口、IExportData数据导出接口及IAppService服务组件接口。它们现在之累结构涉及如果下图:

C# 5 

其实继承这四只接口二次开发的模块都是以插件的款式加载到框架平台,框架平台在结构上实现了一整套底运行机制。对点的后续关系结构图进行分析,还有做、重构的后路,进一步明晰接口关系、整合代码,提高框架的不过扩展性,计划重构后的接口继承关系要下图:

C# 6 

    
所有可扩大的接口都持续自一个插件接口,再分出其他的事情职能接口,类似于C#言语中负有实体都累自Object一样。

7.7    小结

  C# 
框架内实际上是针对性接口进行直接调用,接口及接口之间的匹配而实现了平等效仿协调机制,从而逐步实现了一个框架平台。作为接口实际上是促成了二次开发与框架平台对接的相同种植形式,并保证在框架平台的和谐机制被实现特定的事情功能。所以,任何框架,从顶层来拘禁还是对准接口的筹划。

 

作者:唯笑志在

mail:504547114@qq.com

QQ:504547114

.NET开发技术联盟:54256083

文档下载:http://pan.baidu.com/s/1pJ7lZWf

官网址:http://www.bmpj.net

相关文章