女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是MVC框架

嵌入式應(yīng)用研究院 ? 來源:嵌入式應(yīng)用研究院 ? 作者:嵌入式應(yīng)用研究院 ? 2022-11-01 10:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

筆者在職場工作多年,維護(hù)過屎山級別的項目代碼,也參與過大大小小的軟件開發(fā)。我逐漸明白了寫代碼最重要的并不是炫技,而是讓其他維護(hù)這個項目的人能夠更快的上手去拓展項目的功能,以便能夠更好的傳承下去。

在實際的嵌入式應(yīng)用開發(fā)過程中,我們常常能夠聽到軟件系統(tǒng)的分層設(shè)計,根據(jù)不同的產(chǎn)品軟件設(shè)計,它們可能擁有應(yīng)用層、系統(tǒng)層、驅(qū)動層等等。在我看來,這些層的描述太大,但是它不得不存在;因為它能夠從宏觀上讓每個了解它的人知道它到底有什么東西,大部分情況下給人感覺是:哇,好牛逼!然后,就沒有然后了。

8a8cf0d6-5942-11ed-a3b6-dac502259ad0.png

實際上,真正能夠體現(xiàn)設(shè)計的牛逼并不是簡單的描述幾個層就可以了,真正的設(shè)計,它至少擁有兩個面的維度,即數(shù)據(jù)平面、控制平面。當(dāng)然,如果我們分得更細(xì)一點,它可以是數(shù)據(jù)平面、控制平面和管理平面。至于怎么定義每個平面的作用,早在1979年,就已經(jīng)有一位叫做Trygve Reenskaug的大佬為我們設(shè)計好了所謂的MVC框架。直到如今,MVC框架廣泛應(yīng)用于現(xiàn)代應(yīng)用軟件設(shè)計中,也是嵌入式應(yīng)用軟件設(shè)計中最常用的設(shè)計模式之一。那么,什么是MVC框架呢?

1、MVC框架

MVC框架,是軟件系統(tǒng)模塊化設(shè)計的一種方法,它給軟件系統(tǒng)劃分為三個大的部分,分別是Model(模型)、View(視圖)、Controller(控制器)

8ab9185a-5942-11ed-a3b6-dac502259ad0.png

Model模型

模型就是負(fù)責(zé)具體功能、業(yè)務(wù)邏輯實現(xiàn)的,它通常是一個產(chǎn)品內(nèi)部的一些業(yè)務(wù)邏輯組成;例如,接下來我們要做的一個項目里有一個MQ-2傳感器,MQ-2傳感器的氣體檢測流程可以認(rèn)為是一個模型。

View視圖

視圖就是負(fù)責(zé)展示、響應(yīng)其它模塊處理結(jié)果的。例如,有一款設(shè)備擁有一個LCD屏幕,然后上面移植了一個GUI系統(tǒng),它用于顯示當(dāng)前MQ-2傳感器的數(shù)據(jù),那么這個GUI系統(tǒng)就是一個視圖。當(dāng)MQ-2傳感器檢測到的閾值超出我們所設(shè)定的閾值時,蜂鳴器或者LED報警了,那么蜂鳴器、LED也可以認(rèn)為是一個視圖。當(dāng)然,視圖不局限于以上這些內(nèi)容,視圖也可以是IOT前端、也可以是一個Shell終端,甚至可以是一個進(jìn)程或者線程。

Controller控制器

控制器就是用來接收用戶輸入的。通常,一個設(shè)備上可能有按鍵、觸摸屏、鼠標(biāo)等輸入設(shè)備,那么當(dāng)用戶控制輸入設(shè)備時,根據(jù)產(chǎn)品內(nèi)部的業(yè)務(wù)邏輯,界面可能會發(fā)生跳轉(zhuǎn)(視圖),用戶看不到的另一面會啟動應(yīng)用業(yè)務(wù)邏輯(模型),然后設(shè)備內(nèi)部的業(yè)務(wù)邏輯處理完畢后,又會通知界面,例如彈窗或者僅僅是界面上控件數(shù)據(jù)更新(視圖)。

