複雜業務重構 俄羅斯套娃

2021-10-23 23:01:40 字數 1524 閱讀 1068

明明是oo的背景,缺寫成了po的現實--------------------

工作過程中發現了一種俄派武學流派----無限套娃;

/**

* @author ; 俄羅斯套娃

* @description 複雜業務邏輯裡乙個方法套另乙個方法,被巢狀的方法在套下乙個方法,依此類推,巢狀n多層。

* 在方法開始處乙個事物管所有,然後業務邏輯裡面充斥著第三方遠端介面呼叫,大sql處理等耗時操作。

*/class matryoshkadoll_1

public object setup2(object obj)

public object setup3(object obj)

public object setup_1(object obj)

public object setup_(object obj)

// .........

}class servere_1

}

在原本的controller → service → dao層次中新增common層(或者biz,叫什麼無所謂),形成新的controller → common→service → dao呼叫結構。

在controller處理完引數校驗後,在common中處理業務邏輯,在service中組織db物件運算元據庫。

需要加分布式鎖和耗時的操作(mq,redis,第三方的遠端api介面等)在controller或common中處理。

呼叫順序只能自上向下呼叫,不允許自下向上呼叫,儘量減少同級呼叫。

所有的前置邏輯都是為了最後運算元據庫準備引數。單層巢狀層級淺,細節分支間互不影響,形成一套e型的呼叫鏈。

class common1 

}class service_2

/*** 不執行sql-ddl語句

** @param obj

* @return

*/public object setup3(object obj)

/*** 不執行sql-ddl語句

** @param obj

* @return

*/public object setup_(object obj)

// .........

/*** 執行sql-ddl語句

** @param obj

* @return

*/@transactional(rollbackfor = exception.class, timeout = 30)

public object setup_1(object obj)

}class service_3

}

方法間依賴引數,而不是依賴流程,方法的復用率會有很大的提高。

整個流程中的事務範圍被盡可能的控制在了乙個很小的範圍。

複雜業務的處理流程變的清晰,隱藏了細節的實現,對於新人可以只關心某一處的**邏,完整的流程可以有乙個舒服的緩衝時間來慢慢熟悉。

ps:可能不是最好的實現方式,但很方便找自己寫的bug。

俄羅斯套娃信封

給一定數量的信封,帶有整數對 w,h 分別代表信封寬度和高度。乙個信封的寬高均大於另乙個信封時可以放下另乙個信封。求最大的信封巢狀層數。樣例 1 輸入 5,4 6,4 6,7 2,3 輸出 3 解釋 最大的信封巢狀層數是 3 2,3 5,4 6,7 樣例 2 輸入 4,5 4,6 6,7 2,3 1...

俄羅斯套娃問題

給定一些標記了寬度和高度的信封,寬度和高度以整數對形式 w,h 出現。當另乙個信封的寬度和高度都比這個信封大的時候,這個信封就可以放進另乙個信封裡,如同俄羅斯套娃一樣。請計算最多能有多少個信封能組成一組 俄羅斯套娃 信封 即可以把乙個信封放到另乙個信封裡面 說明 不允許旋轉信封。示例 輸入 enve...

俄羅斯套娃信封問題

給定一些標記了寬度和高度的信封,寬度和高度以整數對形式 w,h 出現。當另乙個信封的寬度和高度都比這個信封大的時候,這個信封就可以放進另乙個信封裡,如同俄羅斯套娃一樣。請計算最多能有多少個信封能組成一組 俄羅斯套娃 信封 即可以把乙個信封放到另乙個信封裡面 說明 不允許旋轉信封。示例 輸入 enve...