16-01動吧旅遊生態系統的設計-整體設計

1 項目簡介
1.1 概述
動吧旅遊生態系統,應市場高端用戶需求,決定開發這樣的一套旅遊系統,此係統包含旅遊電商系統(推薦子系統,廣告子系統,評價子系統,商品子系統,訂單子系統)等,旅遊分銷系統(分銷商的管理),旅遊業務系統(產品研發,計調服務,系統權限管理子系統)等。
1.2 原型分析
基於用戶需求,進行原型設計(基於html+css+js進行靜態頁面實現)。例如系統登陸頁面:
image.png
系統登陸成功頁面(例如starter.html)
image.png
菜單展現頁面
image.pngcss

2 技術架構

2.1 項目分層架構

本項目應用層基於MVC設計思想,進行分層架構設計,目的是將複雜問題簡單化,實現各司其職,各盡所能.而後基於「高內聚,低耦合」的設計思想,再實現各對象之間協同,從而提升系統的可維護性,可擴展性。
image.png
其中:
1.開放接口層:可直接封裝 Service 方法暴露成 RPC (遠程過程調用)接口;也可經過 Web 封裝成 http 接口;同時也可進行網關安全控制、流量控制等。
2.終端顯示層:負責各個端的模板渲染並顯示。當前主要是 thymeleaf 渲染,JS 渲染,移動端展現等。
3.Web請求處理層:主要是對訪問控制進行轉發,請求參數校驗,響應結果處理等
4.Service 層:相對具體的業務邏輯服務層(核心業務,擴展業務)。
5.Manager 層:通用業務處理層,它有以下特徵:
1) 對第三方平臺封裝的層,預處理返回結果及轉化異常信息;
2) 對 Service 層通用能力的下沉,如緩存方案、中間件通用處理;
3) 與 DAO 層交互,對多個 DAO 的組合複用。
6.DAO 層:數據訪問層,與底層 MySQL、Oracle、Hbase 等進行數據交互。
7.外部接口或第三方平臺:包括其它部門RPC開放接口,基礎平臺,其它公司的 HTTP 接口
說明:對如上分層中涉及到知識的點,逐步增強。
總之:分層的目的就是將複雜問題進行拆解,而後分而治,進而提升系統的可擴展性以及可維護性。html

2.2 API應用架構

總體API應用架構:
image.pngjava

3 技術整合

3.1 環境準備

3.1.1 數據庫初始化

3.1 啓動 MySQL 客戶端並登錄,而後執行
1) set names utf8;
2) source d:/dbpms.sql
說明:假如在 mysql 客戶端查詢表中數據,能夠先執行 set names gbk,不然可能會出
現亂碼。還有一點要記住,在拿到任何一個 sql 腳本文件時,不要上來就執行它,要先打開
看一看,檢查是否有刪除庫或刪除表的語句,這些語句是否會對你當前數據庫中的庫和表
有影響 ,假若有必定要通過 leader 審批,才能執行刪除等操做.
3.2 建立項目
3.2.1 建立項目 moudlemysql

  1. 各項目模塊關係設計,如圖所示:

image.png

  1. 建立父工程,如圖所示:

image.png
項目建立之後,將項目 module 中的 src 刪除,並打開項目中的 pom 文件,修改 module 爲pom 工程,代碼以下:web

<packaging>pom</packaging>

在 parent 工程建立後之後,添加相關依賴,pom 文件以下:spring

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.3.5.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
 </parent>
   <groupId>com.cy</groupId>
   <artifactId>15-dbpms-parent</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>15-dbpms-parent</name>
   <description>Demo project for Spring Boot</description>
   <packaging>pom</packaging>
   <properties>
      <java.version>1.8</java.version>
   </properties>
   <dependencies>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-actuator</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-data-jdbc</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-thymeleaf</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <dependency>
         <groupId>org.mybatis.spring.boot</groupId>
         <artifactId>mybatis-spring-boot-starter</artifactId>
         <version>2.1.3</version>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-devtools</artifactId>
         <scope>runtime</scope>
         <optional>true</optional>
      </dependency>
      <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <scope>runtime</scope>
      </dependency>
      <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
         <optional>true</optional>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-aop</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
         <exclusions>
            <exclusion>
               <groupId>org.junit.vintage</groupId>
               <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
         </exclusions>
      </dependency>
   </dependencies>
   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>
