国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

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

這篇具有很好參考價值的文章主要介紹了C#+WPF上位機開發(fā)(模塊化+反應(yīng)式)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

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

C#+WPF上位機開發(fā)(模塊化+反應(yīng)式),WPF,C#,Opencv,c#,wpf,開發(fā)語言

一、模塊化概念

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

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

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

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

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

那么,通知誰呢?

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

這樣的開發(fā)模式在寫上位機軟件時非常可靠和易用,因為上位機可能會實時監(jiān)測下位機的某些參數(shù)變化,一旦硬件參數(shù)發(fā)生變化,軟件要相應(yīng)給出動作(做出反應(yīng)),這種反應(yīng),我們稱為反應(yīng)式編程。

三、軟件架構(gòu)

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

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

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

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

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

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

第四,是業(yè)務(wù)邏輯模塊。這一類型的模塊會隨著不同行業(yè)的上位機功能需求,模塊的多少會有所不同。盡量將復(fù)雜的業(yè)務(wù)邏輯拆分成獨立的小型業(yè)務(wù)模塊,模塊與模塊之間采用接口通訊,這樣做的好處是:減少代碼間的耦合程度,盡量開發(fā)一些職責(zé)單一的類,達到具有良好擴展性的代碼架構(gòu)。
C#+WPF上位機開發(fā)(模塊化+反應(yīng)式),WPF,C#,Opencv,c#,wpf,開發(fā)語言
四、詳細(xì)設(shè)計

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

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

第一、程序入口項目

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

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

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

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

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

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

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

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

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

第三、核心層模塊

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

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

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

第四、硬件層模塊

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

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

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

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

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

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

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

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

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

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

接下來,用一張結(jié)構(gòu)圖,演示詳細(xì)的上位機架構(gòu)
C#+WPF上位機開發(fā)(模塊化+反應(yīng)式),WPF,C#,Opencv,c#,wpf,開發(fā)語言
上位機開發(fā)架構(gòu)設(shè)計高清大圖鏈接地址 :

