2008-12-12 26 views
2

我正試圖在一個項目上遵循代碼到接口。我應該先創建一個接口,然後爲實體類實現該接口嗎?我認爲這可能會將接口第一種方法放在太遠,實體應該被忽略。這就是我的意思...代碼到接口原則是否適用於實體類?

public interface Address { 
    public String getStreet(); 
    public void setStreet(String street); 
} 

@Entity 
public class AddressImpl implements Address { 
    private String street; 

    public String getStreet(){ 
    return this.street; 
    } 
    public void setStreet(String street){ 
    this.street = street; 
    } 
} 

@Entity 
public class OfficeImpl /* implements Office */ { 
    private Address location; 

    public Address getLocation(){ 
    return this.location; 
    } 
    public void setLocation(Address location){ 
    this.location = location; 
    } 
} 

public class Driver { 
    public static void main(String[] args) { 
    Office work = new OfficeImpl(); 
    Address workAddress = new AddressImpl(); 
    workAddress.setStreet("Main St."); 
    work.setLocation(workAddress); 
    } 
} 

回答

4

我認爲爲實體創建接口可能沒有必要。

創建接口(或至少其中一個目的)的目的是爲了更容易換出一個有利於另一個具體實現。這對你的DAO,商業邏輯等來說顯然是一件好事。

但是除非你有實施你的實體的計劃改變,否則我會避免它!

+0

這也使得它很難簡單地創建一個新的地址,因爲你現在需要一個工廠來隱藏實現。 – Robin 2008-12-12 18:56:23

3

在你的例子中,你可能會考慮它太多了,但是一旦你添加方法,編寫測試用例並且可能使用依賴注入,它就會更有意義。

對於這樣簡單的項目來說,這是過分的,但是一旦你進入了一個'真正'的應用程序,那麼這通常是一個好主意。只是要小心,不要過度使用它,所有的東西都不需要實現一個接口,只要它有意義。

1

我想在談論實體時,可能是矯枉過正。

當您使用具有通用用法但不一定相同的實體時,接口非常有用。可沒想到一個好辦法來解釋它,但這裏有一個例子:

interface IFlaggable { 
    bool IsFlagged ... 
    string Reason ... 
} 

class ForumPost implements IFlaggable { } 

class PrivateMessage implements IFlaggable { } 

希望幫助!

0

我通常不會爲數據保持bean創建接口,也就是說,我不會爲具有原始類型值的類和getter/setter爲它們創建接口。從來沒有真正遇到過我需要爲我通常使用它們的任何接口(主要是多態和嘲諷)的接口,所以我沒有打擾到這一點。

我想我應該指出的是,大部分的時候,我用公司Databeans我也是從使用自定義類,其工作像這樣那些相同的對象反映的價值觀:

Reflector r = new Reflector(new DataBean([ values given through constructor ])); 
long someNumber = r.get("method", Long.class); 
3

爲實體的界面應該是行爲和屬性是所有實體共有的!

public interface IEntity 
{ 
    int EntityId { get; set; } 
    bool FindById(int id); 
    bool Create(object [] values); 
    bool Delete(int id); 
    //etc. 
} 

對不起,對於C#示例,但語言無所謂。接口用於「插頭兼容性」。

相關問題