SpringBoot微服務架構下的MVC模型總結


SpringBoot微服務架構下的MVC模型產生的原因:

微服務概念改變着軟件開發領域,傳統的開源框架結構開發,由於其繁瑣的配置流程 , 復雜的設置行為,為項目的開發增加了繁重的工作量,微服務致力於解決除業務邏輯以外的開發工作量的精簡與廢
除,集約化的改善開發環境和開發成本; SpringBoot 作為 Spring 項目組的微服務產品,正在大規模的占領軟件市場,其簡化的應用開發搭建過程,使得開發人員從繁瑣的配置文件中解脫出來,大量的精力投入到項目邏
輯研發當中,其致力於成為快速應用開發領域的領導者。 MVC 設計模型在”網頁既軟件“的生產環境中扮演者重要的角色,不僅在各大軟件產品中采用了 MVC 模型,越來越多的軟件 OEM 企業通過此模型批量化的進行軟件生產。

微服務的起源與優勢:

(一)起源

微服務是一種新興起的軟件設計架構,它通過將龐大的軟件產品細分為多個零散的小型應用,很好的解決了高耦合的弊端,細分后的應用工作簡便
有序,大大降低產品耦合的同時,降低了開發難度,減少了研發經費。

(二)優勢

微服務最大的優勢在於通過擴展組件的形式來處理功能上的瓶頸問題,從而更好的利用了各類計算資源,使得開發人員不再需要部署一個全方位的
應用環境來發布一個新迭代的軟件版本,達到資源利用率大幅提高的目的。由於細分應用,對於軟件產品更新也變得更加快速,無論從產品迭代到代碼測試都按照細分后的
應用規模進行,從而大大降低產品更新周期。在雲計算領域微服務也起到了不可或缺的作用,在事件驅動計算方面,類似於 AWS Lambda 這樣的功能讓開發人員能夠編寫的代碼處於休眠狀
態,當有事件觸發時方可執行。

二、 SpringBoot
(一)起源

SpringBoot 項目是 Pivotal 團隊開發一個全新Spring 框架,其開發的目的在於解決 Spring 開發過程中的復雜配置操作,最終實現零配置為目標,
SpringBoot 作為 Spring 項目組的微服務產品,正在大規模的占領軟件市場,其簡化的應用開發搭建過程,使得開發人員從繁瑣的配置文件中解脫出來,大
量的精力投入到項目邏輯研發當中,其致力於成為快速應用開發領域的領導者。

(二)特點

獨立應用: 每一個 SpringBoot App 都是獨立存在的個體應用,可以是一個 Jar 文件,也可以是一個war 文件,只需要基本 Java 運行環境即可滿足部署
要求,SpringBoot App 內部嵌入了 Tomcat,從而無需部署 Web 容器。Maven 項目:SpringBoot 項目實際上是一個Maven 項目,在第三方插件的使用上完全可以通過
依賴 maven 或者 Gradle 來實現,大大簡化部署量。Spring 配置自動化:基於 Spring4.X,配置工作可以完全通過 Java 注釋的方式來實現,從而實現自動
化配置。生產就緒功能:指標、健康檢查、外部配置。去 XML 化:可以完全取消配置文件。

(三)SpringBoot 項目的創建

SpringBoot 實際上是大量開源庫的集合,可以非常方便的將插件部署到 Eclipse 等 IDE 中從而實現項目的開發,也可以通過 spring 提供的基於
eclipse 的開發工具 Spring Tool Suite 來進行開發,另外 Spring 也提供了在線創建項目的功能,將該創建的項目無縫對接到相應的 IDE 中。關於 SpringBoot
項目創建的更多信息可以關注 http://projects.spring.io 加以了解。

(四)SpringBoot 項目的目錄結構

* src/main/java 目錄:Java 原生代碼的存放位置。
* src/main/resources 目錄:是前端視圖相關的模板、資源存放的位置,其中 templates 子目錄存放由Thymeleaf 產生的視圖模板等,static 存放各類資源文件
* src/test/java 目錄:測試目錄

* JRE System Library:JRE 的庫目錄
* Maven Dependencies:Maven 的依賴庫目錄
* src 目錄:源碼目錄
* target 目錄:項目打包后的目標目錄
* pom.xml:Maven 的依賴文件

三、 MVC 模型

(一)模型原理

MVC 全稱是 Model、View、Controller,即模型、視圖、控制器。用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件里面,
在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業務邏輯。MVC 被獨特的發展起來用於映射傳統的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中。

(二)模型分析

