2017-08-20 28 views
-1

假設我們有一個包含一些組件(對象字段)的類,它們中的一些可以爲null(刪除) 是否適合創建沒有(組件)字段或使用接口來處理它的新類。假設我們在類的方法,可以對某些對象被刪除提前我們如何配置類的空可移動組件(對象字段)?

public class Class1{ 
    Component1 component1; 
    Component2 component2; 
    Component3 component3;//can be null (removed) 
    Component4 component4;//can be null (removed) 
} 
public class Class2{//removed component3,component4(new class) 
    Component1 component1; 
    Component2 component2;  
} 
public class Class3{//removed component3(new class) 
    Component1 component1; 
    Component2 component2; 
    Component4 component4; 
} 
public class Class4{//removed component4(new class) 
    Component1 component1; 
    Component2 component2;  
    Component3 component3;  
} 

或使用的界面

public interface IComponent1{ 

} 
public class Component1:IComponent1{ 

} 
public class NoComponent1:IComponent1{ 

} 
public interface IComponent2{ 

} 
public class Component2:IComponent2{ 

} 
public class NoComponent2:IComponent2{ 

} 
public interface IComponent3{ 

} 
public class Component3:IComponent3{ 

} 
public class NoComponent3:IComponent3{ 

} 
public interface IComponent4{ 

} 
public class Component4:IComponent4{ 

} 
public class NoComponent4:IComponent4{ 

} 
public class Class1{ 
    IComponent1 componentBehaviour1; 
    IComponent2 componentBehaviour2; 
    IComponent3 componentBehaviour3; 
    IComponent4 componentBehaviour4; 
} 

THX或檢查NULL條件(如果需要)幾部分組成。

+1

您的問題主要是基於意見,所以不適合堆棧溢出。也就是說,我的觀點是,如果這些字段對於一組特定的對象是不使用的,那麼是的......將這個類分離成單獨的類是合適的,這些字段適合於每個這些對象的實例類。另一方面,如果你有一種情況,你必須用其他類的實例替換一個類的一個實例,這是因爲你剛開始有一個null值,或者反之亦然,那麼不......不這樣做。 –

+0

謝謝,但如果我有幾個相同的字段的類我怎麼能訪問不同類的對象字段(例如在循環中)。我應該使用泛型爲這些類實現GetComponent()嗎? – Mahdi

+0

_「我有幾個相同領域的課程」_ - 你爲什麼要這樣做?如果他們是相同的領域,讓他們成爲同一個班級。如果由於某種原因它們不能是同一個類,那麼就考慮定義一個可以實現每個類的接口,然後當需要這些字段時可以使用該接口。 –

回答

0

根據我的經驗,最好遵循面向對象的原則。在你的情況我覺得你應該先創建一個類的所有必填字段:

public class Class1{ 
    Component1 component1; 
    Component2 component2; 
    } 

然後使用接口爲每個可空領域,如:

public Interface interface1{ 
     Component1 component3; 
     } 

,然後另一個接口,如:

public Interface interface2{ 
      Component1 component4; 
      } 

然後在你的課堂上你可以有:

public class Class2: Class1, interface1 

而且另一個類,如:

public class Class2: Class1, interface2 
    public class Class3: Class1, interface1, interface2 
+0

組件字段進入界面? 您只能將接口方法和getter setter放入接口中 – Mahdi

+0

您可以在接口中使用Component的接口,如'IComponent' – Hadee

0

可能聽起來很傻,但你爲什麼不只是有一個單一的類暴露組件的集合? 類似這樣的:

public interface IComponent{} 

public class Foo{ 
    private readonly IList<IComponent> _components; 

    public void AddComponent(IComponent component){ 
     // do your magic here 
    } 

    public IEnumerable<T> GetComponents<T>() where T : IComponent { 
     // do your magic here 
    } 
} 
相關問題