Spring MVC 應?分層

什么是應用分層
引用分層是一種軟件開發思想 將應用程序分為N個層次每個層次負責各個職責 其中MVC是常見的設計模式這就是應用分層的具體體現

目前主流的開發方式是前后段分離后端開發工程師不再需要關注前端的實現,對此就需要分為表現層,數據層,業務邏輯層

表現層:就是展?數據結果和接受??指令的,是最靠近??的?層;
業務邏輯層:負責處理業務邏輯, ??有復雜業務的具體實現;
數據層:負責存儲和管理與應?程序相關的數據

下面通過一個項目來實現應用分成代碼重構

圖書管理系統

登錄:??輸?賬號,密碼完成登錄功能
列表展?:展?圖書

服務器代碼
創建圖書類

package com.example.book;import lombok.Data;import java.math.BigDecimal;
import java.util.Date;@Data
public class BookInfo {//圖書 IDprivate Integer id;//書名private String bookName;//作者private String author;//數量private Integer count;//定價private BigDecimal price;//出版社private String publish;//狀態0-無效1-允許借閱private Integer status;private String statusCN;//創建時間private Date createTime;//更新時間private Date updateTime;}

創建UserController類 驗證登錄接口

package com.example.book.demos.web;import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpSession;@RequestMapping("/user")
@RestController
public class UserController {@RequestMapping("/login")public boolean login(String name, String password, HttpSession session){//賬號或密碼為空if(!StringUtils.hasLength(name) || !StringUtils.hasLength(password)){return false;}//模擬驗證數據賬號密碼正確if("admin".equals(name) && "admin".equals(password)){session.setAttribute("username",name);return true;}//賬號密碼錯誤return false;}
}

獲取圖書列表

package com.example.book.demos.web;import com.example.book.BookInfo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;@RequestMapping("/book")
@RestController
public class BookController {@RequestMapping("/getList")public List<BookInfo> getList(){//獲取數據List<BookInfo> books = mockData();//處理頁面展示for(BookInfo book : books){if(book.getStatus() == 1){book.setStatusCN("可借閱");}else {book.setStatusCN("不可借閱");}}return books;}//獲取圖書信息private List<BookInfo> mockData() {List<BookInfo> books = new ArrayList<>();for (int i = 0; i < 5; i++) {BookInfo book = new BookInfo();book.setId(i);book.setBookName("書籍" + i);book.setAuthor("作者" + i);book.setCount(i*5+3);book.setPrice(new BigDecimal(new Random().nextInt(100)));book.setPublish("出版社"+ i);book.setStatus(1);books.add(book);}return books;}
}

通過代碼可以看到這里的代碼都堆砌到一起不符合前面的思想

我們接下來通過代碼重構來實現應用分層
按照三個部分
(1)請求處理:響應數據負責接受請求給頁面響應數據
(2)邏輯處理:負責邏輯處理的代碼
(3)數據訪問:負責數據的操作增刪查改等
在這里插入圖片描述

public List<BookInfo> getList()

數據訪問

 List<BookInfo> books = mockData();//處理頁面展示for(BookInfo book : books){if(book.getStatus() == 1){book.setStatusCN("可借閱");}else {book.setStatusCN("不可借閱");}}

邏輯處理

