業(yè)務(wù)代碼最佳實(shí)踐架構(gòu)(代理模式+反射)

背景

平時(shí)我們寫業(yè)務(wù)代碼容易遇到一下問題
1浩销、隨著需求的變更添加贯涎,代碼變得越來越臃腫,冗余
2慢洋、到處都是if else邏輯
3塘雳、對(duì)外提供很多的入口,對(duì)內(nèi)耦合很大普筹,需求添加時(shí)經(jīng)常改內(nèi)又改外败明。但我們都知道,修改源代碼很容易產(chǎn)生新的問題

針對(duì)以上問題太防,我覺得代理模式+反射是比較簡(jiǎn)潔的架構(gòu)肩刃,以下是最佳實(shí)踐類圖和代碼

image.png

架構(gòu)分析

1、好的架構(gòu)杏头,調(diào)用者不需要知道實(shí)現(xiàn)細(xì)節(jié)盈包,它只管需要給你哪些參數(shù)和返回的數(shù)據(jù)。這里加了一層抽象代理醇王,這一層抽象很重要呢燥,使得代碼對(duì)外簡(jiǎn)單接口,對(duì)內(nèi)靈活變化
2寓娩、如圖叛氨,proxy 調(diào)用2,通過反射技術(shù)省去if else棘伴,使得需求添加時(shí)寞埠,只需繼承IExecutor實(shí)現(xiàn),無需修改源碼

最佳實(shí)踐代碼

1焊夸、對(duì)外入口使用一個(gè)抽象代理層

/**
 * Created jixinshi on 2019-07-04.
 * 用于啟動(dòng)服務(wù)后自動(dòng)執(zhí)行
 */
@Component
public class DoMain implements CommandLineRunner {

    @Resource
    private TemplateProxy templateProxy;

    @Override
    public void run(String... args) {
        // 入口
        for (ExecutorBeanType type : ExecutorBeanType.values()) {
            templateProxy.execute(type.getBean(), type.getDesc());
        }
    }
}

2仁连、代理層相關(guān)操作(反射技術(shù))

/**
 * Created jixinshi on 2019-07-04.
 * 代理類
 */
@Component
public class TemplateProxy {

    public void execute(String bean, String other){
        // TODO  執(zhí)行前操作
        doBefore();

        TemplateExecutor templateExecutor = (TemplateExecutor) ApplicationHolder.getBean(bean);
        templateExecutor.execute(other);

        // TODO  執(zhí)行后操作
        doAfter();
    }

    private void doAfter() {
        System.out.println("===================  after ===================");
    }

    private void doBefore() {
        System.out.println("===================  before ===================");
    }

}

3、具體細(xì)節(jié)實(shí)現(xiàn)

/**
 * Created jixinshi on 2019-07-04.
 *
 */
@Component("firstExecutor")
public class FirstExecutor implements TemplateExecutor{

    @Override
    public void execute(String other) {
        System.out.println("bean [firstExecutor} ==> " + other);
    }
}

/**
 * Created jixinshi on 2019-07-04.
 */
@Component("secondExecutor")
public class SecondExecutor implements TemplateExecutor{

    @Override
    public void execute(String other) {
        System.out.println("bean [secondExecutor} ==> " + other);
    }
}

4阱穗、效果圖


效果圖.png

代碼地址

https://github.com/RiveLock/test_springboot

總結(jié)

任何復(fù)雜的問題饭冬,都可以通過抽象出一層代理來解決使鹅,比如
1、nginx反向代理昌抠,前端調(diào)用服務(wù)不直接調(diào)用患朱,而是通過nginx代理,這樣抽象出一層代理炊苫,這樣使得服務(wù)器對(duì)外統(tǒng)一入口和出口裁厅,前端無需關(guān)注哪臺(tái)服務(wù),并相關(guān)服務(wù)器的細(xì)節(jié)
2侨艾、Spring AOP姐直,F(xiàn)eign,中間件蒋畜,其實(shí)都是抽象出一層代理声畏,用于解決復(fù)雜的問題并使得架構(gòu)更加清晰明了

后面我會(huì)以代理思維為切入點(diǎn)寫一個(gè)系列,敬請(qǐng)期待姻成。插龄。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末科展,一起剝皮案震驚了整個(gè)濱河市均牢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌才睹,老刑警劉巖徘跪,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異琅攘,居然都是意外死亡垮庐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門坞琴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哨查,“玉大人,你說我怎么就攤上這事剧辐『ィ” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵荧关,是天一觀的道長(zhǎng)溉奕。 經(jīng)常有香客問我,道長(zhǎng)忍啤,這世上最難降的妖魔是什么加勤? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上胸竞,老公的妹妹穿的比我還像新娘欺嗤。我一直安慰自己参萄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著防楷,像睡著了一般躁锡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上筒溃,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天马篮,我揣著相機(jī)與錄音,去河邊找鬼怜奖。 笑死浑测,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的歪玲。 我是一名探鬼主播迁央,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼滥崩!你這毒婦竟也來了岖圈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤钙皮,失蹤者是張志新(化名)和其女友劉穎蜂科,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體短条,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡导匣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了茸时。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逐抑。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖屹蚊,靈堂內(nèi)的尸體忽然破棺而出厕氨,到底是詐尸還是另有隱情,我是刑警寧澤汹粤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布命斧,位于F島的核電站,受9級(jí)特大地震影響嘱兼,放射性物質(zhì)發(fā)生泄漏国葬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望汇四。 院中可真熱鬧接奈,春花似錦、人聲如沸通孽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽背苦。三九已至互捌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間行剂,已是汗流浹背秕噪。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厚宰,地道東北人腌巾。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像铲觉,于是被迫代替她去往敵國(guó)和親澈蝙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355