MVC 開始是存在於桌面程序中的,M 是指業務模型,V 是指用戶界面,C 則是控制器,使用 MVC 的目的是將 M 和 V 的實現代碼分離,從而使同一個程
序可以使用不同的表現形式。比如一批統計數據可以分別用柱狀圖、餅圖來表示。C 存在的目的則是確保 M 和 V 的同步,一旦 M 改變,V 應該同步更新。
隨着 Web 應用開發的繁榮,MVC 已經隨着各類框架占據了市場的主導位置,各大開源框架源組織均推出自己的 MVC 框架,其中主要的有,JEE
(Jsp+Servlet+Model),SpringMVC,Asp.net MVC,SpringBootMVC,Struts MVC 等等。

(三)模型優勢

MVC 設計模型的優勢是:耦合度低、重用性高、部署快、可維護性高、生命周期成本低、可維護性高、利於工程化管理、市場占有率高等優勢。

(四)模型缺點

MVC 設計模型的缺點是:無明確定義、不適合小型、中等規模的應用程序、增加系統結構和實現的復雜性、視圖與控制器間的過於緊密的連接、視圖對
模型數據的低效率訪問、一般高級的界面工具或構造器不支持模式。

四、 SpringBoot 的 MVC 架構

 

SpringBoot 框架下有着完善的 MVC 設計模型支持,其在 SpringMVC4.x 基礎上進行了簡化操作,對於項目的配置工作采用自動化配置的方式,使得
在 SpringBoot 環境下進行 MVC 模式的開發變得尤為簡單。
SpringBoot 下 的 MVC 基 本 由 Controller + Thymeleaf+Model 組成,Controller 控制器 起 到 在View 和 Model 間 銜 接 作 用 ,Thymeleaf 是 View,
Model 有專門的類與其對應,對於數據的操作則完全通過 Model 來完成。下面我們詳細的介紹 MVC 各個組成部分。
1. 視圖層 Thymeleaf (百葉窗)

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
    xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">

<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="renderer" content="webkit">
<meta http-equiv="Cache-Control" content="no-siteapp" />
<title>H+ 后台主題UI框架 - 主頁</title>

<meta name="keywords" content="H+后台主題,后台bootstrap框架,會員中心主題,后台HTML,響應式后台">
<meta name="description"
    content="H+是一個完全響應式,基於Bootstrap3最新版本開發的扁平化主題,她采用了主流的左右兩欄式布局,使用了Html5+CSS3等現代技術">

<!--[if lt IE 9]>
    <meta http-equiv="refresh" content="0;ie.html"/>
    <![endif]-->

<link rel="shortcut icon" href="favicon.ico">
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/font-awesome.min.css" rel="stylesheet">
<link href="../css/animate.min.css" rel="stylesheet">
<link href="../css/style.min.css" rel="stylesheet">
</head>

