2012-07-12 41 views
0

這是迄今爲止的解決方案。三層拱門。在差異項目

enter image description here

BOL。業務對象層。 BL。業務層。 DAL。數據層。 (沒有網頁的解決方案,因爲這將是一個PHP的一個在以後的過程中發展)

BOL引用BL - 然後BL引用DAL

我很猜你知道每個.cs文件裏面有什麼。所以我非常喜歡這種3層架構,並保持分離(第一次以這種方式工作)。 現在,當涉及到通過圖層發送和獲取數據時,我遇到了一些問題。

例如:BL(methods.cs)

public class Methods 
    { 
     LineaDAL obj = new LineaDAL(); 
     public DataSet GetLinea() 
     { 
      var ds = new DataSet(); 
      ds = obj.GetLineaDAL(); 
      return ds; 
     } 
    ////more code 
    } 

這個偉大的工程,創建DAL(這是引用)的對象,然後調用DAL並在DataSet檢索數據。 這很酷,並且它對於從DAL/SQL中獲取某些內容非常有用。

但現在我正在進行更新,我希望BL調用發送給它的DAL函數參數。首先我試過這個參數當然是BOL的一個對象。由於顯而易見的原因不可能,BL不知道BOL。

當發生這種情況時,我開始閱讀並發現了一些很好的方法。其中之一是創建一個DTO ...我不喜歡這個DTO,因爲我非常喜歡層級和層級中自上而下的分離環境。所以我一直在尋找和發現一些與EventArgs和一些Interfaces有關的東西,但我仍然在撓頭,看看我是否在正確的道路上。

我很酷,通過DAL,數據集和東西工作BL。 但有沒有辦法與BOL頂層的對象?如果不能保存自上而下的參考文獻,我應該使用DataSets作爲BOL < - > BL嗎? EventArgs要走的路嗎?

謝謝。

+0

它不是一個分層架構 - 它是一個分層的架構。層級通常意味着不同的層在不同的機器上運行。 – Oded 2012-07-12 10:33:01

+0

他們會在未來一旦系統運行,希望我明確自己。 – 2012-07-12 10:35:29

回答

1

我需要一堆可以在層之間引用和共享的實體,那麼這些實體應該存在於獨立的項目中,以供所有其他項目參考。

如果您的不同應用程序層分佈在不同的機器中,實體庫可以隨每個層一起分發。 EventArgs絕對不是要走的路。

+0

不會破壞規則「頂部知道底部,但底部不知道頂部?我試圖挽救將來的時間,當它是時間進行更改。 – 2012-07-12 10:46:49

+0

不是真的。實體是隨處可見的,它們不適合畢竟,在Web服務的情況下,客戶端和服務器層需要知道相同的實體,無論它們是自動生成的代理還是共享庫,並且DAL也需要了解它們。 – stevethethread 2012-07-12 11:01:56

1

如果你跨機器分割,那麼你將有一些數據合約通過線路發送。所以,你很可能需要在那個時候引入DTO。

當你來做select(讀)時,DL層會返回什麼?出於你陳述的原因,你不能爲選擇返回一個BOL對象(BL沒有引用BOL)。

對於我來說,將一個DataSet(這是一種數據層的概念)返回到BL似乎有點麻煩。所以,我建議你從DataSet中創建一個BL對象(DTO),然後將該對象暴露給BOL。這將整理您的參考資料並更清楚地排列每一層的責任。

+0

BL從DAL調用select方法,DAL方法返回一個DataSet,所以你基本上說的是使用一個DTO來「轉換」數據集,然後我可以把它呈現給BOL,我是否正確地使用了它?如果是, DTO應該放在一個單獨的項目中,因爲你說的是​​「BL對象」,但是如果我在Methods.cs(BL層)或該項目中的另一個層中創建一個新對象,那麼這個對象仍然沒有與其頂層進行通信BOL)。對不起謝謝你的幫助。 – 2012-07-12 11:40:26

+0

@DanielSh。通常,您可以在BL和BOL之間創建另一個共享DLL。你可以將這個項目命名爲「合同」或類似的東西。這個DLL在邏輯上由BL擁有,因爲它暴露BL數據,但可以在雙方中引用。如果您接着轉移到對機器的拆分,可以在BOL端(wsdl等)生成客戶端協議。 – 2012-07-12 12:32:22