有了MVC架構(gòu)以后,我們可以為我們接下來的項目做以下軟件模塊的劃分了,先預(yù)告一下,我們要做一個簡單的氣體檢測裝置,它會延用我們之前分享過的內(nèi)容進(jìn)一步規(guī)范化:

表驅(qū)動+狀態(tài)機法AD傳感器驅(qū)動檢測框架

讓傳感器數(shù)據(jù)更直觀之LCD曲線顯示

基于小熊派氣體傳感器MQ-2綜合實踐

Model

傳感器數(shù)據(jù)獲取、傳感器流程檢測。

View

LCD GUI(或者騰訊云、騰訊連連小程序)顯示,顯示傳感器數(shù)據(jù)、檢測狀態(tài)等

Controller

開發(fā)板上的按鍵、IOT終端下發(fā)命令(或騰訊連連小程序下發(fā)命令)

那么,這三個模塊怎么來通信呢?一般情況下,可以有兩種方式,一種是通過消息傳遞,另外一種是通過回調(diào)函數(shù)傳遞(類似事件回調(diào)觸發(fā)機制)。很顯然,我們的項目會考慮上RTOS,那么,通過消息隊列來傳輸數(shù)據(jù)就再好不過了!這樣的話,我們每個模塊之間的通信一旦設(shè)計好了,那么未來需要做的事情僅僅只需要關(guān)心:

消息發(fā)送端:數(shù)據(jù)怎么傳,要傳什么數(shù)據(jù)

接收消息端:數(shù)據(jù)怎么接,接完之后要做什么

解決了發(fā)送、接收數(shù)據(jù)的問題以后,第二步就是要設(shè)計傳感器的檢測流程了,它也是我們MVC架構(gòu)中模型部分最重要的內(nèi)容了,它是整個項目的核心業(yè)務(wù)。對于傳感器設(shè)備檢測來說,無非就是幾種分析狀態(tài):

傳感器設(shè)備處于空閑狀態(tài)

傳感器設(shè)備處于校準(zhǔn)狀態(tài)

傳感器設(shè)備處于檢測中狀態(tài)

傳感器設(shè)備處于獲取檢測結(jié)果狀態(tài)

從一種狀態(tài)切換到另一種狀態(tài),那么一定是由某個事件觸發(fā)的,進(jìn)而產(chǎn)生一定的動作,然后完成狀態(tài)的遷移,我們將這種稱為狀態(tài)機。在設(shè)計模式中,狀態(tài)機稱為狀態(tài)模式,狀態(tài)模式也是嵌入式軟件應(yīng)用設(shè)計中最常用的模式。

2、狀態(tài)模式

狀態(tài)模式是設(shè)計模式中行為型模式的一種,它允許對象在內(nèi)部狀態(tài)發(fā)生改變時改變它的行為。對于小白來說,狀態(tài)模式的概念講述是比較抽象的,那么,我可以舉一個接下來要做的氣體檢測儀項目來加深大家對狀態(tài)模式的理解,以下是這個項目的簡單的狀態(tài)遷移圖:

8acc078a-5942-11ed-a3b6-dac502259ad0.png

在狀態(tài)機的基本概念里,它的基本組成要素主要由現(xiàn)態(tài)、條件、動作、次態(tài)。我們能看到,檢測儀主要有四個狀態(tài),分別是IDLE、CALI、DETECT、RESULT,每個狀態(tài)其實都是由相應(yīng)的條件來進(jìn)行觸發(fā)產(chǎn)生動作進(jìn)而產(chǎn)生下一個狀態(tài)的。從以上的狀態(tài)遷移圖里,我們能很清晰地將每個狀態(tài)的遷移過程描述出來:

1.對于IDLE來說,主要有:

IDLE→START→CALI

