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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

编码风格:Mvc模式下SSM环境,代码分层管理

發(fā)布時間:2025/3/17 c/c++ 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编码风格:Mvc模式下SSM环境,代码分层管理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文源碼:GitHub·點這里 || GitEE·點這里

一、分層策略

MVC模式與代碼分層策略,MVC全名是ModelViewController即模型-視圖-控制器,作為一種軟件設(shè)計典范,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個部件里面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業(yè)務(wù)邏輯,這是一種開發(fā)模式,但并不是實際開發(fā)中代碼的分層模式,通常SSM框架的后端代碼分層如下:

  • controller控制層:定義服務(wù)端接口,入?yún)⒊鰠?#xff0c;和一些入?yún)⑿r?#xff1b;
  • service業(yè)務(wù)服務(wù)層:組裝業(yè)務(wù)邏輯,業(yè)務(wù)校驗,構(gòu)建控制層需要的參數(shù)模型;
  • dao數(shù)據(jù)交互層:提供服務(wù)層需要的數(shù)據(jù)查詢方法,處理數(shù)據(jù)交互條件相關(guān)的邏輯;
  • mapper持久層:基于mybatis框架需要的原生支持,目前很常用的持久層組件;

二、控制層

1、Rest接口風格

基于資源訪問和處理的邏輯,使用不同風格的注解。例如資源新增,更新,查詢,刪除。

/*** 新增*/ @PostMapping("/insert") public Integer insert (@RequestBody BaseInfo baseInfo){return baseInfoService.insert(baseInfo); } /*** 更新*/ @PutMapping("/update/{id}") public String update(@PathVariable(value = "id") Integer id,@RequestBody BaseInfo baseInfo) {if (id<1){return "error";}baseInfo.setId(id);return "update="+baseInfoService.update(baseInfo); } /*** 主鍵查詢*/ @GetMapping("/detail/{id}") public InfoModel detail(@PathVariable(value = "id") Integer id) {return baseInfoService.detail(id) ; } /*** 主鍵刪除*/ @DeleteMapping("/delete/{id}") public String delete(@PathVariable(value = "id") Integer id) {baseInfoService.delete(id) ;return "SUS" ; }

2、接口復(fù)用度

不建議接口高度復(fù)用,例如增刪改查都各自對接接口即可,基本原則,不同的客戶端端操作,對于獨立的接口。

/*** 列表加載*/ @GetMapping("/list") public List<BaseInfo> list() {return baseInfoService.list(new BaseInfoExample()) ; } /*** 列表搜索*/ @PostMapping("/search") public List<BaseInfo> search (@RequestParam("userName") String userName,@RequestParam("phone") String phone) {return baseInfoService.search(userName,phone) ; }

例如常見的list接口,list通常都有會按條件加載的search機制,而且搜索的判斷條件很復(fù)雜,建議分為兩個接口,從實際考慮,大部分場景下都是只使用list接口,很少使用search搜索。

3、入?yún)⒊鰠?/strong>

校驗客戶端必須條件,例如某某條件必填必選等,如果有問題,快速阻斷請求鏈路,做到程序入口控制層攔截返回。

@PutMapping("/update/{id}") public String update(@PathVariable(value = "id") Integer id,@RequestBody BaseInfo baseInfo) {if (id<1){return "error";}baseInfo.setId(id);return "update="+baseInfoService.update(baseInfo); }

參數(shù)在三個以下,可以直接陳列入?yún)?#xff0c;參數(shù)在三個或三個以上可以使用實體類統(tǒng)一封裝。

@PostMapping("/search") public List<BaseInfo> search (@RequestParam("userName") String userName,@RequestParam("phone") String phone) {return baseInfoService.search(userName,phone) ; }

4、參數(shù)處理

出參格式處理度基本原則,服務(wù)器作為公共資源,避免非必要操作,例如客戶端可自行判斷返回值是否為空,null等,或者一些常見格式處理,利用客戶端適當分擔服務(wù)器壓力。

三、業(yè)務(wù)服務(wù)層

1、業(yè)務(wù)校驗

