面向?qū)ο缶幊痰睦Ь?/h3>
-
橫向關(guān)注點:我們很難在不同集成關(guān)系的類里共用代碼,我們的關(guān)注點位于兩條繼承鏈的橫向切面上。面向?qū)ο鬅o法描述兩個不同的事物具體某個相同的特性
解決方案:
- copy & paste 相同的代碼,這也是壞代碼的開頭
- 引入一個BaseViewController,會使base成為一個垃圾堆,完全不知道哪些類走了base方法
- 依賴注入:通過外界傳入一個帶有相同代碼的對象
- 多繼承:swift沒有多繼承,其他語言有多繼承,這樣也會有問題,如果繼承的兩個類中有兩個相同的方法,該類執(zhí)行該相同方法時應(yīng)該怎么辦,出現(xiàn)菱形缺陷
和類不一樣,面向協(xié)議編程的基礎(chǔ)是值類型,不再是引用了,面向協(xié)議所提倡的是扁平化和去嵌套的代碼
橫向關(guān)注點:我們很難在不同集成關(guān)系的類里共用代碼,我們的關(guān)注點位于兩條繼承鏈的橫向切面上。面向?qū)ο鬅o法描述兩個不同的事物具體某個相同的特性
解決方案:
- copy & paste 相同的代碼,這也是壞代碼的開頭
- 引入一個BaseViewController,會使base成為一個垃圾堆,完全不知道哪些類走了base方法
- 依賴注入:通過外界傳入一個帶有相同代碼的對象
- 多繼承:swift沒有多繼承,其他語言有多繼承,這樣也會有問題,如果繼承的兩個類中有兩個相同的方法,該類執(zhí)行該相同方法時應(yīng)該怎么辦,出現(xiàn)菱形缺陷
和類不一樣,面向協(xié)議編程的基礎(chǔ)是值類型,不再是引用了,面向協(xié)議所提倡的是扁平化和去嵌套的代碼