簡體   English   中英

如何使我的業務對象層在其方法中使用管理層?

[英]How can I get my business objects layer to use the management layer in their methods?

我在VS2010中有一個解決方案,其中包含多個項目,每個項目都構成了我的應用程序中的一層。 我有目前沒有任何方法的對象的業務實體,並且我有一個引用其項目中業務實體層的管理層。 現在,我認為我的應用程序設計不佳,希望將方法從助手類(位於另一層)轉移到我將在業務實體內部創建的方法。

例如,我有一個VirtualMachine對象,該對象使用幫助程序類在其上調用Reboot()方法,該方法將請求傳遞給管理層。 靜態管理器類與重新啟動VM的API對話。 我想將Reboot()方法移到VirtualMachine對象中,但是我將需要引用管理層:

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

因此,如果在我的實體項目中添加對管理項目的引用,則會得到循環依賴項錯誤,應該是這樣。 如何解決這種情況? 我是否需要實體層和管理層之間的另一層? 或者,我應該忘掉它並保持原樣。

該應用程序現在可以正常運行,但是我擔心我的設計不是特別以OOP為中心,我想對此進行更正。

您是正確的,您不應該進行循環引用,制作另一層可能只是幫助您避免了循環引用錯誤,但是如果我正確理解您的話,它仍將是循環引用。

我會坐下來,繪制地圖,方法只能分層調用。 那是程序“最底層”的最通用方法,您越專業化,您應該將其放在層次結構中的較高位置。

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

您可能不需要重新設計整個項目。 但是,聽起來您可以幫助自己可視化結構。

管理層(因為這是工作的層)似乎不適合業務層的頂部。 實際上,我們在業務層之上沒有這樣的層,我們僅在業務層的頂部具有外觀層 ,這與您所需要的不同。

從您的項目中可以看到,您需要業務層來使用幫助程序類的服務:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM