Clean Code學習總結

1 整潔代碼

代碼邏輯直截了當;儘量減少依賴關係;依據某種分層戰略完善錯誤處理代碼;性能達到最優;

2 有意義的命名

1)名副其實;2)避免誤導;3)做有意義的區分;4)方法名應該是動詞,如deletePage或者save

3 函數

函數應該儘量短小;它應該只做一件事,做好一件事;
每個函數一個抽象層次:自頂向下讀代碼。每個函數都跟着位於下一個抽象級的函數。
使用描述性的名稱;
抽離try/catch代碼塊:

public void delete(Page page)
{
  try
  {  
    deletePageAndAllReferences(page);
  }catch(Exception e){}
}
private void deletePageAndAllRefernces() throws Exceptions{
    deletePage(page);
    registry.deleteReference(page.name);
}

delete函數只處理異常,deletePageAndAllRefernces函數只完全刪除一個page有關。
減少函數代碼的重複。

4 註釋

法律信息;提供信息的註釋;對意圖的解釋;TODO註釋用來保存程序員應該做但是某些原因還沒做的事情。

5 格式

1)概念間垂直方向上的區隔,緊密概念垂直方向靠近。
2)變量聲明儘量靠近使用位置。
3)相關函數應該放在一起。
4)概念相關的代碼應該放在一起。

6 對象和數據結構

1)數據抽象
隱藏實現並非只是在變量之間放上一個函數層那麼簡單。隱藏實現關乎抽象。類並不簡單的取值器和賦值器將其變量推向外間,而是暴露抽象接口。以便用戶無需瞭解數據的實現就能操作數據本體。

具象機動車
public interface Vehicle{
    double getFuelTankCapacityInGallons();
    double getGallonsofGas();
}
抽象機動車
public interface vehicle{
    double getPercentFuelRemianing(){}
}

2)數據,對象的反對稱性
對象把數據隱藏在抽象之後,曝露操作數據的函數;數據結構曝露其數據,沒有提供有意義的函數。Geometry操作形狀類,形狀類都是簡單的數據結構,沒有任何行爲。

過程式形狀代碼
public class Squire
{
    public Point topLeft;
    public double side;
};
public class Geometry
{
    public final double PI=3.14;
    public double area(object shape) throws NoSuchShapeException{
        if(shape instaceof Squire){
            Squire s=(Squire) shape;
            return s.side*s.side
        }
        ...
    }
};
面向對象的方案
public class Squire implements Shape
{
    private Point topLeft;
    private double side;
    public double area(){
        return side*side;
    }
};

過程式代碼(使用數據結構的代碼)便於在不改動既有數據結構的前提下添加新函數。面向對象代碼便於在不改動既有函數的前提下添加新類。
3)the Law of Demeter
方法不應該調用任何函數返回的對象的方法。但是類只是數據結構,沒有任何行爲,該定律不再適用。

10 類

1)公共靜態變量應該先出現,其次是私有靜態變量,以及私有實體變量。
2)單一權責原則(SRP)
3)大函數拆分成小函數,據此將類拆分成小類。
4)爲了修改而組織。

一組必須打開修改的類
public class Sql
{
    public Sql();
    public string create()
    public string selectALl()
};
一組封閉類
abstarct public class Sql
{
    public Sql(){}
    abstract public String generate();
};
public class CreateSql extends Sql
{
    public CreateSql();
    @override public String generate()
};

11 系統

IOC實現分離構造和使用。Spring 框架提供了最有名的Java DI容器。用戶在XML配置文件中定義相互關聯的對象,然後Java代碼請求特定的對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章