說說本人對介面的認知——1.定義開發的規範標準,2.延續代碼後期的維護性和擴充性。
1.先說自身對規範標準的認知,我在部門的某次項目開發中,某塊業務經過小組討論分析完後,由我擔任組長的位置,我的首要開發工作單位是將我們探討完畢的業務進行一個後台功能點的整理,定出一個我們開發的後台介面文檔,然後根據介面文檔,統一規範的建一個本次業務的介面類,在類中我將所有的功能都定義好了抽象方法,然後再分工下去組員實現。這樣做有幾點好處:1:取名規範性,杜絕了組員按照自己的風格取類名和方法名。2:提高了開發人員對代碼的尋找和定位效率(如果不用介面,只是把功能直接分給組員去實現,大家建類建方法各自為營)。3:不會出現哪一個方法沒有實現(杜絕組員忘記實現功能點或者偷懶取巧越過功能點)。
2.關於維護性和擴充性,舉如下例子說明:
類比一個實際開發中的代碼情境,有一個BusinessService普通類,其中定義了一個query()方法,本方法提供某查詢業務;有一個用戶端類的三個業務方法中都用到了BusinessService的query()方法。
編寫代碼:
public class BusinessService { public void query(){ System.out.println("執行查詢業務"); } public void newQuery(){ System.out.println("執行新的查詢業務"); }}public class testClient { BusinessService bs = new BusinessService(); public static void main(String[] args) { testClient tc = new testClient(); tc.getString1(); tc.getString2(); tc.getString3(); } public void getString1(){ bs.query(); } public void getString2(){ bs.query(); } public void getString3(){ bs.query(); }}
以上代碼從功能角度來講沒有任何問題,如果某一天,業務部門對需求進行了變更,導致query()方法必須要修改,那麼針對如上的代碼,開發人員採取兩種方案,1:對原有的query()方法直接進行修改(沒有誰這麼幹),2:重新編寫一個newQuery()方法來滿足新需求。那麼這樣做了之後上面的testClient類中的三個業務方法也要隨之對方法的調用進行修改,將原本的bs.query();改成bs.newQuery()。如下:
public void getString1(){// bs.query(); bs.newQuery(); } public void getString2(){// bs.query(); bs.newQuery(); } public void getString3(){// bs.query(); bs.newQuery(); }
試想,實際開發中,testClient類中可能有幾十個業務方法中進行了bs.query()的調用,這樣就體現出了代碼的維護性和擴充性比較差了。
現在對原業務換成使用介面的代碼情境。
//定義BusinessService介面:public interface BusinessService { public void query();}//BusinessServiceImpl實現介面:public class BusinessServiceImpl implements BusinessService{ public void query() { // TODO Auto-generated method stub System.out.println("執行查詢業務"); }}
//如一開始一樣,testClient2客戶類中三處業務方法中使用query()方法:
public class testClient2 { BusinessService bs = new BusinessServiceImpl(); public static void main(String[] args) { testClient tc = new testClient(); tc.getString1(); tc.getString2(); tc.getString3(); } public void getString1(){ bs.query(); } public void getString2(){ bs.query(); } public void getString3(){ bs.query(); }}
同樣某一天,業務部門對需求進行了變更,導致query()方法必須要修改,那麼針對如上情況,我們採取建立NewBusinessServiceImpl類,在本類中重新定義query()方法,NewBusinessServiceImpl實現介面。
public class NewBusinessServiceImpl implements BusinessService{ public void query() { // TODO Auto-generated method stub System.out.println("執行新的查詢業務"); }}
而在testClient2客戶類中,只需要修改一行代碼,將BusinessService bs = new BusinessServiceImpl();換成BusinessService bs = new NewBusinessServiceImpl();,客戶類中有再多的業務方法調用query()方法,我們也只需要修改一行代碼,就解決了業務變更問題,從維護和擴充性角度來看,非常值得。
總結:工作時間一年半,僅對領悟出來的經驗進行一個整理和分享,如有不對的地方煩請看到的大神可以指正。。。。