<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      小酌重構(gòu)系列[8]——提取接口

      前言

      世間唯一“不變”的是“變化”本身,這句話同樣適用于軟件設(shè)計和開發(fā)。
      在軟件系統(tǒng)中,模塊(類、方法)應(yīng)該依賴于抽象,而不應(yīng)該依賴于實現(xiàn)。

      當(dāng)需求發(fā)生“變化”時,如果模塊(類、方法)依賴于具體實現(xiàn),具體實現(xiàn)也需要修改;
      如果模塊(類、方法)依賴于接口,則無需修改現(xiàn)有實現(xiàn),而是基于接口擴展新的實現(xiàn)。

      面向?qū)崿F(xiàn)?面向接口?

      接口可以被復(fù)用,但接口的實現(xiàn)卻不一定能被復(fù)用。

      面向?qū)崿F(xiàn)編程,意味著軟件的模塊(類、方法)之間的耦合性非常高,每次遭遇“變化”,都會涉及到修改,并且可能是牽一發(fā)而動全身的。
      每次修改,都需要對原有的代碼重新測試,也可能給舊的代碼引入新的錯誤。

      面向接口編程,是為了應(yīng)對軟件設(shè)計和開發(fā)中的“變化”,它是一種“以不變應(yīng)萬變”的思維模式。
      只要確保我們的抽象(接口)是不變的,無論需求怎么變化,我們總能通過擴展新的實現(xiàn)自如地應(yīng)對。

      接口是穩(wěn)定的,關(guān)閉的,但接口的實現(xiàn)是可變的,開放的。

      開閉原則

      “依賴于抽象,而不是具體實現(xiàn)”,它同時也是開閉原則的一種體現(xiàn)。

      開閉原則的定義:當(dāng)軟件需要變化時,盡量通過擴展軟件實體的行為來實現(xiàn)變化,而不是通過修改已有的代碼來實現(xiàn)變化。它是面向?qū)ο蟮幕驹瓌t之一。

      開閉原則主要有兩個特征:
      (1)擴展開放(Open for extension)

      (2)修改關(guān)閉(Closed for modification)
      開閉原則要求模塊(類、方法)應(yīng)具備良好的擴展性,同時對現(xiàn)有的功能具有一定的保護能力。

      開閉原則是一個比較模糊的一個原則,它沒有告訴你如何才能對擴展開放,以及如何才能對修改關(guān)閉。
      這需要借助我們自身的經(jīng)驗,以及對需求的理解程度,去分析軟件系統(tǒng)中抽象的部分,識別其中的“變化”和“不變”。

      提取接口

      “提取接口”是面向?qū)ο缶幊坛S玫慕怦畈呗裕瑢⒁恍┛赡馨l(fā)生變化的具體實現(xiàn)提取為接口,將“變化”封裝起來,從而達到依賴接口、而非具體實現(xiàn)的目的。

      示例

      重構(gòu)前

      以下是一個課程注冊的場景,這段代碼提供了2個類:ClassRegistration和RegistrationProcessor,RegistrationProcessor依賴于ClassRegistration的Create()方法和Total屬性。

      public class ClassRegistration
      {
          public void Create()
          {
              // create registration code
          }
      
          public decimal Total { get; private set; }
      }
      
      public class RegistrationProcessor
      {
          public decimal ProcessRegistration(ClassRegistration registration)
          {
              registration.Create();
              return registration.Total;
          }
      }
      

      假如系統(tǒng)的業(yè)務(wù)發(fā)生了變化,ClassRegistration類的Create()方法已經(jīng)不能滿足新的業(yè)務(wù)了,我們需要使用另外的注冊方法。
      這意味著,我們需要修改ClassRegistration類的Create()方法,且需要讓其同時滿足舊業(yè)務(wù)和新業(yè)務(wù)。
      image

      RegistrationProcessor依賴于ClassRegistration,既然ClassRegistration存在著諸多變數(shù),我們可以使用“提取接口”的重構(gòu)策略,讓RegistrationProcessor依賴于某個接口。

      重構(gòu)后

      重構(gòu)后,RegistrationProcessor依賴于IClassRegistration接口,RegistrationProcessor不必去關(guān)心IClassRegistration的具體實現(xiàn)是什么。
      新的業(yè)務(wù)要求不同的Create()方式時,我們無需更改現(xiàn)有的ClassRegistration,而是添加新class并實現(xiàn)IClassRegistration接口。

      另外,在不同場景下,舊業(yè)務(wù)和新業(yè)務(wù)的實現(xiàn)可能在不同場景下被使用。
      這時,我們可以借助IoC框架將IClassRegistration接口的實例注入到指定場景。

      public interface IClassRegistration
      {
          void Create();
      
          decimal Total { get; }
      }
      
      public class ClassRegistration : IClassRegistration
      {
          public void Create()
          {
              // create registration code
          }
      
          public decimal Total { get; private set; }
      }
      
      public class RegistrationProcessor
      {
          public decimal ProcessRegistration(IClassRegistration registration)
          {
              registration.Create();
              return registration.Total;
          }
      }
      

      最后,下面這幅圖描述了這次重構(gòu)過程。

      image

      posted @ 2016-05-08 23:09  keepfool  閱讀(1718)  評論(11)    收藏  舉報
      主站蜘蛛池模板: 制服丝袜美腿一区二区| 国产成人一区二区三区在线观看| 加勒比无码人妻东京热| 免费网站看V片在线毛| 国内熟妇人妻色在线视频| 大香网伊人久久综合网2020| 精品久久综合日本久久网| 成全我在线观看免费第二季| 他掀开裙子把舌头伸进去添视频 | 丝袜老师办公室里做好紧好爽| 越南女子杂交内射bbwxz| 国产成人拍国产亚洲精品| 亚洲成av人片天堂网老年人| 精品日韩精品国产另类专区| 亚洲精品宾馆在线精品酒店| 久久99热只有频精品8| 中国女人内谢69xxxx| 自拍视频亚洲精品在线| 国产天美传媒性色av高清| 国产尤物精品自在拍视频首页| 99精品国产综合久久久久五月天| 国产精品美女黑丝流水| 色777狠狠狠综合| 99亚洲男女激情在线观看| 亚洲欧美日韩综合一区在线 | 亚洲av无码精品色午夜| 日韩av无码一区二区三区| 亚洲乱妇熟女爽到高潮的片 | 好先生在线观看免费播放| 狠狠久久五月综合色和啪| 视频网站在线观看不卡| 毛片内射久久久一区| 亚洲精品一区久久久久一品av| 国产影片AV级毛片特别刺激| 亚洲国产精品综合久久2007| 久久天堂综合亚洲伊人HD妓女| 亚洲qingse中文字幕久久| 又湿又紧又大又爽A视频男| 亚洲成aⅴ人片久青草影院| 国产亚洲国产亚洲国产亚洲| gogogo高清在线观看视频中文 |