none
如何解決循環相依的問題 RRS feed

  • 問題

  • 我在 namespace  A 跟 namespace B

    中的Class 會有互相使用的問題

    我在加入參考的時候出現了"循環相依"

    在 Delphi 可以

    一個在  interface 區段 use

    一個在  implementation 區段 use

    請問 C# 有類似的方式嗎

    2007年9月13日 上午 02:38

解答

  • HI,

     

    您可以

     

    1) 將A類別欲給B類別使用的功能宣告成A介面

    2) 將B類別欲給A類別使用的功能宣告成B介面

    3) A類別實作A介面

    4) B類別實作B介面

    5) A介面和B介面放在一個獨立組件的一個NAMESPACE中

    6) A類別的組件和B類別的組件都參考提供介面的組件

     

    tihs

    2007年9月15日 上午 05:53

所有回覆

  • HI,

     

    您可以

     

    1) 將A類別欲給B類別使用的功能宣告成A介面

    2) 將B類別欲給A類別使用的功能宣告成B介面

    3) A類別實作A介面

    4) B類別實作B介面

    5) A介面和B介面放在一個獨立組件的一個NAMESPACE中

    6) A類別的組件和B類別的組件都參考提供介面的組件

     

    tihs

    2007年9月15日 上午 05:53
  • 您可以

     

    1) 將A類別欲給B類別使用的功能宣告成A介面

    2) 將B類別欲給A類別使用的功能宣告成B介面

    3) A類別實作A介面

    4) B類別實作B介面

    5) A介面和B介面放在一個獨立組件的一個NAMESPACE中

    6) A類別的組件和B類別的組件都參考提供介面的組件

     

     

    你這樣不是都一樣.

    用A 去改 A 介面,而 A介面又參考B類別,B類別又去修 B介面,B介面又去參考A類別.....

    所以要有很好的習慣,對介面也要了解.據我知道介面是越小(越窄)越好.

    所以在分析,設計階段就要將層抽像出來,同一層不要互相參照,有相同互用的往上抽一層,而最上層當然可抽出介面,而介面裡最好都是原生的型態,這樣才能降藕.

    2007年9月17日 上午 09:52
  • HI,

     

    沒有一樣, 因為我可以用上述的做法, 讓ClassA和ClassB不會形成循環參考, 但是又可以用到ClassA與ClassB公開在介面中的方法

     

    tihs

    2007年9月18日 上午 02:59
  • 1) 將A類別欲給B類別使用的功能宣告成A介面

    2) 將B類別欲給A類別使用的功能宣告成B介面

    3) A類別實作A介面

    4) B類別實作B介面

    5) A介面和B介面放在一個獨立組件的一個NAMESPACE中

    6) A類別的組件和B類別的組件都參考提供介面的組件

     

    你這樣說明跟介面設計我有不同的見解.

    我在分析設計就會設計出相關功能的介面,而不是A類別欲給B類別使用的功能宣告成A介面,然後由A類別實作A介面.

    在使用時由B類別去操作A介面.

     

    說明白一點

    A介面可能有A1,A2,A3....類別,我們可以很輕鬆在B類別裡作抽換的動作,也就是說B類別只知道A介面根本不知A1,A2,A3

    這個稱多型.

    而如果你說的將A類別欲給B類別使用的功能宣告成A介面,這樣是不是A類別功能增加就要去變動A介面了?,這樣B類別用A介面是不是要重新編譯過?,如果介面宣告有變動,是不是B類別也要改過?,如果A類別變的很大,介面是不是變的很大?

    2007年9月18日 上午 03:49
  • HI,

     

    Microsoft WCF(Windows Communication Framework)目前就是這樣設計的, 給用戶端程式使用的功能是宣告在介面中的

     

    tihs

    2007年9月18日 上午 06:05
  • WCF 設計有二種樣式,1.為 Contract First 2.為Code First

    如果沒有舊系統的問題也是用Contract First 方式,先設計介面,也就是契約方式.

    然後以前做的系統根本不知未來會如何,所以WCF出來時才會有Code First方式,將原來已有的Code 去推出介面這種逆向的方式.

    2007年9月18日 上午 06:53