<body class="fixed-sidebar full-height-layout gray-bg"
    style="overflow: hidden">
    <div id="wrapper">
        <!--左側導航開始-->
        <nav class="navbar-default navbar-static-side" role="navigation">
            <div class="nav-close">
                <i class="fa fa-times-circle"></i>
            </div>
            <div class="sidebar-collapse">
                <ul class="nav" id="side-menu">
                    <li class="nav-header">
                        <div class="dropdown profile-element">
                            <span><img alt="image" class="img-circle"
                                src="../image/1.jpg" /></span> <a data-toggle="dropdown"
                                class="dropdown-toggle" href="#"> <!-- <span class="clear">
                                        <span class="block m-t-xs"><strong class="font-bold">admin</strong></span>
                                    <span class="text-muted text-xs block">超級管理員<b class="caret"></b></span>
                                    </span> -->
                            </a>
                            <ul class="dropdown-menu animated fadeInRight m-t-xs">

                                <li class="divider"></li>
                                <li><a href="login.html">安全退出</a></li>
                            </ul>
                        </div>
                        <div class="logo-element">PRAS</div>
                    </li>

                    <li><a href="#"> <i class="fa fa-database"></i> <span
                            class="nav-label">對比庫管理</span> <span class="fa arrow"></span>
                    </a>
                        <ul class="nav nav-second-level">
                            <li><a class="J_menuItem" href="form_file_upload.html"
                                th:href="@{/page/form_file_upload}">政策添加</a></li>
                            <li><a class="J_menuItem" href="policy/table_basic.html"
                                th:href="@{/policy/list}">政策列表</a></li>
                        </ul></li>
                    
                    <li><a href="#"> <i class="fa fa-balance-scale"></i> <span
                            class="nav-label">部門管理</span> <span class="fa arrow"></span>
                    </a>
                        <ul class="nav nav-second-level">
                            <li><a class="J_menuItem"
                                href="department/department_list1.html"
                                th:href="@{/department/list}">部門列表</a></li>
                        </ul></li>
                
                    <li><a href="#"> <i class="fa fa-gg-circle"></i> <span
                            class="nav-label">政策審查</span> <span class="fa arrow"></span>
                    </a>
                        <ul class="nav nav-second-level">
                            <li><a class="J_menuItem" href=""
                                th:href="@{/page/analysis_add}">系統審查</a></li>
                            <li><a class="J_menuItem" href=""
                                th:href="@{/reviewlegitimacy/list}">審查列表</a></li>

                        </ul></li>
                    <li>
                     <a href="#">
                            <i class="fa fa-search"></i> <span class="nav-label">政策對比</span>
                            <span class="fa arrow"></span>
                    </a>
                        <ul class="nav nav-second-level">
                            <li><a class="J_menuItem" href=""
                                th:href="@{/page/review_add}">文件對比</a></li>
                            <li><a class="J_menuItem" href=""
                                th:href="@{/policycompare/list}">對比列表</a></li>
                        </ul>

                    </li>
                    <li>
                         <a href="#">
                            <i class="fa fa-bar-chart"></i> <span class="nav-label">分析查找</span>
                            <span class="fa arrow"></span>
                    </a>
                        <ul class="nav nav-second-level">
                             <li>
                            <a class="J_menuItem" href="graph_echarts.html" th:href="@{/page/graph_echarts}">執行效果查看</a>
                        </li>
                        <li>
                            <a class="J_menuItem" href="relationship/timeline_v2.html" th:href="@{/page/timeline_v2}">歷史政策查詢</a>
                        </li>
                        <li>
                            <a class="J_menuItem" href="graph_relative.html" th:href="@{/EsPolicy/findByPage}"
                            >政策條款查詢</a>
                        </li>


                        </ul>

                    </li>
                    
                    <li><a href="#"> <i class="fa fa-briefcase"></i> <span
                            class="nav-label">系統管理</span> <span class="fa arrow"></span>
                    </a>
                        <ul class="nav nav-second-level">
                            <li><a class="J_menuItem" href="User/clients.html"
                                th:href="@{/user/findByPage}">用戶列表</a></li>
                            <li><a class="J_menuItem" href="#"
                                th:href="@{/sensitive/list}">敏感詞列表</a></li>
                        </ul></li>
                </ul>
            </div>
        </nav>
        <!--左側導航結束-->
        <!--右側部分開始-->
        <div id="page-wrapper" class="gray-bg dashbard-1">
            <div class="row border-bottom">
                <nav class="navbar navbar-static-top" role="navigation"
                    style="margin-bottom: 0">
                    <div class="navbar-header">
                        <a class="navbar-minimalize minimalize-styl-2 btn btn-primary "
                            href="#"><i class="fa fa-bars"></i> </a>
                        <form role="search" class="navbar-form-custom" method="post"
                            action="search_results.html">
                            <div class="form-group">
                                <input type="text" placeholder="請輸入您需要查找的內容 …"
                                    class="form-control" name="top-search" id="top-search">
                            </div>
                        </form>
                    </div>
                    <ul class="nav navbar-top-links navbar-right">
                        <li class="dropdown"><a class="dropdown-toggle count-info"
                            data-toggle="dropdown" href="#"> <i class="fa fa-envelope"></i>
                                <span class="label label-warning">16</span>
                        </a></li>


                    </ul>
                </nav>
            </div>
            <div class="row content-tabs">
                <button class="roll-nav roll-left J_tabLeft">
                    <i class="fa fa-backward"></i>
                </button>
                <nav class="page-tabs J_menuTabs">
                    <div class="page-tabs-content">
                        <a href="javascript:;" class="active J_menuTab"
                            data-id="index_v2.html">首頁</a>
                    </div>
                </nav>
                <button class="roll-nav roll-right J_tabRight">
                    <i class="fa fa-forward"></i>
                </button>
                <div class="btn-group roll-nav roll-right">
                    <button class="dropdown J_tabClose" data-toggle="dropdown">
                        關閉操作<span class="caret"></span>

                    </button>
                    <ul role="menu" class="dropdown-menu dropdown-menu-right">
                        <li class="J_tabShowActive"><a>定位當前選項卡</a></li>
                        <li class="divider"></li>
                        <li class="J_tabCloseAll"><a>關閉全部選項卡</a></li>
                        <li class="J_tabCloseOther"><a>關閉其他選項卡</a></li>
                    </ul>
                </div>
                <a href="login_v2.html" th:href="@{/user/logout}"
                    class="roll-nav roll-right J_tabExit"><i
                    class="fa fa fa-sign-out"></i> 退出</a>
            </div>
            <div class="row J_mainContent" id="content-main">
                <iframe class="J_iframe" name="iframe0" width="100%" height="100%"
                    src="index_v2.html" frameborder="0" data-id="index_v2.html"
                    seamless></iframe>
            </div>
            <div class="footer">
                <div class="pull-right">&copy; 科技政策審查</div>
            </div>
        </div>
        <!--左側部分結束-->

    </div>
    <script src="../js/jquery.min.js"></script>
    <script src="../js/bootstrap.min.js"></script>
    <script src="../js/plugins/metisMenu/jquery.metisMenu.js"></script>
    <script src="../js/plugins/slimscroll/jquery.slimscroll.min.js"></script>
    <script src="../js/plugins/layer/layer.min.js"></script>
    <script src="../js/hplus.min.js"></script>
    <script type="text/javascript" src="../js/contabs.min.js"></script>
    <script src="../js/plugins/pace/pace.min.js"></script>
