8

如何將數據傳遞給n層應用程序中的圖層?我制定了3種不同的方法。在ntier應用程序中傳遞數據

A) 通用的.NET對象的通用數據表,哈希表,通用的數據集,字符串,整數等.. 然後使用數據集,以填補其獲取發送到UI層業務對象。

alt text http://img11.imageshack.us/img11/460/generic.png

http://dabbleboard.com/draw?b=eiu165&i=26&c=54eef6f1ac01f03c85919518f4a24e798e57e133

無需額外的層需要 CON-有通用的數據集和表在業務層

B) 工作使用其他圖層的實體圖層請參考。該圖層將包含強類型數據集或普通舊C對象。這些對象大多是容器數據,而且邏輯很少。這些將是發送到UI層的相同對象。

alt text http://img8.imageshack.us/img8/6454/entities.png

http://dabbleboard.com/draw?b=eiu165&i=6&c=d0c2b346894a96b12bd3867f630e474a2af098fa

在所有層中 CON-與同一類工作添加參考entities.dll到所有層

C) 使用數據傳輸對象(conatiner對象o在DataAccess層中定義)。然後使用這些對象來填充發送到UI層的業務對象。

alt text http://img43.imageshack.us/img43/1236/transferp.png

http://dabbleboard.com/draw?b=eiu165&i=27&c=f886efa3f9d5eb4b45ddb02361c79cdcdaec0a9b

業務層不會有泛型類 工作CON組有兩種類型的對象的工作,你將不得不滋潤業務對象與轉移對象

我們在工作中進行了討論,並希望看到社區的想法。我還添加了一個dabbleboard的鏈接。請複製並創建,而不是編輯。
感謝

+1

我會+1你只是爲了連接dabbleboard。我從來不知道它。謝謝! 現在......你又有什麼問題了? – Randolpho 2009-05-27 19:11:09

+0

在dabbleboard上同上。這很酷。 – NotMe 2009-05-27 19:18:43

回答

5

如果您使用的是分層辦法,這意味着所有層都在同一個進程空間(基本上)執行,因此不存在編組/序列化,我會用方法B.去創建一個獨立的模塊你的程序的所有方面都依賴於你的實體,並與之相結合。

但是,如果您使用的是分層方法,因爲你的標題所暗示的,這意味着有一些交叉進程和/或網絡邊界,我建議你去與方法C.你是不是真的通過傳遞實例,你傳遞副本,所以你得到的任何好處,如耦合到相同的對象,如MVC方法的可觀察選項,都會丟失。更好的是在每一層級定義數據API,而不是嘗試全面使用同一個類。

0

我喜歡選項C,但它也給我停下來的原因有兩個:

  1. 我要傳播什麼樣的性質在是太多地方knwowledge。
  2. DTO必須是可序列化的,這並不可怕,但仍是一個考慮因素。
0

我假設所有3層都存在於同一個應用程序中。在java atleast中,我使用Hibernate進行數據訪問,並在所有層中使用這些數據bean。 (選項B)能夠重用層中的實體是有意義的。

1

偉大的問題 - 一如既往,答案必須是「它取決於」。

關於應用程序的類型,以及是否確實需要具有業務對象(實體),而不是傳輸對象(即與數據庫實體對應的非對象業務對象)。傳統上,我會認爲你總是需要通用數據集(或數據表),純粹是出於性能的原因。無論什麼時候需要使用,顯示或操縱更大的集合,傳統的嚴格OO實例化大量業務對象的方式都失敗了。

但是,自從我開始使用Linq到SQL,我的範例發生了變化。因爲Linq模型可以成爲一切 - 業務對象,傳輸對象和通用數據集,所以完全不再需要這一點。我還沒有探索過它在真正的大型應用程序中的運行情況,以及是否需要將前端代碼與Linq模型隔離。我曾與同事進行過討論,但都沒有真正找到答案。

相關問題