• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于MVC的Web框架設(shè)計(jì)與應(yīng)用

    2021-03-31 08:56:38亓雪冬韓立峰
    微型電腦應(yīng)用 2021年3期
    關(guān)鍵詞:基類子類設(shè)計(jì)模式

    亓雪冬, 韓立峰

    (中國石油大學(xué)(華東)信息化建設(shè)處, 山東 青島 266580)

    0 引言

    隨著Web業(yè)務(wù)需求的不斷增長,MVC設(shè)計(jì)模式和基于MVC的Web框架被持續(xù)研究和關(guān)注,如冉啟武等[1]設(shè)計(jì)了基于MVC模式的教學(xué)管理電子信息系統(tǒng);張翠翠等[2]研究了基于MVC的試卷生成及主觀題判卷算法;王俊芳等[3]研究和應(yīng)用了基于MVC模式的ThinkPHP框架;Majida Laaziri等[4]評(píng)估了Laravel、Smfony和CodeIgniter三種PHP Web框架并對(duì)其性能進(jìn)行了測(cè)試;Andri Sunardi等[5]對(duì)比了Laravel和Slim兩種PHP Web框架并研究了在自由職業(yè)者項(xiàng)目監(jiān)控系統(tǒng)中的應(yīng)用效果。眾多研究表明,MVC模式通過對(duì)應(yīng)用的分層和解耦,減少了架構(gòu)設(shè)計(jì)的復(fù)雜性,增加了代碼的靈活性和可重用性;而MVC Web框架通過提供基礎(chǔ)框架模型和類庫,減少了Web應(yīng)用開發(fā)中的重復(fù)代碼,提高了開發(fā)效率和可維護(hù)性。

    本文在研究MVC設(shè)計(jì)模式的基礎(chǔ)上,分析了Web應(yīng)用的一般性需求,提出了MVC Web框架的設(shè)計(jì)思路,并基于該框架設(shè)計(jì)實(shí)現(xiàn)了程序設(shè)計(jì)實(shí)訓(xùn)Web系統(tǒng)。

    1 MVC設(shè)計(jì)模式

    MVC設(shè)計(jì)模式最初于上世紀(jì)80年代誕生于Smalltalk語言中,近年來被廣泛應(yīng)用于Java EE、Web等平臺(tái)的軟件開發(fā)中。MVC全稱為Model-View-Controller,Model指數(shù)據(jù)模型,View指視圖(用戶界面),而Controller則指控制器。MVC的目的是將Model和View分離,從而使同一個(gè)程序可以使用不同的表現(xiàn)形式。MVC強(qiáng)制使應(yīng)用程序的輸入、處理和輸出分開設(shè)計(jì),將程序主體分離為模型、視圖、控制器3個(gè)核心部件,實(shí)現(xiàn)功能的解耦。模型-視圖-控制器三者間的關(guān)系,如圖1所示。

    圖1 MVC架構(gòu)示意圖

    控制器接受用戶的輸入并調(diào)用模型和視圖去完成用戶的需求,它本身不做任何處理,也不輸出任何數(shù)據(jù)。單擊Web頁面中的超鏈接和發(fā)送HTML表單時(shí),它只是接收請(qǐng)求并決定調(diào)用哪個(gè)模型去處理請(qǐng)求,然后再確定用哪個(gè)視圖來顯示返回的數(shù)據(jù),相當(dāng)于模型和視圖的粘合邏輯。

    模型表示數(shù)據(jù)和業(yè)務(wù)規(guī)則,它返回的數(shù)據(jù)是中立的,與數(shù)據(jù)格式無關(guān),因此一個(gè)模型能夠?yàn)槎鄠€(gè)視圖提供數(shù)據(jù),減少了代碼的重復(fù)性。

    視圖為用戶提供一種展示和操作數(shù)據(jù)的方式。不同的視圖代表多個(gè)不同的用戶界面。實(shí)際的處理操作發(fā)生在模型部分而不是視圖部分。在Web應(yīng)用程序,視圖通常由HTML元素、模板標(biāo)記語言以及模型返回的數(shù)據(jù)共同組成。

    2 基于MVC的Web框架設(shè)計(jì)

    2.1 整體架構(gòu)

    本文設(shè)計(jì)的Web框架遵循MVC設(shè)計(jì)模式,核心類包括控制器基類Controller、模式基類Model、用于生成視圖的模板類Template和工具類Request。整體架構(gòu),如圖2所示。

    圖2 整體架構(gòu)設(shè)計(jì)圖

    控制器基類Controller邏輯上依賴于類Model和類Template,內(nèi)部包含了Model和Template的實(shí)例,其目的是粘合這兩個(gè)類的功能,選擇合適的Model獲取數(shù)據(jù),并選擇合適的模板生成視圖。模式基類Model包含了操縱數(shù)據(jù)的基本業(yè)務(wù)邏輯,如查找、保存、更新和刪除數(shù)據(jù)等方法。模板類Template內(nèi)部封裝了第三方的模板引擎Smarty,實(shí)現(xiàn)內(nèi)存數(shù)據(jù)到HTML格式視圖的轉(zhuǎn)換。工具類Request實(shí)現(xiàn)了Web請(qǐng)求數(shù)據(jù)的封裝、請(qǐng)求的派發(fā)等功能,將Web請(qǐng)求轉(zhuǎn)發(fā)到指定的控制器。

    該架構(gòu)將Controller與Model的業(yè)務(wù)邏輯層作為應(yīng)用的主要開發(fā)區(qū)域,上層應(yīng)用程序只需繼承Controller和Model,根據(jù)業(yè)務(wù)實(shí)際需求實(shí)現(xiàn)對(duì)應(yīng)子類UserControl和UserModel,即可完成業(yè)務(wù)邏輯開發(fā)。

    2.2 Web請(qǐng)求入口設(shè)計(jì)

    index.php為Web請(qǐng)求的入口地址。Web請(qǐng)求到達(dá)后,index.php首先將Web請(qǐng)求中攜帶的各種數(shù)據(jù)進(jìn)行封裝以便后續(xù)使用;接下來將Web請(qǐng)求派發(fā)到指定控制器,由控制器完成對(duì)請(qǐng)求的后續(xù)處理。

    Requset:: dispatch()方法實(shí)現(xiàn)了控制器調(diào)度,其思路為:

    (1) 從Web請(qǐng)求的Get數(shù)據(jù)中提取ct和ac兩個(gè)參數(shù)的值,這兩個(gè)參數(shù)表示執(zhí)行處理的控制器Controller以及控制器的具體操作Action;

    (2) 將預(yù)設(shè)的控制器文件目錄、上一步操作中提取的控制器名稱以及字符串“.php”三部分合成控制器類文件完整路徑,使用require語句包含該控制器類;

    (3) 創(chuàng)建該控制器的實(shí)例,并調(diào)用實(shí)例中參數(shù)ac所指的Action方法,完成控制器調(diào)度。

    2.3 控制器設(shè)計(jì)

    控制器設(shè)計(jì)包含兩個(gè)層次,Controller基類和UserController子類?;愔邪琈odel和Template的實(shí)例,方便粘合模式和視圖。但基類中并未實(shí)現(xiàn)任何Action方法,這部分留給子類根據(jù)業(yè)務(wù)邏輯具體實(shí)現(xiàn)。

    2.4 視圖模板設(shè)計(jì)

    控制器完成業(yè)務(wù)邏輯后,將調(diào)用模板類Template,將返回的數(shù)據(jù)和指定的模板合成視圖,向用戶展示W(wǎng)eb應(yīng)用界面。Template類基于第三方的模板引擎Smarty,模板文件使用Smarty的語法,擴(kuò)展名為tpl。Template類公開了assign和display兩個(gè)方法,assign將控制器返回的數(shù)據(jù)替換入模板,display根據(jù)模板語言對(duì)模板進(jìn)行解釋,生成最終的視圖。

    2.5 模式設(shè)計(jì)

    模式的設(shè)計(jì)圍繞操縱和處理數(shù)據(jù)展開。在業(yè)務(wù)系統(tǒng)中,數(shù)據(jù)表現(xiàn)為關(guān)系數(shù)據(jù)庫中的關(guān)系(表);然而在軟件設(shè)計(jì)中,數(shù)據(jù)表現(xiàn)為內(nèi)存中的對(duì)象。為了實(shí)現(xiàn)關(guān)系與內(nèi)存對(duì)象之間的數(shù)據(jù)轉(zhuǎn)換,本文在模式層設(shè)計(jì)了輕量級(jí)、可擴(kuò)展的對(duì)象-關(guān)系映射(Object/Relation Mapping,簡稱ORM)機(jī)制,相關(guān)設(shè)計(jì)類,如圖3所示。

    圖3 模式部分類圖

    DbManager是直接操縱數(shù)據(jù)庫的抽象基類,connect屬性表示數(shù)據(jù)庫連接對(duì)象,config屬性表示數(shù)據(jù)庫配置字符串,getData方法用于執(zhí)行Select語句返回?cái)?shù)據(jù),runSql方法用于執(zhí)行Insert、Delete、Update等SQL語句。子類MySQL和SQLServer是DbManager針對(duì)這兩種常用數(shù)據(jù)庫的具體實(shí)現(xiàn),這使得模式可以支持多種數(shù)據(jù)庫。

    3 Web框架的應(yīng)用

    基于MVC Web框架,筆者設(shè)計(jì)實(shí)現(xiàn)了程序設(shè)計(jì)實(shí)訓(xùn)Web系統(tǒng)。實(shí)訓(xùn)課程中,學(xué)生需要小組合作共同完成一個(gè)實(shí)訓(xùn)項(xiàng)目,一個(gè)小組提交一份電子作業(yè),教師根據(jù)小組中每個(gè)成員的工作量來評(píng)定成績。根據(jù)項(xiàng)目需求,系統(tǒng)核心功能確定為用戶管理、小組管理和作業(yè)管理3個(gè)主要模塊。用戶管理模塊主要提供注冊(cè)、登錄和賬號(hào)管理等功能;小組管理模塊主要提供小組的建立和刪除、小組查詢、組員加入和退出等功能;作業(yè)管理模塊中,面向教師的功能為作業(yè)發(fā)布、作業(yè)批改和成績導(dǎo)出,面向組長的功能為接收作業(yè)、分配子任務(wù)和提交作業(yè),面向組員的功能為接收子任務(wù)、提交子任務(wù)等。

    上文設(shè)計(jì)的MVC Web框架提供了支撐Web系統(tǒng)的關(guān)鍵基礎(chǔ)功能,并且將系統(tǒng)邏輯結(jié)構(gòu)劃分為模式、視圖和控制器三部分,開發(fā)時(shí)只需對(duì)各部分進(jìn)行必要的擴(kuò)展和補(bǔ)充即可,這種方式極大簡化了Web系統(tǒng)的開發(fā)。

    在控制器方面,針對(duì)用戶管理、小組管理和作業(yè)管理等模塊分別實(shí)現(xiàn)了UsersController、TeamsController和Projects Controller3個(gè)控制器子類。每個(gè)控制器內(nèi)部可實(shí)現(xiàn)了一系列Action(功能),如用戶管理控制器UsersController,內(nèi)部實(shí)現(xiàn)了UserRegister、UserLogin、RemoveUser、EditUser等Action。Web請(qǐng)求中,通過指定ct(Controller)和ac(Action)兩個(gè)參數(shù),可以調(diào)用指定控制器的指定功能,處理用戶請(qǐng)求。

    對(duì)于每一個(gè)Action,均要設(shè)計(jì)與之匹配的專用模式子類。模式子類繼承自Model父類,提供了處理和訪問此Action所需的特定數(shù)據(jù)的能力。例如對(duì)于登錄Action和分配子任務(wù)Action,分別設(shè)計(jì)了LoginModel和SubtaskModel兩個(gè)子類,LoginModel用于處理登錄相關(guān)數(shù)據(jù),SubtaskModel用于處理子任務(wù)劃分相關(guān)數(shù)據(jù)。

    另外還需為每一個(gè)Action設(shè)計(jì)對(duì)應(yīng)的視圖模板,以展示用戶界面。例如對(duì)于登錄Action和分配子任務(wù)Action,分別設(shè)計(jì)了Login.tpl和SubtaskModel.tpl兩個(gè)視圖模板。這兩個(gè)Action的用戶界面,如圖4所示。

    圖4 程序設(shè)計(jì)實(shí)訓(xùn)Web系統(tǒng)部分界面(上圖為登錄界面,下圖為分配子任務(wù)界面)

    4 總結(jié)

    MVC設(shè)計(jì)模式通過將應(yīng)用程序分離為模式-視圖-控制器3個(gè)部分,實(shí)現(xiàn)了對(duì)應(yīng)用的分層和解耦,提高了軟件設(shè)計(jì)的靈活性。分層結(jié)構(gòu)使得MVC具有耦合性低、重用性高、便于部署、易于測(cè)試等優(yōu)點(diǎn)。本文基于MVC模式自主設(shè)計(jì)開發(fā)了一套高效率、可擴(kuò)展的輕量級(jí)Web框架,并在該框架的基礎(chǔ)上設(shè)計(jì)實(shí)現(xiàn)了程序設(shè)計(jì)實(shí)訓(xùn)Web系統(tǒng)。實(shí)踐表明,本文的MVC Web框架為Web應(yīng)用開發(fā)提供了關(guān)鍵技術(shù)支撐,簡化了開發(fā)工作,提高了開發(fā)效率,增強(qiáng)了應(yīng)用系統(tǒng)的穩(wěn)定性和可靠性。

    猜你喜歡
    基類子類設(shè)計(jì)模式
    仿生設(shè)計(jì)模式的創(chuàng)新應(yīng)用探索
    玩具世界(2023年6期)2024-01-29 12:14:36
    “1+1”作業(yè)設(shè)計(jì)模式的實(shí)踐探索
    基于C#面向?qū)ο蟪绦蛟O(shè)計(jì)的封裝、繼承和多態(tài)分析
    卷入Hohlov算子的某解析雙單葉函數(shù)子類的系數(shù)估計(jì)
    交通機(jī)電工程設(shè)計(jì)模式創(chuàng)新探討
    關(guān)于對(duì)稱共軛點(diǎn)的倒星象函數(shù)某些子類的系數(shù)估計(jì)
    空戰(zhàn)游戲設(shè)計(jì)實(shí)例
    一種基于用戶興趣的STC改進(jìn)算法
    虛機(jī)制在《面向?qū)ο蟪绦蛟O(shè)計(jì)C++》中的教學(xué)方法研究
    互動(dòng)式設(shè)計(jì)模式研究
    郧西县| 濮阳县| 辽宁省| 泰宁县| 石棉县| 丰镇市| 中超| 竹溪县| 延边| 勐海县| 华坪县| 师宗县| 海城市| 榆社县| 郓城县| 白沙| 南江县| 叶城县| 拉萨市| 福建省| 双江| 亳州市| 如东县| 伊春市| 邵阳县| 武鸣县| 望都县| 陈巴尔虎旗| 古田县| 高要市| 丰城市| 黑河市| 托克托县| 宁南县| 贵州省| 温州市| 双流县| 前郭尔| 西和县| 哈密市| 霍山县|