2012-04-03 75 views
0

我在VS2010中有幾個項目的解決方案,每個項目都在我的應用程序中組成一個圖層。我有業務實體,它們是當前沒有方法的對象,並且我有一個管理層,它引用其項目中的業務實體層。我現在認爲我已經設計好了我的應用程序,並且希望將輔助類(位於另一層)中的方法移動到我將在業務實體中創建的方法中。如何讓我的業務對象層在其方法中使用管理層?

例如,我有一個VirtualMachine對象,它使用助手類來調用它的Reboot()方法,該方法將請求傳遞給管理層。靜態管理器類與重新啓動虛擬機的API進行通信。我想重新啓動()方法遷入的虛對象,但我需要引用管理層:

public void Reboot() 
{ 
    VMManager.Reboot(this.Name); 
} 

所以,如果我在我的實體項目中添加引用我的管理項目,我得到的圓形依賴性錯誤,這應該如何。我怎樣才能排除這種情況?我是否需要在實體層和管理層之間設置另一個層?或者,我應該忘記它並保持原樣。

現在應用程序可以正常工作,但我擔心我的設計不是特別以OOP爲中心的,我想更正此問題。

回答

1

你是正確的,你不應該使循環引用,使得另一層可能只是幫助你避免了循環引用錯誤,但是如果我正確理解你的話,它仍然是一個循環引用。

我會坐下來,繪製一張地圖,方法應該只能在圖層中調用。這是程序「底層」中最常用的方法,您應該把它放在層次結構中更高級的層次上。

您正在製作的程序的API應該位於此層次結構的底部。

您可能不需要重新設計整個項目。但這聽起來像你可以幫助你自己對結構進行可視化。

0

管理層(因爲它是做這項工作的人)似乎不適合在業務層的頂層。實際上,我們在業務層上面沒有這樣的圖層,我們只有外觀層位於業務層的頂部 - 這與您所需的不同。

從我可以在你的項目中看到,您需要使用輔助類的服務業務層:

// Business layer 
public class VirtualMachineManager 
{ 
    IRebooter _rebooter; 
    public class(IRebooter rebooter) 
    { 
     _rebooter = rebooter; 
    } 
} 

// helper class 
public class Rebooter : IRebooter 
{ 
    .... 
}