解析:當(dāng)檢測儀狀態(tài)為IDLE時,檢測儀的操作者需要發(fā)起一個START事件來讓檢測儀的狀態(tài)由IDLE進(jìn)入到CALI狀態(tài)中。這樣的操作場景通常是檢測儀的操作者按下一個開始檢測的按鈕,檢測儀由空閑狀態(tài)轉(zhuǎn)為基準(zhǔn)采集狀態(tài),此時檢測儀可能會開啟各類傳感器,在此期間,各項傳感器指標(biāo)需要與當(dāng)前環(huán)境進(jìn)行融合,使各項傳感器指標(biāo)處于穩(wěn)定狀態(tài),這樣才有利于后續(xù)檢測結(jié)果精確。

2.對于CALI來說,主要有:

CALI→NEXT→DETECT
CALI→STOP→IDLE

解析:當(dāng)檢測儀狀態(tài)處于CALI時,如果此時條件滿足,則需要發(fā)起一個NEXT事件讓檢測儀狀態(tài)由CALI進(jìn)入DETECT中。這個NEXT事件可以是CALI過程穩(wěn)定后自動觸發(fā)的,也可以是由用戶手動觸發(fā)的,這個需要根據(jù)產(chǎn)品需求進(jìn)行定義。如果此時條件不滿足則維持現(xiàn)態(tài)CALI,當(dāng)檢測儀的操作者發(fā)起STOP事件時,通常是按下了某個返回或者退出的按鍵,則此時檢測的狀態(tài)由CALI遷移到了IDLE態(tài)。

3.對于DETECT來說,主要有:

DETECT→NEXT→RESULT
DETECT→PREV→CALI
DETECT→STOP→IDLE

解析:當(dāng)檢測儀狀態(tài)處于DETECT時,此時內(nèi)部會進(jìn)行一系列的動作,那么它得有結(jié)果呀,結(jié)果就是由NEXT事件來產(chǎn)生的,這樣的應(yīng)用場景通常是傳感器各項技術(shù)指標(biāo)整合的檢測算法運算結(jié)果與檢測儀所設(shè)定的閾值進(jìn)行比較后自行觸發(fā)的,最終將由DETECT狀態(tài)遷移到了RESULT。當(dāng)然,如果當(dāng)前處于DETECT狀態(tài),而DETECT狀態(tài)的過程存在偏差,此時檢測儀操作者可以通過某個按鍵,觸發(fā)PERV事件,將DETECT狀態(tài)遷移到上個狀態(tài)CALI;當(dāng)然,檢測儀操作者也可以直接選擇停止檢測,他只需要發(fā)起一個STOP事件(通常是一個返回按鍵)即可讓檢測儀的狀態(tài)由DETECT遷移到IDLE狀態(tài)。

4.對于RESULT來說,主要有:

RESULT→PREV→DETECT
RESULT→STOP→IDLE

解析:當(dāng)檢測儀狀態(tài)處于RESULT時,一般情況下檢測儀要么是通過聲光報警,要么是直接在LCD上進(jìn)行展示,要么是都有。檢測儀的操作者可以繼續(xù)檢測,那么他只需要發(fā)起一個PREV事件就能讓檢測儀的狀態(tài)由RESULT遷移到DETECT,設(shè)備又能夠繼續(xù)進(jìn)行檢測了,這就是所謂的快檢模式。當(dāng)然,檢測儀操作者也可以發(fā)起一個STOP事件,讓檢測儀回到IDLE狀態(tài)。

對以上狀態(tài)遷移過程熟悉后,我們第二步要做的事情就是設(shè)計符合我們業(yè)務(wù)場景的枚舉以及結(jié)構(gòu)體。首先是傳感器的狀態(tài),有IDLE、CALI、DETECT、RESULT,用枚舉來體現(xiàn)就是:

//傳感器狀態(tài)
enumSensorState_t
{
IDLE=0,
CALI,
DETECT,
RESULT
};

每種狀態(tài)是由特定的事件進(jìn)行觸發(fā),那么傳感器的事件主要有:

//傳感器事件
enumSensorEvent_t
{
START=0,
STOP,
NEXT,
};

有了狀態(tài)和事件之后,我們需要使用一個結(jié)構(gòu)體來抽象從現(xiàn)態(tài)->事件->次態(tài)這個過程,那么我們可以這么來設(shè)計:

structSensorStateItem_t
{
enumSensorState_tCurState;
enumSensorEvent_tEvent;
enumSensorState_tNextSate;
};

因此,我們能夠根據(jù)我們所描述的狀態(tài)規(guī)劃出一張表,而這張表就清晰的描述出現(xiàn)態(tài)->事件->次態(tài)的這幾個過程了:

structSensorStateItem_tSensorStateTable[]=
{
{IDLE,START,CALI},//IDLE->START->CALI
{CALI,NEXT,DETECT},//CALI->NEXT->DETECT
{CALI,STOP,IDLE},//CALI->STOP->IDLE
{DETECT,NEXT,RESULT},//DETECT->NEXT->RESULT
{DETECT,PREV,CALI},//DETECT->PREV->CALI
{DETECT,STOP,IDLE},//DETECT->STOP->IDLE
{RESULT,PREV,DETECT},//RESULT->PREV->DETECT
{RESULT,STOP,IDLE},//RESULT->STOP->IDLE
};