例如傳入訂單號,經(jīng)過數(shù)據(jù)庫層查詢,沒有訂單數(shù)據(jù),這里稱為業(yè)務(wù)性質(zhì)的異常,代碼本身沒有問題,但是業(yè)務(wù)邏輯無法正常執(zhí)行。

public InfoModel detail(Integer id){BaseInfo baseInfo = baseInfoDao.selectByPrimaryKey(id) ;if (baseInfo != null){DetailInfoEntity detailInfoEntity = detailInfoDao.getById(id);if (detailInfoEntity == null){LOG.info("id="+id+"數(shù)據(jù)缺失 DetailInfo");}return buildModel(baseInfo,detailInfoEntity) ;}LOG.info("id="+id+"數(shù)據(jù)完全缺失");return null ; }

2、組裝業(yè)務(wù)邏輯

通常情況下服務(wù)層作為邏輯做復(fù)雜的一塊,用來拼接業(yè)務(wù)核心步驟,可以通過業(yè)務(wù)邏輯判定,一步一步執(zhí)行程序,避免在程序入口做大量可能用到的對象創(chuàng)建和需求數(shù)據(jù)查詢。

public int insert (BaseInfo record){record.setCreateTime(new Date());int insertFlag = baseInfoDao.insert(record);if (insertFlag > 0){DetailInfoEntity detailInfoEntity = new DetailInfoEntity();detailInfoEntity.setUserId(record.getId());detailInfoEntity.setCreateTime(record.getCreateTime());if(detailInfoDao.save(detailInfoEntity)){return insertFlag ;}}return insertFlag; }

3、數(shù)據(jù)模型構(gòu)建

通常情況業(yè)務(wù)層是偏復(fù)雜的,如果想關(guān)快速理解業(yè)務(wù)層,可以對復(fù)雜的業(yè)務(wù)方法,在提供一個返參構(gòu)建的方法,用來處理服務(wù)層要向控制層回傳的參數(shù),這樣可以讓重度的服務(wù)層方法變的清晰。

private InfoModel buildModel (BaseInfo baseInfo,DetailInfoEntity detailInfo){InfoModel infoModel = new InfoModel() ;infoModel.setBaseInfo(baseInfo);infoModel.setDetailInfoEntity(detailInfo);return infoModel ; }

四、數(shù)據(jù)交互層

1、逆向工程

這里以使用mybatis框架或者mybatis-plus框架作為參考。如果是mybatis框架,建議逆向工程的模板代碼不做自定義的修改,如果需要自定義方法,在mapper和xml層面再自定義一個擴展文件,用來存放自定義的方法和SQL邏輯,這樣避免表結(jié)構(gòu)變動大引發(fā)的強烈不適。

當然現(xiàn)在大部分都會mybatis-plus作為持久層組件,可以避免上述問題。

2、數(shù)據(jù)交互

針對業(yè)務(wù)層的需要,提供相應(yīng)的數(shù)據(jù)查詢方法,只處理與數(shù)據(jù)庫交互的邏輯,避免出現(xiàn)業(yè)務(wù)邏輯,尤其在分布式架構(gòu)下,不同服務(wù)的數(shù)據(jù)查詢和組裝,不應(yīng)該出現(xiàn)在該層。

public interface BaseInfoDao {int insert(BaseInfo record);List<BaseInfo> selectByExample(BaseInfoExample example);int updateByPrimaryKey(BaseInfo record);BaseInfo selectByPrimaryKey(Integer id);int deleteByPrimaryKey(Integer id);BaseInfo getById (Integer id) ; }

五、源代碼地址

GitHub·地址 https://github.com/cicadasmile/data-manage-parent GitEE·地址 https://gitee.com/cicadasmile/data-manage-parent

推薦閱讀:編程體系整理

