色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

什么是MVC框架

嵌入式應用研究院 ? 來源:嵌入式應用研究院 ? 作者:嵌入式應用研究院 ? 2022-11-01 10:13 ? 次閱讀

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

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

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

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

1、MVC框架

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

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

Model模型

模型就是負責具體功能、業務邏輯實現的,它通常是一個產品內部的一些業務邏輯組成;例如,接下來我們要做的一個項目里有一個MQ-2傳感器,MQ-2傳感器的氣體檢測流程可以認為是一個模型。

View視圖

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

Controller控制器

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

有了MVC架構以后,我們可以為我們接下來的項目做以下軟件模塊的劃分了,先預告一下,我們要做一個簡單的氣體檢測裝置,它會延用我們之前分享過的內容進一步規范化:

表驅動+狀態機法AD傳感器驅動檢測框架

讓傳感器數據更直觀之LCD曲線顯示

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

Model

傳感器數據獲取、傳感器流程檢測。

View

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

Controller

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

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

消息發送端:數據怎么傳,要傳什么數據

接收消息端:數據怎么接,接完之后要做什么

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

傳感器設備處于空閑狀態

傳感器設備處于校準狀態

傳感器設備處于檢測中狀態

傳感器設備處于獲取檢測結果狀態

從一種狀態切換到另一種狀態,那么一定是由某個事件觸發的,進而產生一定的動作,然后完成狀態的遷移,我們將這種稱為狀態機。在設計模式中,狀態機稱為狀態模式,狀態模式也是嵌入式軟件應用設計中最常用的模式。

2、狀態模式

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

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

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

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

IDLE→START→CALI

解析:當檢測儀狀態為IDLE時,檢測儀的操作者需要發起一個START事件來讓檢測儀的狀態由IDLE進入到CALI狀態中。這樣的操作場景通常是檢測儀的操作者按下一個開始檢測的按鈕,檢測儀由空閑狀態轉為基準采集狀態,此時檢測儀可能會開啟各類傳感器,在此期間,各項傳感器指標需要與當前環境進行融合,使各項傳感器指標處于穩定狀態,這樣才有利于后續檢測結果精確。

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

CALI→NEXT→DETECT
CALI→STOP→IDLE

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

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

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

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

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

RESULT→PREV→DETECT
RESULT→STOP→IDLE

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

對以上狀態遷移過程熟悉后,我們第二步要做的事情就是設計符合我們業務場景的枚舉以及結構體。首先是傳感器的狀態,有IDLE、CALI、DETECT、RESULT,用枚舉來體現就是:

//傳感器狀態
enumSensorState_t
{
IDLE=0,
CALI,
DETECT,
RESULT
};

每種狀態是由特定的事件進行觸發,那么傳感器的事件主要有:

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

有了狀態和事件之后,我們需要使用一個結構體來抽象從現態->事件->次態這個過程,那么我們可以這么來設計:

structSensorStateItem_t
{
enumSensorState_tCurState;
enumSensorEvent_tEvent;
enumSensorState_tNextSate;
};

因此,我們能夠根據我們所描述的狀態規劃出一張表,而這張表就清晰的描述出現態->事件->次態的這幾個過程了:

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
};

有了業務模型以后,接下來就是編寫代碼邏輯了!

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

    關注

    2551

    文章

    51134

    瀏覽量

    753849
  • 數據
    +關注

    關注

    8

    文章

    7048

    瀏覽量

    89073
  • 軟件
    +關注

    關注

    69

    文章

    4953

    瀏覽量

    87546
  • 框架
    +關注

    關注

    0

    文章

    403

    瀏覽量

    17500
收藏 人收藏

    評論

    相關推薦

    嵌入式應用軟件設計之MVC框架與狀態模式

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

    MVC框架

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

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

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

    spring教程下載pdf

    學習用struts MVC框架作前端,Spring做中間層,Hibernate作后端來開發一個 簡單的Spring應用程序。在第4章將使用Spring MVC框架對它進行重構。 本
    發表于 09-11 11:04 ?420次下載
    spring教程下載pdf

    基于MVC框架的公共部門績效評價系統

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

    基于J2EE架構的管理信息系統的設計與開發

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

    Asp.net MVC框架自定義視圖引擎的實現

    針對當前Web 應用系統層次不夠分明、結構不夠清晰等不足,結合MVC 設計模式,實現了基于Asp.net MVC 框架的自定義視圖引擎,在顯示層將顯示邏輯與應用邏輯相分離,將數據訪問
    發表于 01-15 14:13 ?36次下載

    Struts和Spring兩種MVC框架的比較

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

    MVC框架的困惑

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

    MVC框架實例—Spring MVC配置

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

    spring mvc框架介紹

    Spring MVC屬于SpringFrameWork的后續產品,已經融合在Spring Web Flow里面。Spring 框架提供了構建 Web 應用程序的全功能 MVC 模塊
    發表于 11-17 16:28 ?2348次閱讀
    spring <b class='flag-5'>mvc</b><b class='flag-5'>框架</b>介紹

    如何使用MVC來開發音樂商店網站?

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

    基于MVC模式+狀態設計模式的物聯網氣體檢測開源項目

    上節我們分享了MVC框架、狀態模式組合在實際開發中的應用,它能夠讓我們的軟件設計流程更加的清晰、易于維護。
    的頭像 發表于 11-21 09:34 ?778次閱讀

    當年很流行,現在已經淘汰的Java技術

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

    Spring MVC的工作原理

    Spring MVC是一種基于Java的Web應用程序框架,它采用了Model-View-Controller(MVC)設計模式來分離應用程序的不同方面。Spring MVC的工作原理
    的頭像 發表于 12-03 11:49 ?780次閱讀
    主站蜘蛛池模板: 国产高清免费视频免费观看| 亚洲精品第一国产综合| 成都电影免费中文高清| 亚洲精品无码久久久久A片 | 2019夜夜| 视频一区在线免费观看| 老妇高潮潮喷到猛进猛出| 国产精品无码人妻在线| bbwxxxx交女警| 中文无码熟妇人妻AV在线| 亚洲国语在线视频手机在线 | 亚洲 欧美 国产 伦 综合| 欧美男男网站免费观看videos| 精品含羞草免费视频观看 | gv肉片视频免费观看| 亚洲综合中文| 雪恋电影完整版免费观看| 日韩专区亚洲国产精品| 蜜桃臀无码内射一区二区三区| 激情床戏揉胸吃胸视频| 国产精品www视频免费看| WWW亚洲精品久久久乳| 97人人添人人澡人人澡人人澡| 一个人免费完整在线观看影院| 迅雷成人下载| 午夜看片a福利在线观看| 日韩熟女精品一区二区三区 | 亚洲成A人片在线观看中文L| 少妇高潮惨叫久久久久久欧美| 奇米色偷偷| 欧美特级特黄a大片免费| 美女扒开腿让男人桶个爽| 久久婷婷电影网| 久久精品手机观看| 精品三级在线观看| 娇妻玩4P被三个男人伺候电影| 好姑娘社区在线视频| 国产一区二区三区影院 | 精品国产福利一区二区在线| 狠狠操伊人| 精品久久久久亚洲|