最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

C#+WPF上位機(jī)開發(fā)(模塊化+反應(yīng)式)

2023-08-01 10:43 作者:重慶教主  | 我要投稿

在上位機(jī)開發(fā)領(lǐng)域中,C#與C++兩種語言是應(yīng)用最多的兩種開發(fā)語言,在C++語言中,與之搭配的前端框架通常以QT最為常用,而C#語言中,與之搭配的前端框架是Winform和WPF兩種框架。今天我們主要討論一下C#和WPF這一對組合在上位機(jī)開發(fā)過程中的實際應(yīng)用。


一、模塊化概念

開發(fā)一套完善的軟件,離不開良好的架構(gòu),而說到架構(gòu),在C#中,Prism框架與WPF的配合可謂大大提高了開發(fā)效率,原因如下:Prism框架中有IOC容器(分別是unity和dryioc),IOC容器負(fù)責(zé)管理類的生命周期;另外,Prism框架的WPF版本還有區(qū)域管理器(RegionManager)、事件聚合器(EventAggregator),對話框服務(wù)(DialogService)、適配器(Adapter)、模塊管理器(ModuleManager)等。

除了模塊管理器(IModule接口),其他幾個重要的管理器都是為了更方便實現(xiàn)界面呈現(xiàn)及業(yè)務(wù)邏輯開發(fā),那么模塊管理器的功能是什么呢?程序員往往會將一個大型的軟件項目拆分成小項目(模塊),比如上位機(jī)系統(tǒng)中會接入各種硬件(工業(yè)相機(jī)、PLC、數(shù)據(jù)采集器、掃碼槍、控制卡等),良好的軟件架構(gòu)思路是將同一種類型的硬件抽象成一個硬件抽象類,然后,不同型號的硬件與繼承這個抽象基類,實現(xiàn)各自硬件的業(yè)務(wù)邏輯(加載硬件、打開硬件、使用硬件、關(guān)閉硬件),要實現(xiàn)這些開發(fā),Prism的模塊就派上用場了。也就是將硬件進(jìn)行模塊化,由Prism框架去實現(xiàn)及統(tǒng)一管理。

當(dāng)然,除了上述的例子,軟件的基礎(chǔ)庫,軟件的業(yè)務(wù)邏輯,同樣可以拆成不同的模塊,最后由Prism框架統(tǒng)一管理。


二、反應(yīng)式概念

C#語言為我們提供了一個IObservable<T>接口,也就是設(shè)計模式中的觀察者模式在C#語言中的具體實現(xiàn)。ReactiveUI框架對此接口進(jìn)行了擴(kuò)展,使之變得易用。

在傳統(tǒng)的軟件開發(fā)中,我們對某個屬性發(fā)生變化后要進(jìn)行下一步的相應(yīng)處理時,會主動對判斷這個屬性的值,然后實現(xiàn)相應(yīng)的代碼邏輯。而在觀察者模式下,我們會寫一個觀察者,由這個觀察者去“實時”觀察這個屬性,一旦觀察到屬性值發(fā)生了改變,會拋出一個通知。

那么,通知誰呢?

誰去訂閱了這個觀察者,其回調(diào)函數(shù)都會被觸發(fā)一次調(diào)用,從而達(dá)到一個目的,即被觀察的那個屬性發(fā)生改變后會執(zhí)行事先寫好的“某一段代碼邏輯”。

這樣的開發(fā)模式在寫上位機(jī)軟件時非??煽亢鸵子茫驗樯衔粰C(jī)可能會實時監(jiān)測下位機(jī)的某些參數(shù)變化,一旦硬件參數(shù)發(fā)生變化,軟件要相應(yīng)給出動作(做出反應(yīng)),這種反應(yīng),我們稱為反應(yīng)式編程。


三、軟件架構(gòu)

良好的架構(gòu),可以幫助開發(fā)人員提高開發(fā)效率,減少bug的發(fā)生,增強系統(tǒng)的穩(wěn)定性。我們可以將一個上位機(jī)系統(tǒng)分成如下幾個方面:

第一是具有通用性的基礎(chǔ)類庫,這一些類與具體的業(yè)務(wù)邏輯無關(guān),只幫助處理業(yè)務(wù)過程中的數(shù)據(jù),通常是一些幫助類,或者語言包,本地設(shè)置等等;

第二、是硬件模塊,上位機(jī)開發(fā)離不開硬件的接入,而不同的上位機(jī)系統(tǒng),其接入的硬件也是五花入門,比如MES系統(tǒng),可能最常見的硬件是PLC、掃碼槍;而控制系統(tǒng),則控制卡與各種被控設(shè)備的信息反饋最為常見;AOI,AXI等工業(yè)視覺檢測方面,則接入的硬件除了PLC和控制卡,還有工業(yè)相機(jī),光機(jī),光源等等;或者醫(yī)學(xué)方機(jī)的上位機(jī),包含了更多的非標(biāo)設(shè)備。

如此多的硬件,如何有序的接入到上位機(jī)呢?

答案是,最好將同一種類型的硬件抽象成一個基類,通過接口、抽象類、繼承等方面的編程手段,為每一種不同廠家或不同型號的硬件創(chuàng)建一個項目,將這些項目看成是一個個獨立的模塊,像小孩子玩積木游戲一般,將硬件“堆積”到上位機(jī)中,一旦某個型號的硬件想被替換,直接將新硬件的模塊加載到上位機(jī)即可。

第三,是數(shù)據(jù)庫模塊。由于上位機(jī)系統(tǒng)運行過程中需要處理大量的數(shù)據(jù),其處理結(jié)果需要持久化,一般采用文件或數(shù)據(jù)庫的形式進(jìn)行保存。而數(shù)據(jù)庫的操作就可以單獨形成一個模塊,這個模塊包含抽象類模塊和具體的數(shù)據(jù)庫操作類模塊,因為最終要保存的數(shù)據(jù)庫可能是mysql、oracle、mssql等不同的數(shù)據(jù)庫,所以最好的方式是為不同類型的數(shù)據(jù)庫的增刪改查等操作開發(fā)各自的模塊,以便管理和替換。

第四,是業(yè)務(wù)邏輯模塊。這一類型的模塊會隨著不同行業(yè)的上位機(jī)功能需求,模塊的多少會有所不同。盡量將復(fù)雜的業(yè)務(wù)邏輯拆分成獨立的小型業(yè)務(wù)模塊,模塊與模塊之間采用接口通訊,這樣做的好處是:減少代碼間的耦合程度,盡量開發(fā)一些職責(zé)單一的類,達(dá)到具有良好擴(kuò)展性的代碼架構(gòu)。

四、詳細(xì)設(shè)計

在聊完了大致的軟件架構(gòu),我們來談?wù)劸唧w的模塊設(shè)計。利用vs2022開發(fā)軟件,一個模塊就是一個項目,有的項目是類庫,有的是用戶控件,有的是窗體,還有的是C++項目,具體的開發(fā)如下所示:

為了更清晰明了每個項目的含義,我們制定一套項目(模塊)的命名規(guī)則:公司名+架構(gòu)分類名+模塊名,比如Company.Application.Main,表示應(yīng)用層的主模塊。

第一、程序入口項目

Company.Application.Shell,這是上位機(jī)系統(tǒng)的入口,其實是一個窗體,啟動時加載的第一個窗體,其內(nèi)容由主模塊進(jìn)行填充。

第二、應(yīng)用層模塊

Company.Application.Main,這是上位機(jī)的主模塊,由Prism框架的區(qū)域管理器將此模塊導(dǎo)航到Shell窗體中。

Company.Application.Config,這是上位機(jī)的系統(tǒng)配置模塊。

Company.Application.Login,這是上位機(jī)的用戶登錄模塊。

Company.Application.Initialize,這是上位機(jī)的硬件加載模塊,當(dāng)然一些軟件方面的加載也可放其中。

Company.Application.Share,這是上位機(jī)的共享模塊,此模塊的作用非常重要,負(fù)責(zé)各個模塊的數(shù)據(jù)通訊。

Company.Application.Menu,這是上位機(jī)的菜單模塊,負(fù)責(zé)菜單生成或管理。

Company.Application.More,這個表示其它模塊,根據(jù)上位機(jī)功能而定。

第三、核心層模塊

Company.Core,這是上位機(jī)的核心模塊,與主業(yè)務(wù)無關(guān),提供一些基礎(chǔ)幫助類,全局類等,比如Json文件的序列化與反序列化,對話框管理器、緩存管理、本地語言包管理、各種helper類型等。

Company.Logger,這是上位機(jī)的日志模塊,可以采用NLog或Log4net等常用組件,此模塊也與主業(yè)務(wù)無關(guān),被其它所有模塊所引用,負(fù)責(zé)打印程序錯誤信息或調(diào)試信息。

Company.UI,這是上位機(jī)關(guān)于UI的資源模塊,如WPF的模板樣式定義、程序所引用的圖標(biāo)、圖像、字體庫、語言包、轉(zhuǎn)換器,用戶控件等。

第四、硬件層模塊

Company.Hardware.Camera,這是上位機(jī)的工業(yè)相機(jī)抽象類模塊,負(fù)責(zé)定義一臺相機(jī)的功能,定義相機(jī)的配置參數(shù)和操作業(yè)務(wù)流程(如打開相機(jī)、使用相機(jī)、關(guān)閉相機(jī))。

Company.Hardware.Camera.HIK,表示一臺??倒I(yè)相機(jī),它繼承了相機(jī)抽象類,并實現(xiàn)其自身的API調(diào)用。

Company.Hardware.Camera.Other,表示其它工業(yè)相機(jī),other要換成具體的相機(jī)名稱,說明可能無限擴(kuò)展其它廠家或其它型號的相機(jī)。

Company.Hardware.ControlCard,這是上位機(jī)的控制卡抽象基類,負(fù)責(zé)定義一張控制卡的功能,但不實現(xiàn)具體的操作流程,只規(guī)定操作接口,具體操作由子類實現(xiàn)。

Company.Hardware.ControlCard.DMC2610,比如雷賽運動控制卡DMC2610。

Company.Hardware.ControlCard.ADTech632XE,比如眾為興運動控制卡632XE。

其它的硬件都可以采用上述的命名方式去擴(kuò)展。

第五、數(shù)據(jù)庫模塊

Company.Database.Core,這個模塊定義了數(shù)據(jù)庫的操作接口,倉儲層的抽象類型 等。

Company.Database.EF,這是采用EF框架去對數(shù)據(jù)庫進(jìn)行增刪改查的模塊,其中的類型都繼承于Core中的抽象類。

接下來,用一張結(jié)構(gòu)圖,演示詳細(xì)的上位機(jī)架構(gòu)

上位機(jī)開發(fā)架構(gòu)設(shè)計高清大圖鏈接地址 :

上位機(jī)課程思維導(dǎo)圖

https://www.processon.com/view/link/64a10419111c1d7d8a19db04

重慶教主的VIP課程

WPF中關(guān)于Prism框架的學(xué)習(xí)課程

https://edu.51cto.com/course/33880.html


C#+WPF上位機(jī)開發(fā)課程(模塊化與反應(yīng)式編程)

https://edu.51cto.com/course/34143.html


C#+WPF項目實戰(zhàn)MVVM模式開發(fā)《超市管理系統(tǒng)》

https://edu.51cto.com/course/33794.html


C#+WPF上位機(jī)開發(fā)(模塊化+反應(yīng)式)的評論 (共 條)

分享到微博請遵守國家法律
夏河县| 新竹县| 城口县| 怀集县| 金门县| 肥东县| 通河县| 上栗县| 青海省| 泽库县| 赣州市| 静海县| 丹凤县| 儋州市| 永德县| 福海县| 楚雄市| 绥棱县| 青龙| 通渭县| 六盘水市| 遂溪县| 辽阳县| 金溪县| 三门峡市| 高碑店市| 通州区| 土默特右旗| 界首市| 镇远县| 临桂县| 诸城市| 河北省| 蛟河市| 绍兴市| 永康市| 哈巴河县| 玉溪市| 兴仁县| 安吉县| 唐山市|