序號項目名稱GitHub地址GitEE地址推薦指數(shù)
01Java描述設(shè)計模式,算法,數(shù)據(jù)結(jié)構(gòu)GitHub·點這里GitEE·點這里☆☆☆☆☆
02Java基礎(chǔ)、并發(fā)、面向?qū)ο?、Web開發(fā)GitHub·點這里GitEE·點這里☆☆☆☆
03SpringCloud微服務(wù)基礎(chǔ)組件案例詳解GitHub·點這里GitEE·點這里☆☆☆
04SpringCloud微服務(wù)架構(gòu)實戰(zhàn)綜合案例GitHub·點這里GitEE·點這里☆☆☆☆☆
05SpringBoot框架基礎(chǔ)應(yīng)用入門到進階GitHub·點這里GitEE·點這里☆☆☆☆
06SpringBoot框架整合開發(fā)常用中間件GitHub·點這里GitEE·點這里☆☆☆☆☆
07數(shù)據(jù)管理、分布式、架構(gòu)設(shè)計基礎(chǔ)案例GitHub·點這里GitEE·點這里☆☆☆☆☆
08大數(shù)據(jù)系列、存儲、組件、計算等框架GitHub·點這里GitEE·點這里☆☆☆☆☆

總結(jié)

以上是生活随笔為你收集整理的编码风格:Mvc模式下SSM环境,代码分层管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 好吊色视频一区二区三区 | 久久综合久色欧美综合狠狠 | 黄色片网站在线看 | 日日夜夜免费精品视频 | 国产精品一区二区在线 | 人妻系列一区 | 成年人免费在线观看视频网站 | 日韩成人免费av | 亚洲一区av在线 | 最新免费av | 粗大的内捧猛烈进出视频 | av综合网站 | 91在线观看免费高清 | 特黄老太婆aa毛毛片 | 国产初高中真实精品视频 | a级片毛片 | 亚洲精品粉嫩小泬20p | 亚洲欧美另类中文字幕 | 一进一出好爽视频 | 夜夜天天干| 国产精品国产三级国产aⅴ无密码 | 涩涩视频网址 | 国产调教一区 | 在线观看免费www | 少妇精品久久久久www | 一级午夜 | 亚洲精品成人无码熟妇在线 | 欧美午夜精品一区二区三区电影 | 蜜桃成熟时李丽珍国语 | av在线观 | 色播网址 | 女同hd系列中文字幕 | www.com在线观看 | 在线免费中文字幕 | 久久黄视频 | 亚洲激情五月婷婷 | 亚洲视频一区 | 欣赏asian国模裸体pics | 人人爱爱| 中文字幕另类 | 欧美精品一区在线发布 | 一级黄色录相 | 丝袜高跟av | 日日艹夜夜艹 | 美女大逼| 麻豆高清 | 欧美 日韩 国产在线 | 黑人一区| www久久com| 女女h百合无遮涩涩漫画软件 | 日韩欧美久久久 | 久久久18禁一区二区三区精品 | 欧美作爱视频 | 久久久久久久久艹 | 欧美a级大片 | 国产成人精品无码免费看夜聊软件 | 久久久国产打桩机 | 亚洲国产v | 正在播放经典国语对白 | 日本大尺度电影免费观看全集中文版 | 波多野结衣免费视频观看 | 久久久综合av | 亚洲熟妇无码av在线播放 | 99re免费视频精品全部 | 日本v视频| 伊人网在线观看 | 亚洲婷婷网 | 影音先锋成人资源 | 男女在楼梯上高潮做啪啪 | 91伊人久久 | 人人人妻人人澡人人爽欧美一区 | 一本一道无码中文字幕精品热 | 日本在线播放 | 国产又爽又色 | 久久99精品久久久久久琪琪 | 重口变态虐黄网站 | 欧美无遮挡高潮床戏 | 久久精品国产露脸对白 | 老牛嫩草二区三区观影体验 | 久久亚洲精选 | 综合色播 | 无码人妻精品一区二区蜜桃色欲 | 中文字幕25页 | 嫩草嫩草嫩草嫩草嫩草 | 岛国免费av| 一本视频 | 亚洲97| 亚洲精品国产精品国自产 | 狠狠干in | 国产第4页| 福利国产在线 | 久久午夜夜伦鲁鲁一区二区 | 国模av| 中文字幕在线观看免费高清 | 男人添女人囗交视频 | 黄色理论片| 60分钟| 亚洲天堂午夜 | 免费成人黄色网址 |