网站开发费,帝国cms 7.2 门户网站模版,wordpress会话已过期,wordpress 主机选择在上位机开发领域中#xff0c;C#与C两种语言是应用最多的两种开发语言#xff0c;在C语言中#xff0c;与之搭配的前端框架通常以QT最为常用#xff0c;而C#语言中#xff0c;与之搭配的前端框架是Winform和WPF两种框架。今天我们主要讨论一下C#和WPF这一对组合在上位机开…在上位机开发领域中C#与C两种语言是应用最多的两种开发语言在C语言中与之搭配的前端框架通常以QT最为常用而C#语言中与之搭配的前端框架是Winform和WPF两种框架。今天我们主要讨论一下C#和WPF这一对组合在上位机开发过程中的实际应用。 一、模块化概念
开发一套完善的软件离不开良好的架构而说到架构在C#中Prism框架与WPF的配合可谓大大提高了开发效率原因如下Prism框架中有IOC容器分别是unity和dryiocIOC容器负责管理类的生命周期另外Prism框架的WPF版本还有区域管理器RegionManager、事件聚合器(EventAggregator)对话框服务(DialogService)、适配器(Adapter)、模块管理器(ModuleManager)等。
除了模块管理器IModule接口其他几个重要的管理器都是为了更方便实现界面呈现及业务逻辑开发那么模块管理器的功能是什么呢程序员往往会将一个大型的软件项目拆分成小项目模块比如上位机系统中会接入各种硬件工业相机、PLC、数据采集器、扫码枪、控制卡等良好的软件架构思路是将同一种类型的硬件抽象成一个硬件抽象类然后不同型号的硬件与继承这个抽象基类实现各自硬件的业务逻辑加载硬件、打开硬件、使用硬件、关闭硬件要实现这些开发Prism的模块就派上用场了。也就是将硬件进行模块化由Prism框架去实现及统一管理。
当然除了上述的例子软件的基础库软件的业务逻辑同样可以拆成不同的模块最后由Prism框架统一管理。
二、反应式概念
C#语言为我们提供了一个IObservable接口,也就是设计模式中的观察者模式在C#语言中的具体实现。ReactiveUI框架对此接口进行了扩展使之变得易用。
在传统的软件开发中我们对某个属性发生变化后要进行下一步的相应处理时会主动对判断这个属性的值然后实现相应的代码逻辑。而在观察者模式下我们会写一个观察者由这个观察者去“实时”观察这个属性一旦观察到属性值发生了改变会抛出一个通知。
那么通知谁呢
谁去订阅了这个观察者其回调函数都会被触发一次调用从而达到一个目的即被观察的那个属性发生改变后会执行事先写好的“某一段代码逻辑”。
这样的开发模式在写上位机软件时非常可靠和易用因为上位机可能会实时监测下位机的某些参数变化一旦硬件参数发生变化软件要相应给出动作做出反应这种反应我们称为反应式编程。
三、软件架构
良好的架构可以帮助开发人员提高开发效率减少bug的发生增强系统的稳定性。我们可以将一个上位机系统分成如下几个方面
第一是具有通用性的基础类库这一些类与具体的业务逻辑无关只帮助处理业务过程中的数据通常是一些帮助类或者语言包本地设置等等
第二、是硬件模块上位机开发离不开硬件的接入而不同的上位机系统其接入的硬件也是五花入门比如MES系统可能最常见的硬件是PLC、扫码枪而控制系统则控制卡与各种被控设备的信息反馈最为常见AOIAXI等工业视觉检测方面则接入的硬件除了PLC和控制卡还有工业相机光机光源等等或者医学方机的上位机包含了更多的非标设备。
如此多的硬件如何有序的接入到上位机呢
答案是最好将同一种类型的硬件抽象成一个基类通过接口、抽象类、继承等方面的编程手段为每一种不同厂家或不同型号的硬件创建一个项目将这些项目看成是一个个独立的模块像小孩子玩积木游戏一般将硬件“堆积”到上位机中一旦某个型号的硬件想被替换直接将新硬件的模块加载到上位机即可。
第三是数据库模块。由于上位机系统运行过程中需要处理大量的数据其处理结果需要持久化一般采用文件或数据库的形式进行保存。而数据库的操作就可以单独形成一个模块这个模块包含抽象类模块和具体的数据库操作类模块因为最终要保存的数据库可能是mysql、oracle、mssql等不同的数据库所以最好的方式是为不同类型的数据库的增删改查等操作开发各自的模块以便管理和替换。
第四是业务逻辑模块。这一类型的模块会随着不同行业的上位机功能需求模块的多少会有所不同。尽量将复杂的业务逻辑拆分成独立的小型业务模块模块与模块之间采用接口通讯这样做的好处是减少代码间的耦合程度尽量开发一些职责单一的类达到具有良好扩展性的代码架构。 四、详细设计
在聊完了大致的软件架构我们来谈谈具体的模块设计。利用vs2022开发软件一个模块就是一个项目有的项目是类库有的是用户控件有的是窗体还有的是C项目具体的开发如下所示
为了更清晰明了每个项目的含义我们制定一套项目模块的命名规则公司名架构分类名模块名比如Company.Application.Main表示应用层的主模块。
第一、程序入口项目
Company.Application.Shell这是上位机系统的入口其实是一个窗体启动时加载的第一个窗体其内容由主模块进行填充。
第二、应用层模块
Company.Application.Main这是上位机的主模块由Prism框架的区域管理器将此模块导航到Shell窗体中。
Company.Application.Config这是上位机的系统配置模块。
Company.Application.Login这是上位机的用户登录模块。
Company.Application.Initialize这是上位机的硬件加载模块当然一些软件方面的加载也可放其中。
Company.Application.Share这是上位机的共享模块此模块的作用非常重要负责各个模块的数据通讯。
Company.Application.Menu这是上位机的菜单模块负责菜单生成或管理。
Company.Application.More这个表示其它模块根据上位机功能而定。
第三、核心层模块
Company.Core这是上位机的核心模块与主业务无关提供一些基础帮助类全局类等比如Json文件的序列化与反序列化对话框管理器、缓存管理、本地语言包管理、各种helper类型等。
Company.Logger这是上位机的日志模块可以采用NLog或Log4net等常用组件此模块也与主业务无关被其它所有模块所引用负责打印程序错误信息或调试信息。
Company.UI这是上位机关于UI的资源模块如WPF的模板样式定义、程序所引用的图标、图像、字体库、语言包、转换器用户控件等。
第四、硬件层模块
Company.Hardware.Camera这是上位机的工业相机抽象类模块负责定义一台相机的功能定义相机的配置参数和操作业务流程如打开相机、使用相机、关闭相机。
Company.Hardware.Camera.HIK表示一台海康工业相机它继承了相机抽象类并实现其自身的API调用。
Company.Hardware.Camera.Other表示其它工业相机other要换成具体的相机名称说明可能无限扩展其它厂家或其它型号的相机。
Company.Hardware.ControlCard这是上位机的控制卡抽象基类负责定义一张控制卡的功能但不实现具体的操作流程只规定操作接口具体操作由子类实现。
Company.Hardware.ControlCard.DMC2610比如雷赛运动控制卡DMC2610。
Company.Hardware.ControlCard.ADTech632XE比如众为兴运动控制卡632XE。
其它的硬件都可以采用上述的命名方式去扩展。
第五、数据库模块
Company.Database.Core这个模块定义了数据库的操作接口仓储层的抽象类型 等。
Company.Database.EF这是采用EF框架去对数据库进行增删改查的模块其中的类型都继承于Core中的抽象类。
接下来用一张结构图演示详细的上位机架构 上位机开发架构设计高清大图链接地址
上位机课程思维导图
https://www.processon.com/view/link/64a10419111c1d7d8a19db04
重庆教主的VIP课程
WPF中关于Prism框架的学习课程
https://edu.51cto.com/course/33880.html
C#WPF上位机开发课程模块化与反应式编程
https://edu.51cto.com/course/34143.html
C#WPF项目实战MVVM模式开发《超市管理系统》
https://edu.51cto.com/course/33794.html
作者重庆教主