有了業(yè)務(wù)模型以后,接下來就是編寫代碼邏輯了!

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2565

    文章

    52982

    瀏覽量

    767263
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7256

    瀏覽量

    91833
  • 軟件
    +關(guān)注

    關(guān)注

    69

    文章

    5152

    瀏覽量

    89210
  • 框架
    +關(guān)注

    關(guān)注

    0

    文章

    404

    瀏覽量

    17892
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    嵌入式應(yīng)用軟件設(shè)計之MVC框架與狀態(tài)模式

    控制器就是用來接收用戶輸入的。通常,一個設(shè)備上可能有按鍵、觸摸屏、鼠標(biāo)等輸入設(shè)備,那么當(dāng)用戶控制輸入設(shè)備時,根據(jù)產(chǎn)品內(nèi)部的業(yè)務(wù)邏輯,界面可能會發(fā)生跳轉(zhuǎn)(視圖),用戶看不到的另一面會啟動應(yīng)用業(yè)務(wù)邏輯(模型),然后設(shè)備內(nèi)部的業(yè)務(wù)邏輯處理完畢后,又會通知界面,例如彈窗或者僅僅是界面上控件數(shù)據(jù)更新(視圖)。
    發(fā)表于 11-01 10:13 ?807次閱讀

    MVC框架

    MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設(shè)計典范,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織
    發(fā)表于 06-22 20:30

    MVC框架所存在的一些問題和解決方案

    本文將重點介紹當(dāng)前供軟件開發(fā)人員和獨立軟件供應(yīng)商使用的MVC框架所存在的一些問題,然后利用內(nèi)存內(nèi)應(yīng)用程序引擎Starcounter提供了解決方案。為了盡可能地真實,幾個源于實際項目的例子使用了
    發(fā)表于 05-24 07:32

    spring教程下載pdf

    學(xué)習(xí)用struts MVC框架作前端,Spring做中間層,Hibernate作后端來開發(fā)一個 簡單的Spring應(yīng)用程序。在第4章將使用Spring MVC框架對它進(jìn)行重構(gòu)。 本
    發(fā)表于 09-11 11:04 ?420次下載
    spring教程下載pdf

    基于MVC框架的公共部門績效評價系統(tǒng)

    公共部門績效評價需要適應(yīng)不同地域環(huán)境和不同歷史時期的地方政府公共部門,其最終的信息化實現(xiàn)要求軟件便于用戶對其進(jìn)行配置、使用和維護(hù)。該文將MVC 模式上升到框架層次
    發(fā)表于 03-30 10:15 ?11次下載

    基于J2EE架構(gòu)的管理信息系統(tǒng)的設(shè)計與開發(fā)

    MVC 模式是開發(fā)基于J2EE 架構(gòu)的WEB 系統(tǒng)非常流行的一種模式。Struts 框架就是基于MVC 模式的開源項目,經(jīng)過幾年的發(fā)展已逐漸成為一個穩(wěn)定、成熟的框架,并且占有
    發(fā)表于 06-15 09:20 ?30次下載

    Asp.net MVC框架自定義視圖引擎的實現(xiàn)

    針對當(dāng)前Web 應(yīng)用系統(tǒng)層次不夠分明、結(jié)構(gòu)不夠清晰等不足,結(jié)合MVC 設(shè)計模式,實現(xiàn)了基于Asp.net MVC 框架的自定義視圖引擎,在顯示層將顯示邏輯與應(yīng)用邏輯相分離,將數(shù)據(jù)訪問
    發(fā)表于 01-15 14:13 ?36次下載

    Struts和Spring兩種MVC框架的比較

    基于Web的MVC framework在J2EE的世界內(nèi)已是空前繁榮。TTS網(wǎng)站上幾乎每隔一兩個星期就會有新的MVC框架發(fā)布。就目前最常用、最流行的兩種框架全方位的介紹和比較。
    發(fā)表于 12-24 10:48 ?0次下載

    MVC框架的困惑

    MVC框架的困惑
    發(fā)表于 01-07 11:59 ?38次下載

    MVC框架實例—Spring MVC配置

    本文旨在讓您在使用Spring MVC框架配置完成日常工作的時候更加輕松。根據(jù)Spring MVC框架配置,為基于本技術(shù)開發(fā)的項目提供一系列的解決方案。
    發(fā)表于 12-14 17:37 ?3256次閱讀

    spring mvc框架介紹

    Spring MVC屬于SpringFrameWork的后續(xù)產(chǎn)品,已經(jīng)融合在Spring Web Flow里面。Spring 框架提供了構(gòu)建 Web 應(yīng)用程序的全功能 MVC 模塊
    發(fā)表于 11-17 16:28 ?2534次閱讀
    spring <b class='flag-5'>mvc</b><b class='flag-5'>框架</b>介紹

    如何使用MVC來開發(fā)音樂商店網(wǎng)站?

    ASP.NET MVC框架是微軟推出的一種使用MVC進(jìn)行網(wǎng)站開發(fā)的應(yīng)用,MVC的全稱是模型一視圖一控制器,由3個分離的主要的組件組成,分別是:模型,視圖和控制器。ASP.NET
    發(fā)表于 08-28 08:00 ?6次下載
    如何使用<b class='flag-5'>MVC</b>來開發(fā)音樂商店網(wǎng)站?

    基于MVC模式+狀態(tài)設(shè)計模式的物聯(lián)網(wǎng)氣體檢測開源項目

    上節(jié)我們分享了MVC框架、狀態(tài)模式組合在實際開發(fā)中的應(yīng)用,它能夠讓我們的軟件設(shè)計流程更加的清晰、易于維護(hù)。
    的頭像 發(fā)表于 11-21 09:34 ?988次閱讀

    當(dāng)年很流行,現(xiàn)在已經(jīng)淘汰的Java技術(shù)

    JSP 作為頁面模板,在后端通過 MVC 框架渲染成 HMTL,然后再發(fā)送到客戶端(例如瀏覽器)來呈現(xiàn)。這也就是我們常說的“前后端不分離”,“混合式”開發(fā)。
    的頭像 發(fā)表于 09-10 11:18 ?1049次閱讀
    當(dāng)年很流行,現(xiàn)在已經(jīng)淘汰的Java技術(shù)

    Spring MVC的工作原理

    Spring MVC是一種基于Java的Web應(yīng)用程序框架,它采用了Model-View-Controller(MVC)設(shè)計模式來分離應(yīng)用程序的不同方面。Spring MVC的工作原理
    的頭像 發(fā)表于 12-03 11:49 ?1207次閱讀