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

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

Traintime PDA 架構(gòu)設(shè)計

2023-06-06 16:39 作者:Superbart  | 我要投稿

博客地址:https://legacy.superbart.xyz/writing/XDYou%20SAD.html

整體架構(gòu)設(shè)計

由于本程序是一個信息查詢工具,其基本是圍繞數(shù)據(jù)運(yùn)轉(zhuǎn)的,所以我打算使用倉庫架構(gòu)。這個圖作為一個大致的示例。

? ?

但光靠一個“倉庫”是無法維護(hù)本程序如此多類型的信息的,你現(xiàn)實中的倉庫還得找個管理院呢。因此我借鑒了構(gòu)件系統(tǒng)的想法,把倉庫里面的東西分成以下幾個“部件”。

? ?

倉庫結(jié)構(gòu)解決了我們?nèi)绾喂芾砦覀儚?fù)雜的數(shù)據(jù),但是我們的程序是一個 GUI 程序。也就是說,這個程序有兩個部分,一個是數(shù)據(jù),一個是顯示數(shù)據(jù)的東西。數(shù)據(jù)相當(dāng)于倉庫,而 GUI 是用來向倉庫請求數(shù)據(jù),并顯示數(shù)據(jù)的部分。倉庫返回數(shù)據(jù)的時候,肯定需要一些處理,這個東西就是控制器,是我們程序倉庫的一大組成 部分,我將會在下面講述。

這個架構(gòu)有個名稱,叫做 MVC 架構(gòu),在此引入我在Flutter 介紹里面提到的東西:

我先給大家介紹 MVC 架構(gòu),Model 模型,是說程序的功能??刂破魇呛鸵晥DView進(jìn)行交流,View視圖就是顯示了。View 通過 Controller 獲取 Model 中的東西。 ? ?以下這段展示的是我程序?qū)?yīng)的模型各組成的部分。

? ? ?

這個架構(gòu)也可以看作是一種流水線結(jié)構(gòu),其中控制器相當(dāng)于一種過濾器。接下來我會專門開一章簡介一下。

同時,我們可以看出我們程序的層級結(jié)構(gòu),數(shù)據(jù)大致是從中心往外圍傳遞的。

? ?

控制器

我上文提到,控制器負(fù)責(zé)中轉(zhuǎn) GUI(也就是視圖)的請求,處理后端傳回來的數(shù)據(jù)。這個有兩種實現(xiàn)方式,分別是觀察式和控制器類式。

觀察式

第一個是觀察式,適用于數(shù)據(jù)單向流動,數(shù)據(jù)加工相對簡單的情況。這種情況下,這個部件的數(shù)據(jù)流動遵循標(biāo)準(zhǔn)的數(shù)據(jù)流架構(gòu)。這個過程中,由于數(shù)據(jù)的單向移動和最終 UI 的被動更新,我們可以認(rèn)為是 UI 觀察數(shù)據(jù)改變。在這種情況下,數(shù)據(jù)更新依賴于其他部件的更新請求是不是顧及到了這個部件,比如說主頁的全局刷新。

? ?

控制器類式

第二個是控制器類式,不僅適用于數(shù)據(jù)加工十分復(fù)雜的情況,而且適用于需要視圖發(fā)出更新請求的情況。在這個情況下,數(shù)據(jù)的流動不是單純的單向,而是雙向的。而且由于涉及到很多信息,還有很多部件都依賴于一個信息源,這個控制器使用一個類的方式實現(xiàn)比較合適。 ? ?在我的程序中,課表信息是用這個實現(xiàn)的,因為課表信息相當(dāng)綜合,而且很多視圖依賴于課表信息。 ? ?我的課表信息包括:

  • 當(dāng)前周次信息

  • 課程信息

  • 課程的時間安排信息

  • 根據(jù)上面兩個信息,預(yù)先計算好的按照時間排序的課表信息

  • 當(dāng)前課程信息

依賴課表信息的視圖有:

  • 課程表窗口,這個只是單向接受課表信息

  • 首頁的周次信息顯示,單向接受周次信息

  • 首頁的當(dāng)前課程卡片,這個不僅可以展示當(dāng)前課程信息,還可以觸發(fā)重新加載

  • 首頁重新加載包括重新加載課表

具體圖示請看下面總結(jié)圖中的課表相關(guān)部分。

自行管理狀態(tài)

雖然很多數(shù)據(jù)是遵循上面提到的控制器(數(shù)據(jù)流)系統(tǒng)。我程序有兩個數(shù)據(jù)是自行管理的,也就是說,他不需要上面提到的管道,而是自行管理。因為這些數(shù)據(jù)依賴于之前已經(jīng)獲取到的數(shù)據(jù)。我的程序有兩個部分是自行管理的:

  • 查詢成績中,自行選擇科目計算均分,這個均分狀態(tài)是由成績查詢窗口維護(hù)的。查詢窗口維護(hù)一個成績數(shù)組,自己檢測選中的科目,然后計算顯示。

  • 查詢打卡成績中,我們需要維護(hù)一個布爾變量,他用來決定顯示的是所有記錄還是成功記錄。顯然,這需要依賴于已經(jīng)返回的數(shù)據(jù)。大家可以類比為 js 里面對數(shù)組進(jìn)行 filter 操作。

上面兩章想了解更多,可以看Flutter 介紹文章中 Flutter 內(nèi)部的狀態(tài)管理章節(jié)。

總結(jié)

最后,我們根據(jù)分類,看出以下按照部件和數(shù)據(jù)流動看出來的布局。其中,橫線表示這兩個在程序中是緊密相關(guān)的,箭頭代表了數(shù)據(jù)流動的方向。紫色的是控制器,藍(lán)綠色的是最終的窗口。

? ?

我們程序的架構(gòu)是這樣的:

  • 程序是圍繞數(shù)據(jù)運(yùn)轉(zhuǎn)的,所以總體上遵循倉庫架構(gòu),其中倉庫分成若干組件。

  • 各個組件有一條數(shù)據(jù)流的線性傳遞方式,控制器作為數(shù)據(jù)源,也就是倉庫,和最終顯示組件之間的過濾器和中轉(zhuǎn)站。

  • 大致可以看作數(shù)據(jù)-控制器-界面的三層結(jié)構(gòu)。

SuperBart 2023-6-6


Traintime PDA 架構(gòu)設(shè)計的評論 (共 條)

分享到微博請遵守國家法律
滁州市| 左贡县| 玉树县| 济南市| 五大连池市| 汕头市| 波密县| 梅州市| 游戏| 晋中市| 屯留县| 南京市| 绥滨县| 巴彦淖尔市| 保定市| 福清市| 古交市| 马鞍山市| 醴陵市| 泗洪县| 修武县| 达孜县| 湘乡市| 方山县| 嘉峪关市| 子洲县| 邮箱| 宝应县| 天津市| 柳林县| 石城县| 宁城县| 乌兰浩特市| 绍兴市| 稷山县| 綦江县| 新泰市| 和田市| 剑川县| 武强县| 平邑县|