<noframes id="llnpn"><pre id="llnpn"><strike id="llnpn"></strike></pre><address id="llnpn"><strike id="llnpn"><span id="llnpn"></span></strike></address>

<pre id="llnpn"></pre>

    <address id="llnpn"><strike id="llnpn"><span id="llnpn"></span></strike></address>

    <noframes id="llnpn">

      <noframes id="llnpn"><pre id="llnpn"></pre>
      • 自動秒收錄
      • 軟件:1973
      • 資訊:56157|
      • 收錄網站:175404|

      IT精英團

      談談復雜項目代碼的應用分層

      談談復雜項目代碼的應用分層

      瀏覽次數:
      評論次數:
      編輯: 溫瑜
      信息來源: ITPUB
      更新日期: 2022-04-27 20:57:51
      摘要

      —1—背景說起應用分層,大部分人都會認為這個不是很簡單嘛就controller,service,mapper三層??雌饋砗唵?,很多人其實并沒有把他們職責劃分開,在很多代碼中,controller做

      • 正文開始
      • 相關閱讀
      • 推薦作品


       1 
      背景
      說起應用分層,大部分人都會認為這個不是很簡單嘛 就controller,service, mapper三層??雌饋砗唵?,很多人其實并沒有把他們職責劃分開,在很多代碼中,controller做的邏輯比service還多,service往往當成透傳了,這其實是很多人開發代碼都沒有注意到的地方,反正功能也能用,至于放哪無所謂唄。這樣往往造成后面代碼無法復用,層級關系混亂,對后續代碼的維護非常麻煩。
      的確在這些人眼中分層只是一個形式,前輩們的代碼這么寫的,其他項目代碼這么寫的,那么我也這么跟著寫。但是在真正的團隊開發中每個人的習慣都不同,寫出來的代碼必然帶著自己的標簽,有的人習慣controller寫大量的業務邏輯,有的人習慣在service中之間調用遠程服務,這樣就導致了每個人的開發代碼風格完全不同,后續其他人修改的時候,一看,我靠這個人寫的代碼和我平常的習慣完全不同,修改的時候到底是按著自己以前的習慣改,還是跟著前輩們走,這又是個艱難的選擇,選擇一旦有偏差,你的后輩又維護你的代碼的時候,恐怕就要罵人了。
      所以一個好的應用分層需要具備以下幾點: 
      • 方便后續代碼進行維護擴展;
      • 分層的效果需要讓整個團隊都接受;
      • 各個層職責邊界清晰。


       2 
      如何進行分層


      2.1、阿里規范


      在阿里的編碼規范中約束的分層如下:

      開放接口層:可直接封裝 Service 方法暴露成 RPC 接口;通過 Web 封裝成 http 接口;進行 網關安全控制、流量控制等。
      終端顯示層:各個端的模板渲染并執行顯示的層。當前主要是 velocity 渲染,JS 渲染, JSP 渲染,移動端展示等。
      Web 層:主要是對訪問控制進行轉發,各類基本參數校驗,或者不復用的業務簡單處理等。
      Service 層:相對具體的業務邏輯服務層。
      Manager 層:通用業務處理層,它有如下特征:1. 對第三方平臺封裝的層,預處理返回結果及轉化異常信息;2. 對Service層通用能力的下沉,如緩存方案、中間件通用處理;3. 與DAO層交互,對多個DAO的組合復用。
      DAO 層:數據訪問層,與底層 MySQL、Oracle、Hbase 進行數據交互。
      阿里巴巴規約中的分層比較清晰簡單明了,但是描述得還是過于簡單了,以及service層和manager層有很多同學還是有點分不清楚之間的關系,就導致了很多項目中根本沒有Manager層的存在。下面介紹一下具體業務中應該如何實現分層。

      2.2、優化分層


      從我們的業務開發中總結了一個較為的理想模型,這里要先說明一下由于我們的rpc框架選用的是thrift可能會比其他的一些rpc框架例如dubbo會多出一層,作用和controller層類似 

      最上層controller和TService是我們阿里分層規范里面的第一層:輕業務邏輯,參數校驗,異常兜底。通常這種接口可以輕易更換接口類型,所以業務邏輯必須要輕,甚至不做具體邏輯。
      Service:業務層,復用性較低,這里推薦每一個controller方法都得對應一個service,不要把業務編排放在controller中去做,為什么呢?如果我們把業務編排放在controller層去做的話,如果以后我們要接入thrift,我們這里又需要把業務編排在做一次,這樣會導致我們每接入一個入口層這個代碼都得重新復制一份如下圖所示: 

      這樣大量的重復工作必定會導致我們開發效率下降,所以我們需要把業務編排邏輯都得放進service中去做: 

      Mannager:可復用邏輯層。這里的Mannager可以是單個服務的,比如我們的cache,mq等等,當然也可以是復合的,當你需要調用多個Mannager的時候,這個可以合為一個Mannager,比如邏輯上的連表查詢等。如果是httpMannager或rpcMannager需要在這一層做一些數據轉換
      DAO:數據庫訪問層。主要負責“操作數據庫的某張表,映射到某個java對象”,dao應該只允許自己的Service訪問,其他Service要訪問我的數據必須通過對應的Service。
       3 
      分層領域模型的轉換
      在阿里巴巴編碼規約中列舉了下面幾個領域模型規約: 

      • DO(Data Object):與數據庫表結構一一對應,通過DAO層向上傳輸數據源對象。 
      • DTO(Data Transfer Object):數據傳輸對象,Service或Manager向外傳輸的對象。 
      • BO(Business Object):業務對象。由Service層輸出的封裝業務邏輯的對象。 
      • AO(Application Object):應用對象。在Web層與Service層之間抽象的復用對象模型,極為貼近展示層,復用度不高。 
      • VO(View Object):顯示層對象,通常是Web向模板渲染引擎層傳輸的對象。 
      • Query:數據查詢對象,各層接收上層的查詢請求。注意超過2個參數的查詢封裝,禁止使用Map類來傳輸。


      每一個層基本都自己對應的領域模型,這樣就導致了有些人過于追求每一層都是用自己的領域模型,這樣就導致了一個對象可能會出現3次甚至4次轉換在一次請求中,當返回的時候同樣也會出現3-4次轉換,這樣有可能一次完整的請求-返回會出現很多次對象轉換。如果在開發中真的按照這么來,恐怕就別寫其他的了,一天就光寫這個重復無用的邏輯算了吧。
      所以我們得采取一個折中的方案: 
      1、允許Service/Manager可以操作數據領域模型,對于這個層級來說,本來自己做的工作也是做的是業務邏輯處理和數據組裝。 
      2、Controller/TService層的領域模型不允許傳入DAO層,這樣就不符合職責劃分了。 
      3、同理,不允許DAO層的數據傳入到Controller/TService。


       4 
      總結 總的來說業務分層對于代碼規范是比較重要,決定著以后的代碼是否可復用,是否職責清晰,邊界清晰。
      當然這種分層其實見仁見智, 團隊中的所有人的分層習慣也不同,所以很難權衡出一個標準的準則,總的來說只要滿足職責邏輯清晰,后續維護容易,就是好的分層。

      標簽:業務 代碼 邏輯
      在Linux中檢查磁盤空間的12個有用的df命令
      ? 上一篇 2022-04-27
      MySQL查詢語句的limit offset是如何實現的?
      下一篇 ? 2022-04-28
      發表評論 共有條評論
      用戶名: 密碼:
      驗證碼: 匿名發表
      • MySQL批量插入數據 一次插入多少行數據效率最高?
        7閱讀 0條評論 個贊
        一、前言我們在操作大型數據表或者日志文件的時候經常會需要寫入數據到數據庫,那么最合適的方案就是數據庫的批量插入。只是我們在執行批量操作的時候,一次插入多少數據才合適呢?假如需要插入的數據有百萬條,那……
      • MYSQL如果索引優化僅僅是添加索引 太年輕而不簡單
        0閱讀 0條評論 個贊
        MYSQL的索引優化,如果此時此刻看到索引的優化,僅僅想到添加適合的索引,是不完全的,索引的優化本身就具有很多的不確定性。1索引會隨著時間的推移,有性能的衰減2索引會隨著數據量的增加,有性能的衰……
      • Redis過期的數據會被立即刪除嗎?
        1閱讀 0條評論 個贊
        本文來源碼哥字節(ID:MageByte)?碼哥,當key達到過期時間,Redis就會馬上刪除么?先說結論:并不會立馬刪除。Redis有兩種刪除過期數據的策略:定期選取部分數據刪除;惰性刪除;……
      • 不容錯過的20個ES6技巧
        5閱讀 0條評論 個贊
        前言大家好,我是xieyezi,好久不見,我又重新回歸掘金啦,這次為大家整理了20個使用頻率很高的ES6代碼塊,希望大家喜歡……
      • 如何正確計算Kubernetes容器的CPU利用率
        1閱讀 0條評論 個贊
        本文轉自博客園,原文:https://www.cnblogs.com/apink/p/15767687.html,版權歸原作者所有。參數解釋使用Prometheus配置kubernetes環境……
      • MySQL語句優化——隱式字符編碼轉換
        1閱讀 0條評論 個贊
        MySQL中我們知道有:如果對索引字段做函數操作,可能會破壞索引值的有序性,因此優化器就決定放棄走樹搜索功能。隱式類型轉換也會導致放棄走樹搜索。因為類型轉換等價于在條件字段上使用了函數比如:假設tra……
      • 臉書數據庫項目負責人:我從做基礎設施中學到的42件事
        1閱讀 0條評論 個贊
        最近讀到了分布式系統研究者MaheshBalakrishnan的一篇博客《42thingsIlearnedfrombuildingaproductiondatabase》。同樣做……
      • 1972年的C語言 控制了Windows、Linux、macOS等操作系統的半邊天
        1閱讀 0條評論 個贊
        來源|CSDN(ID:CSDNnews)誕生于1972年的C語言已經50歲了,目前來看,它還像20歲的小伙一樣活力四射,似乎永不會退休,并且正在賦能全世界重量級應用系統的運行。盡管C語言面世多年,……
      • Kubernetes網絡模型基本指南
        1閱讀 0條評論 個贊
        Kubernetes是為運行分布式集群而建立的,分布式系統的本質使得網絡成為Kubernetes的核心和必要組成部分,了解Kubernetes網絡模型可以使你能夠正確運行、監控和排查應用程序……
      • PostgreSQL并行框架分析
        3閱讀 0條評論 個贊
        作者簡介施博文,目前就職于騰訊云PG團隊概覽PostgreSQL并行框架提供了一系列方便的函數,支持在插件或內核中直接調用相關函數,啟動若干個后臺進程進行并行操作。目前,PG的并行框架主要用來……
      • 運行和維護監控中的采樣數據和統計數據
        8閱讀 0條評論 個贊
        2006年的時候,Oracle公司的《Oracle通訊》雜志向我約稿,那時候正好是Oracle公司在大力推廣Oracle10g的時候,當時我問編輯,對這篇文章有什么要求。編輯說,對于優化中數據采集工……
      • 誤操作離線丟棄和恢復場景測試的業務影響——來自“血”的教訓
        0閱讀 0條評論 個贊
        在數據庫恢復過程中,比如我們用了第三方的備份工具,在實施恢復操作時會導出需要的某個表空間這樣可以大大減少恢復時間,是十分值得推薦的做法,這個過程中由于修改控制文件中數據文件的相關信息,需要執行alte……
      • JD.COM面試問題:ElasticSearch深度分頁解決方案
        0閱讀 0條評論 個贊
        以下文章來源于月伴飛魚,作者日常加油站前言Elasticsearch是一個實時的分布式搜索與分析引擎,在使用過程中,有一些典型的使用場景,比如分頁、遍歷等。在使用關系型數據庫中,我們被告知要注意甚至……
      • 一行Python代碼實現程序并行
        1閱讀 0條評論 個贊
        Python在程序并行化方面多少有些聲名狼藉。撇開技術上的問題,例如線程的實現和GIL,我覺得錯誤的教學指導才是主要問題。常見的經典Python多線程、多進程教程多顯得偏"重"。而且往往隔靴搔……
      • 服務器端高并發分布式架構的演進之路
        1閱讀 0條評論 個贊
        1.概述本文以淘寶作為例子,介紹從一百個到千萬級并發情況下服務端的架構的演進過程。同時列舉出每個演進階段會遇到的相關技術,讓大家對架構的演進有一個整體的認知。文章最后匯總了一些架構設計的原則。特別說……
      • 一天一技能:協調與多流程的完美結合
        7閱讀 0條評論 個贊
        我們知道,協程本質上是單線程單進程,通過充分利用IO等待時間來實現高并發。在IO等待時間之外的代碼,還是串行運行的。因此,如果協程非常多,多少每個協程內部的串行代碼運行時間超過了IO請求的等待時間,那……
      • Spring云應用的優雅下線和灰度發布
        2閱讀 0條評論 個贊
        前言在生產環境中,如何保證在服務升級的時候,不影響用戶的體驗,這個是一個非常重要的問題。如果在我們升級服務的時候,會造成一段時間內的服務不可用,這就是不夠優雅的。那什么是優雅的呢?主要就是指在服務升級……
      • 如何優雅地升級Kubernetes集群的Docker和Containerd版本
        1閱讀 0條評論 個贊
        前言公司用的k8s集群是“多環境合一”的方式,集群流量入口也摒棄了常見的traefik和ingress-nginx,直接用了一個國內不常見的底層基于Envoy的APIGateway網關服務。當然還有……
      • 7 種提升Spring Boot吞吐量神技!
        0閱讀 0條評論 個贊
        一、異步執行實現方式二種:1.使用異步注解@aysnc、啟動類:添加@EnableAsync注解2.JDK8本身有一個非常好用的Future類——CompletableFuture@AllArg……
      • 內存數據庫如何利用內存?
        1閱讀 0條評論 個贊
        與以磁盤存儲為主的普通數據庫相比,內存數據庫的數據訪問速度可以高出幾個數量級,能大幅提高運算性能,更適合高并發、低延時的業務場景。不過,當前大部分內存數據庫仍然采用SQL模型,而SQL缺乏一些……
      • 招聯消費金融董事長變更為劉烈宏:副董事長田惠宇因貸款業務價格被免職
        0閱讀 0條評論 個贊
        國內消費金融行業“龍頭”企業招聯消費金融發布公告,4月21日,招聯消費金融有限公司按照公司治理規定,履行相關董事的內部免職流程。根據股東會決議,田惠宇不再擔任招聯消費金融有限公司董事、副董事長。公司正在按流程辦理董事補選和工商變更事宜。這也意味著,因涉嫌嚴重違紀違法,被調查的原招商銀行行長田惠宇被免去在招聯消費金融的所有職務?!?/div>
      • 尹蓓消費金融2021年凈利潤5821萬元 同比增長26.5%: 21家同業排名第17
        1閱讀 0條評論 個贊
        從目前已經披露的21家消費金融公司業績來看,在凈利潤方面,除中原消金和哈銀消金未披露外,北銀消費金融4194萬元的凈利潤僅高于蘇銀凱基消金的1700萬元和小米消金的368萬元,排名第17位。在資產規模上,北銀消金距離百億仍有一步之遙,排名第15位?!?/div>
      • 如何讓你的偽原創成為搜索引擎喜歡的內容?
        10閱讀 0條評論 個贊
        所謂偽原創就是把一篇文章進行再加工,使其讓搜索引擎認為是一篇原創文章,從而提高網站權重。那么如何讓你的偽原創成為搜素引擎青睞內容?下面我們來看看吧……
      • 客戶理財花了320萬 只剩2190元!廣發銀行獲賠一半損失
        1閱讀 0條評論 個贊
        北京的焦女士在廣發銀行投資320萬元購買了一款“特別好的理財項目”,幾乎血本無歸,最后僅獲得2190元的執行款,法院最終判決廣發銀行承擔50%賠償責任?!?/div>
      • 法拉第未來2021年凈虧損5.17億美元 財報延遲發布風險“退市”
        0閱讀 0條評論 個贊
        不僅僅是破產危機、創始人遠走以及車輛量產持續跳票,FF還險些遭遇“退市”?!?/div>
      • 納斯達克本周暴跌 損失近1萬億美元:蘋果失去最高市值 標題加密崩潰
        6閱讀 0條評論 個贊
        本周的暴跌使納斯達克100指數的市值蒸發了近9,820億美元,其中大型科技股占了很大一部分。微軟(Microsoft Corp.)市值蒸發約1,450億美元,市值跌破2萬億美元。亞馬遜的800億美元跌幅幾乎足以將其踢出1萬億美元的俱樂部。Alphabet Inc.目前市值不足1.5萬億美元?!?/div>
      • 網站如何盡可能的引流和留住流量?
        0閱讀 0條評論 個贊
        網站收錄很量很高,快照都很新,但是卻沒有什么流量,那么網站如何盡可能的引流和留住流量呢?下面小編就為大家詳細介紹一下,希望能給站長朋友一定的啟發……
      • seo經典案例網站文章不收錄真實原因分析
        2閱讀 0條評論 個贊
        和別人一樣的內容,別的網站都收錄,為什么我的網站沒有收錄呢?下面我們來看看百度收錄有沒有可以讓我們鉆空子的漏洞,和網站文章不收錄真正緣故起因分析,需要的朋友可以參考下……
      • 零入侵:一個注解 循環重試功能的優雅實現
        0閱讀 0條評論 個贊
        前言在實際工作中,重處理是一個非常常見的場景,比如:發送消息失敗。調用遠程服務失敗。爭搶鎖失敗。這些錯誤可能是因為網絡波動造成的,等待過后重處理就能成功。通常來說,會用try/catch,while循……
      • 賈立安支付母公司新國都Q1凈利潤9119萬元 同比增長72%:因持股子公司虧損導致投資收益減少
        0閱讀 0條評論 個贊
        嘉聯支付母公司新國都(SZ300130)公布2022年第一季度報告顯示,營業收入10.16億元,較上年同期的7.05億元同比增長44.06%;歸屬于上市公司股東的凈利潤為9119.73萬元,較上年同期的5299.54萬元同比增長72.09%;歸屬于上市公司股東的扣除非經常性損益的凈利潤為7085.7萬元,較上年同期的3770.16萬元同比增長87.94%?!?/div>
      • 華融消費金融正式易主寧波銀行:70%股權轉讓或更名寧銀小金
        3閱讀 0條評論 個贊
        今日晚間,寧波銀行發布公告稱,近日,華融消金收到中國銀行保險監督管理委員會《中國銀保監會關于華融消費金融股份有限公司變更股權的批復》(銀保監復〔2022〕281 號),對上述股權轉讓事宜予以核準。截至公告日,公司已完成本次股權受讓的相關事宜,已持有華融消金70%股權?!?/div>
      • 晉城小金違反催收規定被罰22.6萬元:行長何德浩被核準任職
        1閱讀 0條評論 個贊
        日前,央行成都分行營業管理部行政處罰信息公示表顯示,因違反信用信息采集、提供、查詢及相關管理規定,四川錦程消費金融有限責任公司(簡稱:錦程消費金融)遭罰款22.6萬元。金融虎網注意到,就在今日,何德好出任錦程消費金融總裁的任職資格獲得了批復?!?/div>
      • 盛銀消費金融董事長辭去盛京銀行執行董事職務
        2閱讀 0條評論 個贊
        本次變動最受關注的,是盛京銀行現任副行長張珺。公告顯示,張珺因工作安排調整原因,請辭該行執行董事及董事會關聯交易控制委員會副主任職務;張珺的辭任于5月11日生效,但其仍將繼續擔任盛京銀行副行長兼該行子公司盛銀消費金融有限公司董事長。年報顯示,張珺去年薪酬為稅前226.5萬元?!?/div>
      • 直播賣POS被抓!交易額超過5億
        1閱讀 0條評論 個贊
        直播帶貨成為銷售新風口,但如果利用直播推廣POS機,將被打上非法經營的標簽。前不久,上海市松江區人民檢察院公布了一起非法經營POS機的案件,網銷POS的新模式隨之曝光?!?/div>
      • 烏龍?半個月后 田惠宇再次出任智聯消費金融總監
        1閱讀 0條評論 個贊
        就在前招商銀行行長田惠宇接受中央紀委國家監委審查調查期間,由招商銀行和中國聯通共同組建的招聯消費金融發生了工商變更。開甲財經注意到,在田惠宇“落馬”半個月后,再次擔任招聯消費金融董事。小編推測,之所以出現如此“烏龍”的一幕,或由于招聯消費金融沒來得及撤銷變更資料。接下來,招聯消費金融將再一次進行工商變更,田惠宇的名字也將從該公司董事名單中消失?!?/div>
      • 7天存款年化4.9% 眾邦銀行高息導致業績不佳 多項核心監管指標惡化
        6閱讀 0條評論 個贊
        近日,河南數家村鎮銀行突然爆出提現困難,引起輿論關注。據媒體報道和部分存款人反映,這幾家村鎮銀行涉嫌利用互聯……
      • 豆瓣完善實名制注冊 私群將于6月30日關停
        1閱讀 0條評論 個贊
        據記者了解,豆瓣更新了個人信息保護政策,針對境外用戶的實名制注冊方式進行了完善?!?/div>
      • 如何巧用百科增加網站排名 流量翻倍?
        1閱讀 0條評論 個贊
        怎么巧用百科讓網站排名上升流量倍增?很多朋友的網站優化以后還是沒有得到很好的排名,沒關系,今天給大家分享一個技巧,就是使用百科讓沒排名的網站迅速排名,需要的朋友可以參考下……
      • 如何優化JD.COM長尾詞的流量?電子商務網站優化長尾詞流量教程
        1閱讀 0條評論 個贊
        怎么優化京東長尾詞流量?京東的流量一直做得很好,所以針對京東做了一個關鍵詞分析,看看他們的關鍵詞是怎么做的,下面分析哪個電商網站優化長尾詞流量的教程,需要的朋友可以參考下……
      • 解決緩存崩潰問題的一行代碼
        1閱讀 0條評論 個贊
        以下文章來源于公眾號-孤獨煙,作者孤獨煙引言今天,重新回顧一下緩存擊穿這個問題!之所以寫這個文章呢,因為目前網上流傳的文章落地性太差(什么布隆過濾器啊,布谷過濾器啊,嗯,你們懂的),其實這類方案并不適……
      最近發布資訊
      更多
      本地特级毛片,老师脱裙子让我看内裤,人妻av乱片aV出轨avApp
      <noframes id="llnpn"><pre id="llnpn"><strike id="llnpn"></strike></pre><address id="llnpn"><strike id="llnpn"><span id="llnpn"></span></strike></address>

      <pre id="llnpn"></pre>

        <address id="llnpn"><strike id="llnpn"><span id="llnpn"></span></strike></address>

        <noframes id="llnpn">

          <noframes id="llnpn"><pre id="llnpn"></pre>