</body>

</html>

代碼 說明:
● ${...} 變量表達式
● *{...} 選擇變量表達式
● #{...} 消息表達式
● @{...} 鏈接 url 表達式
● Thymeleaf 是嵌入到 Html 的標簽當中,引入標識是 th:開頭。
● <th th:text="# {msgs.headers.name}">Name</th>:是將由后台傳遞過來的信息頭中的 name 屬性值顯示在<th>標簽中
● <tr th:each="prod: ${allProducts}">:是准備
將后台對象 allProducts 的內容進行循環遍歷,每次循環遍歷的對象為 prod。<tr>下面的標簽為循環體內容,本例中其下面包括了兩個<td>標簽
● <td th:text="${prod.name}">Oranges</td>:同樣是循環體中的內容,在這個<td>標簽中將輸出本次循環對象 prod 的 name 屬性。

2控制器 Controller、RestController
當我們設計了前端視圖后,需要將前端用戶的請求進行處理、響應時,視圖需要將請求內容提交給后台服務器,接收該內容的即是 MVC 中的”C”控制
器,Controller 是在 Model 和 View 之間進行交流的中央樞紐,當 View 傳遞信息給 Model 時,或者
Model 將處理結果傳遞給 View 時,都是通過
Controller 來中轉,調度,處理的。
(1)Controller 簡介
在 SpringBoot 框架中,Controller 完全由代碼注釋的形式存在(如果大家習慣了配置文件的方式,需要去了解下 Java 的注釋技術及 Spring 的注釋配置技術,此文不做詳解)。
分類:在 SpringBoot 框架下,主要包括兩種
Controller,分別如下:
● Controller:基本的控制器,用於接收、傳輸純字符串信息,調用業務模型處理信息,也是SpringBoot 主要的控制器,它可以完成大部分 MVC
● RestController:該控制器是 SpringBoot 將WebService 技術與常用的數據封裝格式整合在一起,通過一定的技術規則,將原來較為復雜的數據封裝 技 術 簡 化 為 十 分 方 便 的 幾 個 步 驟 來 實 現
WebService 功能,常用的數據封裝格式(例如:Json、Xml)在 RestController 中均有支持。該控制器常常用在各類移動 App 的數據業務和大型綜合信息系統
的數據統一管理平台中使用。隨着移動 App 和大數據時代的來臨,以 WebService 方式的數據提供、管理模式得到了更多的企業和應用的喜悅。

 

3. 模型 Model
(1)Model 的作用
Model 是 MVC 設計模型中的重要組成部分,其主要的工作是解決實際的業務需求,例如:數據的增加、插入、修改、刪除;各類業務的邏輯和算數
運算;項目外各類網絡接口的調用;服務器端硬件資源的調度等等。
(2)Model 的存在形式
Model 的存在形式在 SpringBoot 框架中是采用面向對象的理念,將 Model 主要完成的任務進行類化封裝,每個類對應一個功能完整的模型,類中的各
個方法對應模型的某一個功能點,當 Controller 需要調用 Model 解決實際的業務需求時,只需要調用Model 對應的類,創建對象,調用方法即可實現。
(3)Model 類
在 SpringBoot 框架中設置了一個專門的模型類Model,用於向 View 傳遞信息,下面我們可以通過一段代碼來展示 Model 類的使用方式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM