java微服務(wù)代碼結(jié)構(gòu)

前言
微服務(wù)開發(fā)中很重要的rpc功能妄迁,實(shí)現(xiàn)上不管是springcloud還是dubbo方式蛾茉,代碼結(jié)構(gòu)上看垦江,都是分為api層和service層嗓化。
前者就是純粹接口定義+數(shù)據(jù)對象棠涮,輕量打包。后者就是對api的實(shí)現(xiàn)刺覆。
然后注入api严肪,然后各自去注冊中心獲取需要的服務(wù)實(shí)現(xiàn)。
結(jié)構(gòu)上一般如下:


代碼結(jié)構(gòu).png

一谦屑、api或者interface
這個module就是包含接口定義和數(shù)據(jù)定義驳糯,沒有任何實(shí)現(xiàn)。注意:也不能引用其他業(yè)務(wù)單元的api
1氢橙,api
實(shí)際操作中會用業(yè)務(wù)(比如訂單order)關(guān)鍵字命名酝枢,定義一個xxxApi,只有接口的定義悍手。
2帘睦、數(shù)據(jù)對象
比如BO, DTO或者其他重要枚舉等,復(fù)雜的業(yè)務(wù)操作需要一個模型坦康,或者說就是給1api中提供出入?yún)⒌陌b竣付。
二、service
以springcloud為例滞欠,有如下幾層古胆。
1、controller
這層就是對api的實(shí)現(xiàn)筛璧,主要是對出入?yún)⒌臋z查逸绎,或者從上下文中獲取特定參數(shù),然后調(diào)用底層服務(wù)進(jìn)行功能實(shí)現(xiàn)夭谤,千萬不可在這一層進(jìn)行復(fù)雜業(yè)務(wù)處理棺牧,這一層不支持事務(wù)回滾。
2沮翔、service層
主要的業(yè)務(wù)實(shí)現(xiàn)層陨帆,這里建議在分為兩層
2.1 基礎(chǔ)服務(wù)層(entityService)
對應(yīng)對entity,對單表的基礎(chǔ)操作采蚀,而且這些操作建議是用api中定義的數(shù)據(jù)對象來進(jìn)行疲牵,而不用entity對象。
可以各種省去entity dto的轉(zhuǎn)化榆鼠。
2.2 聚合服務(wù)層(XXXFacadeService)
就是對2.1 entityService的各種聚合纲爸,這些entityService不止包括自己模塊,也可以引用其他模塊妆够,完成特定的業(yè)務(wù)功能识啦。
3、dao層
現(xiàn)在有很多的orm框架神妹,比如mybatis plus 颓哮,也提供了較好的集成方式,不在展開鸵荠。
4冕茅、sql層
邏輯上其實(shí)沒有這一層,只是物理上它一般放在resource里了蛹找,作為dao實(shí)現(xiàn)的重要組成姨伤。
三、類圖


類圖.png

如圖庸疾,上圖就是一個具體的實(shí)現(xiàn)乍楚。
該類圖中重要的一個補(bǔ)充是,把entityService和bizService的區(qū)分開來届慈。
實(shí)際開發(fā)中徒溪,每個微服務(wù)模塊負(fù)責(zé)人的理解及習(xí)慣有差,無法做到真正的高內(nèi)聚金顿,低耦合词渤。比如你就只需要查詢或者修改其中一個表的某個狀態(tài),但就是沒有這個接口串绩。
針對這種單表的操作缺虐,其實(shí)是可以定制統(tǒng)一接口,要求統(tǒng)一提供對單表的操作的礁凡。對于復(fù)雜多變的業(yè)務(wù)高氮,也許是未來的,都可以使用這些基礎(chǔ)服務(wù)來操作顷牌。
比如OrderEntityApi 針對Order單表的操作剪芍,OrderCountApi,訂單統(tǒng)計相關(guān)的api窟蓝。
四罪裹、其他補(bǔ)充

不同的狀態(tài),應(yīng)當(dāng)用枚舉定義。
xxBizUtills,用來做靜態(tài)類的業(yè)務(wù)工具(沒有注入任何springbean状共,且都是publish static)套耕。
xxBizHelper,用來做動態(tài)注入的幫助類(允許注入其他springbean)。
entityService應(yīng)當(dāng)多用對象參數(shù)峡继。爭取最大復(fù)用冯袍。
bizFacadeService 建議多用基礎(chǔ)類型參數(shù),簡化調(diào)用人的學(xué)習(xí)負(fù)擔(dān)碾牌,重要的是康愤,應(yīng)當(dāng)對業(yè)務(wù)進(jìn)行重要提煉,
cache也在這一層處理舶吗,如果有多個模塊都能調(diào)用這層的某個方法征冷,說明業(yè)務(wù)設(shè)計很精湛了。
待補(bǔ)充誓琼。资盅。。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末踊赠,一起剝皮案震驚了整個濱河市呵扛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌筐带,老刑警劉巖今穿,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異伦籍,居然都是意外死亡蓝晒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門帖鸦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芝薇,“玉大人,你說我怎么就攤上這事作儿÷宥” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵攻锰,是天一觀的道長晾嘶。 經(jīng)常有香客問我,道長娶吞,這世上最難降的妖魔是什么垒迂? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮妒蛇,結(jié)果婚禮上机断,老公的妹妹穿的比我還像新娘楷拳。我一直安慰自己,他們只是感情好吏奸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布欢揖。 她就那樣靜靜地躺著,像睡著了一般苦丁。 火紅的嫁衣襯著肌膚如雪浸颓。 梳的紋絲不亂的頭發(fā)上物臂,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天旺拉,我揣著相機(jī)與錄音,去河邊找鬼棵磷。 笑死蛾狗,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的仪媒。 我是一名探鬼主播沉桌,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼算吩!你這毒婦竟也來了留凭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤偎巢,失蹤者是張志新(化名)和其女友劉穎蔼夜,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體压昼,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡求冷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了窍霞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匠题。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖但金,靈堂內(nèi)的尸體忽然破棺而出韭山,到底是詐尸還是另有隱情,我是刑警寧澤冷溃,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布掠哥,位于F島的核電站,受9級特大地震影響秃诵,放射性物質(zhì)發(fā)生泄漏续搀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一菠净、第九天 我趴在偏房一處隱蔽的房頂上張望禁舷。 院中可真熱鬧彪杉,春花似錦、人聲如沸牵咙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洁桌。三九已至渴丸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間另凌,已是汗流浹背谱轨。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吠谢,地道東北人土童。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像工坊,于是被迫代替她去往敵國和親献汗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容