日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

用 Hasor 谈一谈MVC设计模式

發布時間:2024/9/21 c/c++ 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用 Hasor 谈一谈MVC设计模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

????MVC 是一個老生常談的東西早已不是什么稀罕物件,不過在這里還是扒一扒到底都有多少種 MVC。

一、經典 MVC

????先說最經典的 MVC,一個請求控制器的請求,負責讀取數據,然后將數據派發到試圖上。如圖:

????在經典?MVC 中,可以看到我們請求的頁面并不是真正的頁面,而是一個控制器。具體顯示的頁面由這個控制器來決定,大名頂頂的?struts 框架就是這樣一種模式。然而,通常為了記憶方便,基于這種經典模式的 MVC 我們通常是把 Controller 的名字起的和 View 一樣。

? ? 這種模式下,Controller 的職責主要有兩個:1、確定顯示的最終頁面。2、執行頁面邏輯準備相關數據。

????在 View 中使用的數據是來自?Controller 給予的。

????例如“判斷當前用戶是否登錄,如果登錄則展現用戶詳細信息,如果未登錄則展現登錄界面”。這種場景比較適合這種模式。

?

二、視圖前置 MVC

? ? 這是 MVC 的一個變版,在這種模式中 View 的地位被提升到 Controller 之前。也就是說請求是先得到了要顯示的頁面,而頁面中的數據的獲取邏輯被后置的?Controller 提供。

????這種模式下,Controller 的職責變得只有一個,那就是:執行頁面邏輯準備相關數據。視圖前置這種模式在職責上更加清晰,但是它失去了對頁面展現的控制。

? ? 通常在某個數據集中展現的地方會有這種模式的身影,例如:List 頁面,在List 頁面通常伴隨著查詢、分頁。這種頁面中頁面本身一般是不會有太大的變化,更多的是后臺的數據提取邏輯。

????其實這種 MVC 我們也并不陌生,jsp + bean 就是這樣一種形式。

?

三、視圖前置 MVC?變版

? ? 這是 視圖前置 MVC 的一個變版,它的工作模式沒有太大的變化。不同的是 View 被進一步前置到 瀏覽器中,通過 javascript 通過 ajax 的方式訪問?Controller。

? ? 這種模式下,一般有兩類工程師共同開發一個應用程序,他們是:前段工程師、后段工程師。

? ? 這種模式的優點在于,前后端開發工程師,只需要協議數據交換格式。即可開始各自的開發工作。也是最常見的一種模式。這也是前后端分離的一種體現。

?

四、使用 Hasor 實現三種 MVC 模式的開發

-Controller

? ? 我們先以 Controller?為例子進行說明,下面是使用?Hasor 開發的?Controller。

@MappingTo("/index.htm") public class Index {public void execute(RenderData data) {data.put("data", new UserData());} }

? ? 在例子中,我們簡單的把 UserData 這個數據寫入到 RenderData 對象中。最后在頁面渲染的時候再把這個對象拿出來。

????當然您也可以像這樣,直接把對象塞到 Request 中。

data.getHttpRequest().setAttribute("data", new UserData());

? ? 或者干脆更直接一點

@MappingTo("/index.htm") public class Index {public void execute(HttpServletRequest request) {request.setAttribute("data", new UserData());} }

? ? 除了前面三種方式之外,Haosr 還學習優秀的 JFinal 框架。您可以繼承一個類,通過繼承類的各種工具方法來實現數據的設置,例如:

@MappingTo("/index.htm") public class Index extends WebController {public void execute() {this.putData("data", new UserData());// orthis.setAttr("data", new UserData());} }

? ? 具體想用哪種方式,你喜歡就好。

-實踐:經典MVC設計模式

? ? 我們可以通過這種方式實現 經典MVC模式。如下:

@MappingTo("/index.htm") public class Index extends WebController {public void execute() throws ServletException, IOException {// 方式 1this.setAttr("data", new UserData());getRequest().getRequestDispatcher("/userinfo.htm").forward(getRequest(),getResponse());// 方式 2this.setAttr("data", new UserData());getResponse().sendRedirect("/userinfo.htm");// 方式 3this.setAttr("data", new UserData());renderTo("/userInfo.htm");} }

你也可以這樣:

@MappingTo("/index.htm") public class Index {public void execute(RenderData data) {data.put("data", new UserData());data.viewName("/userInfo.htm");} }

-實踐:視圖前置 MVC

????前面提到過,前置 mvc 就是一種 jsp + bean 的模式。那么索性就 “JSP + Bean”把。先看負責獲取數據的 ManagerBean,為了減少每次獲取 UserInfo 時重復創建 Manager 的問題。下面還特意添加了@Singleton注解實現了單例。

@Singleton public class UserManager {public UserInfo getUserById(long userId) {return new UserInfo();} }

? ? 接下來真的 JSP 登場,為了JSP可以訪問到我們的 Bean,你需要引入 Hasor 的 JSP 標簽庫。接下來通過 hs 庫訪問我們的?ManagerBean 獲取 UserInfo。

<%@page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> <%@ taglib prefix="hs" uri="http://project.hasor.net/hasor/schema/jstl" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html lang="zh-CN"> <body><hs:findType var="userManager" type="net.demo.hasor.manager.UserManager"/> <c:set var="userInfo" scope="request" value="${userManager.getUserById(1234)}"/> 姓名:${userInfo.name}<br/> 年齡:${userInfo.age}<br/></body> </html>

? ? 下面這個是運行結果:

-實踐:視圖前置 MVC 變版

? ? 在這種模式下我們需要借助一個 Controller 幫我們把數據透給前端 js 程序。瀏覽器通過請求我們的接口 Controller?來獲取數據。接口?Controller 負責返回 json 數據。

@MappingTo("/getUserInfo.json") public class GetUserInfo {public UserInfo execute(RenderData data) {return new UserInfo();} }

????訪問URL運行結果:

? ? 其實這種模式,本質上還是經典MVC模式。

轉載于:https://my.oschina.net/ta8210/blog/753001

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的用 Hasor 谈一谈MVC设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。