2

我一直在網上尋找一段時間,但無法找到確切的答案。好吧,他們說爲類注入抽象(接口或其他),而不是讓它創建它需要的實例,或者不是傳遞實現類型。鬆耦合和返回對象

class Foo 
{ 
    private IBar _bar; 

    public Foo(Ibar bar) 
    { 
     _bar = bar; 
    } 
} 

雖然我不完全理解上面是如何合理地鬆散耦合,但我在這一點上的問題是關於別的東西。也就是說,如果一個方法必須返回某個事物的實例呢?例如,如何可以鬆散耦合:

class Foo 
{ 
    public IBar GetMeSomething() 
    { 
     return new Bar(); // dependency here 
    } 
} 

我只是想知道如何解決上面的依賴關係吧?任何有經驗的程序員請幫助我理解這一點。或者有人可能會建議一些文章全面討論消除/減少類型相互依賴關係的所有場景。

回答

1

當一個類需要知道關於你的程序的「Something」時,你可以通過在你的構造函數中傳遞另一個類的實例來解決這個問題。

如果您在構造函數中只接受接口而不是具體的類,那麼您以後可以輕鬆地更改實現。

如果你必須在運行時創建對象,你需要工廠,你的類Foo在你的情況下是一個IBarFactory(因爲它實例化IBars)。

任何IoC框架(工廠也在構造函數中傳遞)很容易解決構造函數通過接口的依賴關係,而工廠本身的實現允許直接或通過IoC框架實例化對象,因爲這是類的響應性。

使用IoC容器和依賴注入並不會使魔術發生looscoupling,但您仍然需要在SOLID原則的基礎上對類進行建模,但是在使用SOLID原則時IoC容器和DI有很大的幫助。