 return books;

請求數據和響應
我們把上面的代碼分為上訴的三個部分
然后上面三個部分之中我們可以在Spring實現
Controller:控制層
Service:業務邏輯層
Dao:數據訪問層

代碼重構
我們先創建對應包路徑

在這里插入圖片描述
代碼拆分
控制層

package com.example.book.demos.web.controller;import com.example.book.model.BookInfo;
import com.example.book.service.BookService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RequestMapping("/book")
@RestController
public class BookController {@RequestMapping("/getList")public List<BookInfo> getList(){BookService bookService = new BookService();List<BookInfo> books = bookService.getBookList();return books;}
}

業務邏輯層

package com.example.book.service;import com.example.book.dao.BookDao;
import com.example.book.model.BookInfo;import java.util.List;public class BookService {public List<BookInfo> getBookList(){BookDao bookDao = new BookDao();List<BookInfo> books = bookDao.mockData();//處理頁面展示for(BookInfo book : books){if(book.getStatus() == 1){book.setStatusCN("可借閱");}else {book.setStatusCN("不可借閱");}}return books;}}

數據訪問層

package com.example.book.dao;import com.example.book.model.BookInfo;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class BookDao {//獲取圖書信息public List<BookInfo> mockData() {List<BookInfo> books = new ArrayList<>();for (int i = 0; i < 5; i++) {BookInfo book = new BookInfo();book.setId(i);book.setBookName("書籍" + i);book.setAuthor("作者" + i);book.setCount(i * 5 + 3);book.setPrice(new BigDecimal(new Random().nextInt(100)));book.setPublish("出版社" + i);book.setStatus(1);books.add(book);}return books;}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/19661.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19661.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/19661.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

FPGA DMA IP核使用指南

摘要 本文旨在介紹FPGA中DMA(Direct Memory Access)IP核的使用,包括其基本框架、測試代碼編寫以及仿真波形的分析。DMA是一種允許外圍設備直接與內存進行數據交換的技術,無需CPU的介入,從而提高了數據傳輸的效率。 1. 引言 在現代FPGA設計中,DMA IP核因其…

Day15—圖像爬蟲與簡單處理

圖像爬蟲是一種專門用于從互聯網上下載圖像的網絡爬蟲。除了文本內容,圖像也是網站中的重要組成部分,它們可以用于多種目的,如圖像識別、內容分析、數據備份等。 環境準備 首先,確保你的環境中已安裝Python和必要的庫。如果沒有安裝Pillow庫,可以通過以下命令安裝:pip in…

Leetcode刷題筆記6

34. 在排序數組中查找元素的第一個和最后一個位置 34. 在排序數組中查找元素的第一個和最后一個位置 - 力扣&#xff08;LeetCode&#xff09; 解法一&#xff1a;暴力查找 [1, 2, 3, 3, 3, 4, 5] t 3 從前往后掃描暴力查找&#xff0c;最壞情況下O(N) 優化 利用數組有序的…

【LLM多模態】綜述Visual Instruction Tuning towards General-Purpose Multimodal Model

note 文章目錄 note論文1. 論文試圖解決什么問題2. 這是否是一個新的問題3. 這篇文章要驗證一個什么科學假設4. 有哪些相關研究&#xff1f;如何歸類&#xff1f;誰是這一課題在領域內值得關注的研究員&#xff1f;5. 論文中提到的解決方案之關鍵是什么&#xff1f;6. 論文中的…

隨想錄 Day45 1049. 最后一塊石頭的重量 II 494. 目標和 474.一和零

隨想錄 Day45 1049. 最后一塊石頭的重量 II 494. 目標和 474.一和零 1049. 最后一塊石頭的重量 II 題目鏈接 有一堆石頭&#xff0c;用整數數組 stones 表示。其中 stones[i] 表示第 i 塊石頭的重量。 每一回合&#xff0c;從中選出任意兩塊石頭&#xff0c;然后將它們一起…

帶你學習Mybatis之Mybatis全局配置文件

Mybatis全局配置文件 <?xml version"1.0" encoding"UTF-8"?><configuration> <!-- 配置 --> <properties/> <!-- 屬性 --> <settings/> <!-- 設置 --> <typeAliases/> <!-- 類型別名 -->…

車載以太網的未來:OPEN Alliance下17個技術委員會的最新進展與行業影響(下)

從上篇介紹來看&#xff0c;TC1-TC8大多數處于暫停或完成狀態。而TC9-TC17在2023年都有不同程度的進展&#xff0c;讓我們繼續探索藏在其中的車載以太網的發展和挑戰。 TC9 Automotive Ethernet Channel & Components&#xff08;in progress&#xff09; TC9的目標是為通…

[初始計算機]——計算機網絡的基本概念和發展史及OSI參考模型

&#x1f3e1;作者主頁&#xff1a;點擊&#xff01; &#x1f916;網絡通信基礎TCP/IP專欄&#xff1a;點擊&#xff01; ??創作時間&#xff1a;2024年5月30日11點59分 &#x1f004;?文章質量&#xff1a;96分 ? 目錄 &#x1f310;計算機網絡概述 &#x1f4af;…

opencv是什么?它有什么功能和特性?它值不值得我們去學習?我們該如何去學習呢?

1.opencv是什么&#xff1f; OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一個開源的計算機視覺庫&#xff0c;旨在提供一系列豐富的圖像處理和計算機視覺算法&#xff0c;以及用于構建實時圖像處理和機器視覺應用程序的開發工具。它最初由英特爾開發…

使用QT可視化操作信號與槽函數詳解

新書上架~&#x1f447;全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目錄 一、引言 二、QT信號與槽機制概述 三、實際操作步驟 四、案例演示 五、總結 一、引言 在…

中國養生保健元宇宙-探索養生保健新領域

在全球化和科技迅速發展的今天&#xff0c;元宇宙作為一種全新的互聯網應用和社會形態&#xff0c;正逐步滲透到人們生活的各個方面。特別是在養生保健領域&#xff0c;中國的元宇宙概念正在引領一場革命&#xff0c;將古老的養生智慧與現代科技完美融合&#xff0c;為人們打造…

單片機建立自己的庫文件(1)

文章目錄 前言一、代碼模塊化是什么&#xff1f;二、使用步驟1.以LCD1602作為例子2.將LCD1602 相關的代碼抽取到另外一個文件中 三、調用LCD1602.h1.新建一個工程項目&#xff0c;將LCD1602.h添加到工程中2.在主函數上加入 #include <LCD1602.h> 總結 前言 提示&#xf…

進口鋁合金電動隔膜泵

進口鋁合金電動隔膜泵是一種高效、可靠的工業泵&#xff0c;其特點、性能與應用廣泛&#xff0c;以下是對其的詳細分析&#xff1a; 特點 材質與結構&#xff1a; 采用鋁合金材料制造&#xff0c;具有良好的耐腐蝕性和輕量化特點。鋁合金材質使得泵體結構緊湊、輕便&#xff…

svg實現一個圓形以及方形的環形進度條

1. svg實現圓形進度條 效果圖&#xff1a; 1. 寫個假接口&#xff1a; let res {curLegendList: [{ progress: "87", name: "進度1",color:"#00fe41" },{ progress: "66", name: "進度2" ,color:"orange"},{ p…

gitlab服務器遷移(親測有效)

描述&#xff1a;最近公司遷移gitlab&#xff0c;我沒有遷移過&#xff0c;經過網上查找資料最終完成遷移&#xff0c;途中也遇到挺多坑和兩個問題&#xff0c;希望能幫到你。 新服務器安裝gitlab 注意&#xff1a;新服務器gitlab版本也需要和舊版本一致。 首先查看原Gitlab…

基于Python實現地震數據可視化的設計與實現

基于Python實現地震數據可視化的設計與實現 “Design and Implementation of Earthquake Data Visualization using Python” 完整下載鏈接:基于Python實現地震數據可視化的設計與實現 文章目錄 基于Python實現地震數據可視化的設計與實現摘要第一章 引言1.1 研究背景1.2 研究…

RabbitMQ(三)SpringBoot整合,可靠性投遞,死信隊列,延遲隊列,消費端限流,消息超時

文章目錄 整合Springboot概述消費者生產者 消息可靠性投遞故障原因解決方案生產者端消息確認機制&#xff08;故障情況1&#xff09;故障情況2解決方案故障情況3解決方案 消費端限流概念 消息超時概念隊列層面&#xff1a;配置隊列過期消息本身&#xff1a;配置消息過期 死信隊…

C++中的虛函數和純虛函數

目錄 摘要 虛函數&#xff08;Virtual Functions&#xff09; 定義 用法 純虛函數&#xff08;Pure Virtual Functions&#xff09; 定義 用法 需要避開的坑 總結 摘要 在C中&#xff0c;我們經常會在開發中使用到虛函數&#xff08;Virtual Functions&#xff09;和…

如何有效屏蔽手機上的騷擾電話20240530

如何有效屏蔽手機上的騷擾電話 引言 最近&#xff0c;我的手機經常接到954開頭的7位數字座機電話&#xff0c;這些騷擾電話讓我非常困擾。由于我經常點外賣&#xff0c;無法屏蔽所有陌生號碼&#xff0c;因此需要一個既能屏蔽特定前綴的騷擾電話&#xff0c;又不影響日常生活…

英偉達(NVIDIA)H100性能及應用場景

英偉達H100是一款性能強大的GPU芯片&#xff0c;其關鍵性能參數和應用領域可以歸納如下&#xff1a; 一、性能參數 架構&#xff1a;H100采用了新一代的Hopper架構&#xff0c;擁有高達1.8萬億次/秒的張量處理能力和高達840 TFLOPS的FP8張量性能。CUDA核心數&#xff1a;H100…