應用架構的發展趨勢

屬性 信息
文檔名稱 應用架構的發展趨勢
版本號 V0.0.0.0

文檔修改日誌

修改時間 修改人 修改描述 版本號
2019-12-29 15:23 宋全恆 新建應用架構的發展趨勢 V0.0.0.0

1 簡介

辛格的這本《Java設計模式及實踐》是在11月28日看完的,三類設計模式、7大設計模式原則都在本書進行了闡述,自己也通過博客的輸出嘗試着及時的重複和強化關於這本書的記憶,總結博客的目的就是爲了對這些材料能夠強化記憶,在《高效記憶法》中,提高記憶效率的條件如下:
在這裏插入圖片描述
並且,記憶策略的主要原則如下圖所示:
在這裏插入圖片描述
通過不斷的總結,翻書頁,目的很明確,就是不斷的增強自己的知識基礎,並且提高興趣,因爲人越是感興趣的東西,注意力程度就會越高,在程序員寫個人技術博客的價值與意義博文中,作者對於技術人員撰寫博客的意義是如下闡述的:
在這裏插入圖片描述
確實,通過不斷的在自己的專業領域深耕細作,不斷加深對於技術的認識和理解,自己確實在這樣的實踐過程中取得了不少的進步,因此,寫博客這個行爲自己會堅持實踐,並且在即將到來的2020年,自己要堅持每週輸出兩篇博客。自己會做到的。

2 應用架構的含義

開發應用程序之前,首先要確定的是要使用的架構設計。本文主要是對《設計模式及實踐》第8章應用架構的梳理。應用架構(Software Architecture)在辛格認爲,是在開發應用程序時,首先會有一系列的需求,設計出可以滿足所有需求的解決方案,這種設計方案就叫做應用程序架構,架構不僅僅要關注當前的需求,還應該將未來預期變化考慮在內。軟件架構的定義還有如下的內容:

軟件架構代表了系統的組織結構。這包括將系統分解爲不同的部分、界定它們之間的連接、確定它們之間的交換機制、並且爲後續的設計提供指導性的原則。

IEEE在2004年4月公佈的“IEEE Standard 1471”中,提出了IEEE自己對軟件架構的定義:“軟件系統架構是根據具有參考意義的實踐而定義出來的。主要表述了有一個系統的基本組織結構、基本組成構件和互相的關係,以及構件於外部環境間的關係。同時,軟件系統架構爲後續的設計和架構演化提供了指導性原則”。
本文與《設計模式及實踐》目錄結構一致,主要闡述如下的幾種應用架構風格。
在這裏插入圖片描述

3 應用架構的分類

在這裏插入圖片描述

3.1 分層架構

嘗試將代碼和實現劃分爲不同的曾,使每個層都有固定的職責,沒有一種固定的分層方式可以適合所有項目,一個常見的web應用分層體系架構如下圖所示:
在這裏插入圖片描述
分層架構的主要內容如下所示:
在這裏插入圖片描述
五層架構的內容如下:
在這裏插入圖片描述

3.2 MVC架構

在這裏插入圖片描述在這裏插入圖片描述
顧名思義,將應用程序分爲三個部分:模型、視圖、控制器。

3.2.1 模型

模型:模型是數據的表示形式。數據是任何應用的關鍵部分,模型層負責組織和實現用以管理和修改數據的邏輯,它會處理在數據被修改時所能發生的任何事件,簡而言之,模型實現了核心業務。

3.2.2 視圖

視圖:應用中的另一個重要部分是視圖,即與終端用戶交互的部分。視圖負責向終端用戶展示信息並從用戶獲取輸入,該層需要確保終端用戶能夠獲得預期的功能。

3.2.3 控制器

控制器:控制器主要用於控制流。當視圖上發生某些操作時,它會通知控制器,然後控制器確定這項活動是否會反過來作用於模型和視圖。

3.2.4 交互

在這裏插入圖片描述在這裏插入圖片描述

3.2.5 工作流程

  1. Spring MVC遵循前端控制器模式,意味着所有請求最初都必須流經定都servlet
  2. 前端控制器將請求傳遞給用於處理特定請求的控制器。
  3. 控制器基於請求更新模型,並將模型返回。
  4. 框架選擇用於處理當前請求的視圖並將模型傳遞給它。
  5. 視圖(通常是JSP頁面)根據提供的模型呈現數據。
  6. 最終響應(通常是HTML頁面)被髮送回呼叫代理或瀏覽器。

3.2.6 實踐

3.2.6.1 web.xml

  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextClass</param-name>
      <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
    </init-param>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>com.employee.config.EmployeeConfig</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/mvc/*</url-pattern>
  </servlet-mapping>
</web-app>

告訴web.xml所有帶/mvn/pattern的請求都會被重定向到前端控制器,即Spring MVC
de DispatcherServlet,其中也確定了配置文件EmployeeConfig的內容。

3.2.6.2 init-param

package com.employee.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;

@EnableWebMvc
@Configuration
@ComponentScan(basePackages = "com.employee.*")
/**
 * The main Configuration class file.
 */
public class EmployeeConfig {

    @Bean
    /**
     * Configuration for view resolver
     */
    public ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/pages/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }
}

告訴應用程序索要使用Web MVC框架以及組件的位置。通過視圖解析器通知應用程序視圖的位置和格式。

3.2.6.3 控制器

package com.employee.controller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.employee.dal.EmployeeDAL;
import com.employee.model.Employee;

@Controller
@RequestMapping("/employees")
/**
 * This class implements controller for Employee Entity
 */
public class EmployeeController {
    /**
     * This method returns view to display all the employees in the system.
     *
     * @return Employee List
     * @throws ServletException
     * @throws IOException
     */
    @RequestMapping(method = RequestMethod.GET, value = "/")
    public ModelAndView getEmployeeList(ModelAndView modelView) throws ServletException, IOException {
        List<Employee> empList = new ArrayList<Employee>();
        
        EmployeeDAL empDAL = new EmployeeDAL();
        
        empList = empDAL.getEmployeeList();
        modelView.addObject("employeeList", empList);
        modelView.setViewName("employees");
        return modelView;
    }
}

可以看到該控制器以模型的形式(ModelAndView modelView)獲取數據,並嚮應用程序告知當前請求的視圖,返回包含有關視圖和模型的信息的ModelAndView對象。控制器會把它傳遞給視圖

3.2.6.4 視圖

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN" “http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content= text/html; charset=UTF-8">
<title>Welcome to Spring</title>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
</head>
<body>
<table>
<th>Name</th>
<th>Email</th>
<th>Address</th>
<th>Telephone</th>
<th>Action</th>
 
<c:forEach var="employee" items="${employeeList}">
    <tr>

        <td>${employee.id}</td>
        <td>${employee.name}</td>
        <td>${employee.designation}</td>
    </tr>
</c:forEach>
</table>

</body>
</html>

上述JSP的功能就是創建一個表格形式顯示員工詳細信息的HTML。

3.3 面向服務架構

在這裏插入圖片描述

SOA(Service Oriented Architecture)“面向服務的架構”:他是一種設計方法,其中包含多個服務, 服務之間通過相互依賴最終提供一系列的功能。一個服務通常以獨立的形式存在於操作系統進程中。各個服務之間通過網絡調用。

 當討論面向服務的架構時,主要討論的內容就是應用程序的各種服務和可重用單元。將一個應用程序劃分爲10個獨立服務,架構的複雜度降低了是對,團隊也化成10個部分,維護較小的團隊更容易。

3.3.1 面向服務架構示例

SOA在員工管理系統的結構如下:
在這裏插入圖片描述
面向服務架構主要有如下的內容:
在這裏插入圖片描述
ESB的架構如下:
在這裏插入圖片描述

ESB(企業服務總線),簡單 來說 ESB 就是一根管道,用來連接各個服務節點。爲了集 成不同系統,不同協議的服務,ESB 做了消息的轉化解釋和路由工作,讓不同的服務互聯互通;由圖可以看到ESB角色作用類似於中介者模式。

3.4 微服務架構

在這裏插入圖片描述
微服務架構:其實和 SOA 架構類似,微服務是在 SOA 上做的昇華,微服務架構強調的一個重點是“業務需要徹底的組件化和服務化”,原有的單個業務系統會拆分爲多個可以獨立開發、設計、運行的小應用。這些小應用之間通過服務完成交互和集成。
微服務架構 = 80%的SOA服務架構思想 + 100%的組件化架構思想 + 80%的領域建模思想
基於微服務的架構建議將服務劃分爲細粒度級別,相較於SOA而言,微服務概念的一個重要區別時每個微服務可以進行獨立的測試和部署。

3.4.1 基本內容

在這裏插入圖片描述

3.4.2 特徵

在這裏插入圖片描述

3.4.3 挑戰

在這裏插入圖片描述

3.5 無服務架構

無論是分層架構、三層架構、SOA或者微服務都是依賴於基礎設施的。設計應用程序時需要考慮系統如何擴展或縮小,如何滿足系統的性能需求,如何部署服務,需要多少實例和服務,應用程序的容量是多少等。但現在早已從硬件部署轉向了基於雲的部署。另一個重要的原因是基礎設施的資源浪費或者過度使用。
無服務部署,它以服務的方式提供基礎設施資源,其主旨是開發團隊只需要關注代碼,雲服務提供商負責應用程序的基礎設施需求,包括對資源的擴展。
只需要爲使用的資源進行支付;無需實現對任何基礎設施容量提出要求;服務提供商負責擴展所需的計算能力。

3.5.1 基本內容

在這裏插入圖片描述
4 總結
通過本文的閱讀,讀者可以瞭解正在軟件開發界流行的應用架構體系,由於在實際工作中並沒有固定的規則,因此還是需要開發人員隨機應變,根據當前的問題進行架構的定製。在閱讀過程中,雖然MVC模式之前自己從來沒有接觸過(筆者開始Java開發時直接使用的分層架構),自己理解了Spring MVC的工作流程,還是不錯的。
中午來到單位也完成了對《高效記憶法》中掌握時間節奏,
在這裏插入圖片描述

																		2019-12-29 18:32 於馬塍路36
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章