</project>
  1. 建立 dbms-common 工程,如圖所示:
    image.png
    common 工程中 pom.xml 文件代碼以下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
      <groupId>com.cy</groupId>
      <artifactId>15-dbpms-parent</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <relativePath/> <!-- lookup parent from repository -->
 </parent>
   <groupId>com.cy</groupId>
   <artifactId>15-dbpms-common</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>15-dbpms-common</name>
   <description>Demo project for Spring Boot</description>
   <packaging>jar</packaging>
   <properties>
      <java.version>1.8</java.version>
   </properties>
</project>
  1. 建立 dbms-admin 工程,如圖所示:

image.png
5.dbpms-admin 工程 pom.xml 文件sql

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
      <groupId>com.cy</groupId>
      <artifactId>15-dbpms-parent</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <relativePath/> <!-- lookup parent from repository -->
 </parent>
   <groupId>com.cy</groupId>
   <artifactId>15-dbpms-admin</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>15-dbpms-admin</name>
   <description>Demo project for Spring Boot</description>
   <packaging>jar</packaging>
   <properties>
      <java.version>1.8</java.version>
   </properties>
   <dependencies>
      <dependency>
         <groupId>com.cy</groupId>
         <artifactId>15-dbpms-common</artifactId>
         <version>0.0.1-SNAPSHOT</version>
      </dependency>
   </dependencies>
</project>

3.2.2 修改配置文件
在 application.yml 文件中添加以下配置(server,datasource,mybatis,mvc)數據庫

server:
  port: 80
spring:
  main:
    banner-mode: off
 datasource:
    url: jdbc:mysql:///dbpms?serverTimezone=GMT%2B8&characterEncoding=utf8
    username: root
    password: root
  thymeleaf:
    prefix: classpath:/templates/modules/
    suffix: .html
    cache: false
mybatis:
  mapper-locations: classpath:/mapper/*/*.xml
logging:
  level:
    com.cy: debug

3.3 首頁初始化
3.3.1 定義頁面初始資源apache

  1. 將 相關資源拷貝到項目 static 目錄
  2. 將 資源拷貝到項目的 templates 的 moudles 目錄

3.3.2 建立頁面 Controller
建立呈現首頁頁面的 controller 對象。此 controller 會做爲項目中全部頁面訪問的入口。緩存

package com.cy.pj.sys.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@RequestMapping("/")
@Controller//處理客戶端全部頁面請求
public class PageController {
    @RequestMapping("doIndexUI")
    public String doIndexUI(){
        return "starter";
    }
}

3.3.3 啓動項目進行測試
啓動 tomcat,在地址欄輸入 http://localhost/doIndexUI(地址中的端口號要參考本身tomcat 啓動端口)地址進行訪問,假如沒有問題會呈現以下頁面:
image.png
頁面訪問流程分析,以下圖所示:
image.png

4 總結

4.1 重點難點分析

  1. 項目需求調研,分析,原型設計,評審?
  2. 項目總體應用分層架構及API設計架構?
  3. 項目初始化環境配置(數據庫,IDE,MAVEN)及運行?

4.2 FAQ分析

  1. 項目是如何進行分層設計的?(MVC)。
  2. 項目頁面是如何設計的? (BootStrap,AdminLTE-網址(adminlte.io))。
  3. 客戶端向服務端發起一個請求,服務端請求處理的一個過程是怎樣的?

4.3 BUG分析

  • 請求資源不存在,以下圖所示:


問題分析:

  1. 檢查url是否正確(是否有對應的映射)
  2. 檢查controller的包是否正確以及是否有對應的註解(例如@Controller)進行描述
  • 響應資源解析異常,以下圖所示:

image.png
問題分析:

  1. 假如start是模板,檢查響應頁面是否存在.
  2. 檢查配置文件中視圖的前綴、後綴是否正確
  3. 假如start不是html模板,檢查對應的Controller方法上是否有@ReponseBody註解
相關文章
相關標籤/搜索