上位機課程思維導(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上位機開發(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

作者:重慶教主文章來源地址http://www.zghlxwxcb.cn/news/detail-632833.html

到了這里,關(guān)于C#+WPF上位機開發(fā)(模塊化+反應(yīng)式)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • WPF+Prism 模塊化編程(一)

    WPF+Prism 模塊化編程(一)

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 1、新建WPF項目,創(chuàng)建基于 .NET Framework 框架的應(yīng)用程序,項目名稱為 PrismModelDemo,創(chuàng)建步驟如下所示。 項目創(chuàng)建完成后,新建Views文件夾和ViewModels 文件夾,移動 MainWindow.xaml 至 Views文件下,在ViewModels文件中

    2024年04月09日
    瀏覽(103)
  • WPF如何構(gòu)建MVVM+模塊化的桌面應(yīng)用

    WPF如何構(gòu)建MVVM+模塊化的桌面應(yīng)用

    模塊化是一種分治思想,不僅可以分離復(fù)雜的業(yè)務(wù)邏輯,還可以進行不同任務(wù)的分工。模塊與模塊之間相互獨立,從而構(gòu)建一種松耦合的應(yīng)用程序,便于開發(fā)和維護。 .NET 6 + WPF + Prism (v8.0.0.1909) + HandyControl (v3.4.0) 什么是MVVM Model-View-ViewModel? 是一種軟件架構(gòu)設(shè)計,它是一種簡化

    2024年02月13日
    瀏覽(31)
  • 79、SpringBoot 整合 R2DBC --- R2DBC 就是 JDBC 的 反應(yīng)式版本, R2DBC 是 JDBC 的升級版。

    79、SpringBoot 整合 R2DBC --- R2DBC 就是 JDBC 的 反應(yīng)式版本, R2DBC 是 JDBC 的升級版。

    R2DBC 就是 JDBC 的 反應(yīng)式版本, R2DBC 是 JDBC 的升級版。 R2DBC 是 Reactive Relational Database Connectivity (關(guān)系型數(shù)據(jù)庫的響應(yīng)式連接) 的縮寫 反應(yīng)式的就是類似于消息發(fā)布者和訂閱者,有消息就進行推送。R2DBC中DAO接口中方法的返回值是 Flux 或 Mono 因此,反應(yīng)式的 R2DBC ,是不存在 【分

    2024年02月07日
    瀏覽(25)
  • 什么是模塊化?為什么要進行模塊化開發(fā)?

    模塊化是一種軟件開發(fā)的設(shè)計模式,它將一個大型的軟件系統(tǒng)劃分成多個獨立的模塊,每個模塊都有自己的功能和接口,并且能夠與其他模塊獨立地工作。 ?先來一段八股文 模塊化開發(fā)可以帶來以下好處: 提高代碼的復(fù)用性:模塊化可以將代碼劃分成可重用的部分,降低代

    2023年04月12日
    瀏覽(32)
  • js模塊化開發(fā)

    js模塊化開發(fā)

    ? 到底什么是模塊化、模塊化開發(fā)呢? ? 事實上模塊化開發(fā)最終的目的是將程序劃分成一個個小的結(jié)構(gòu); ? 這個結(jié)構(gòu)中編寫屬于自己的邏輯代碼,有自己的作用域,定義變量名詞時不會影響到其他的結(jié)構(gòu); ? 這個結(jié)構(gòu)可以將自己希望暴露的變量、函數(shù)、對象等導(dǎo)出給其結(jié)

    2024年02月13日
    瀏覽(28)
  • 深入理解JavaScript模塊化開發(fā)

    深入理解JavaScript模塊化開發(fā)

    前言: 隨著JavaScript應(yīng)用程序的復(fù)雜性不斷增加,模塊化開發(fā)成為了一種必備的技術(shù)。通過將代碼劃分為模塊,我們可以提高代碼的可維護性、可重用性和可擴展性。在本文中,我們將深入探討JavaScript模塊化開發(fā)的概念、優(yōu)勢和不同的模塊化方案。 模塊化開發(fā)是將一個大型應(yīng)

    2024年02月08日
    瀏覽(42)
  • Vue的模塊化開發(fā)初探

    Vue的模塊化開發(fā)初探

    Vue是一個漸進式JavaScript框架,可以按需引入部分功能,而不必全量引入整個框架。 2.1 下載必須模塊 在瀏覽器輸入: https://unpkg.com/vue@3/dist/vue.esm-browser.js ,右鍵另存為,保存到demo.html文件同級目錄下。 2.2 安裝Live Server插件 在VSCode插件市場搜索Live Server并安裝,如下圖: 2.

    2024年04月10日
    瀏覽(27)
  • 前端基礎(chǔ)(Vue的模塊化開發(fā))

    前端基礎(chǔ)(Vue的模塊化開發(fā))

    ? 前言 :前面學(xué)習(xí)了前端HTML、CSS樣式、JavaScript以及Vue框架的簡單適用,接下來運用前端模塊化編程的思想,繼續(xù)學(xué)習(xí)Vue框架,完成自己項目項目的搭建。 目錄 響應(yīng)式基礎(chǔ) ref?reactive 學(xué)習(xí)成果展示 Vue項目搭建 搭建自己的vue項目 總結(jié)? 關(guān)于ref和reactive,官方解釋如下,另外一

    2024年02月12日
    瀏覽(27)
  • Python面向?qū)ο缶幊蹋瑢崿F(xiàn)模塊化開發(fā)

    面向?qū)ο缶幊蹋∣bject Oriented Programming,OOP)是一種編程范式,它將真實世界中的事物抽象成程序中的對象,并通過對象之間的相互作用來完成程序的邏輯。 封裝 (Encapsulation) 封裝是指把數(shù)據(jù)和行為結(jié)合成一個相對獨立的整體,防止程序中其他部分直接訪問或修改這個整體,而

    2024年02月05日
    瀏覽(96)
  • 【Unity】程序集Assembly模塊化開發(fā)

    【Unity】程序集Assembly模塊化開發(fā)

    筆者按:使用Unity版本為2021.3LTS,與其他版本或有異同。請僅做參考 一、簡述。 本文是筆者在學(xué)習(xí)使用Unity引擎的過程中,產(chǎn)學(xué)研的一個筆記。由筆者根據(jù)官方文檔Unity User Manual 2021.3 (LTS)/腳本/Unity 架構(gòu)/腳本編譯/程序集定義相關(guān)部分結(jié)合自身經(jīng)驗所做,有不足之處,還請指正

    2024年02月15日
    瀏覽(92)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包