2009-04-20 29 views
1

我有一個Web應用程序連接到WCF服務的業務邏輯。爲了性能和互操作性的原因,我想使用簡單的Dto來在WCF邊界處傳輸數據。鍵入的數據集連同Dtos

但是,我必須使用類型化的數據集進行數據訪問(ORM或任何其他選項由於政治原因而不可用)。

將Dto與類型數據集一起使用是一個好主意。有沒有人這樣做?有推薦的模式嗎?最重要的是有沒有一個庫/工具/方法來從類型化的數據集中自動生成Dto?

回答

0

我建議使用類型化DataRow-s,DataTable-s。類型化的DataRow和Dto對象之間確實沒有太大的區別。 性能明智,你必須測試,普通Dto-s將會有所幫助(我懷疑它)。 至於互操作性,類型化DataRow-s是普通類,所以它們可以像Dto對象一樣互操作。

+0

好與使用數據行作爲DTO是他們都沒有標明DataContracts問題。它們甚至不是可序列化的。我們測試了Dtos和序列化數據集之間的差異,並且對性能有顯着影響。 – Ender 2009-04-20 12:48:15

2

實體翻譯模式浮現在腦海。 http://msdn.microsoft.com/en-us/library/cc304747.aspx
好吧,也許是它的一個變種。

我不得不最近做類似的事情,而且我剛剛創建了另一個「層」,它將存儲在數據行/數據表等中的數據轉換爲數據合同對象。服務層可以將您的數據訪問方法的結果作爲參數調用這個新的圖層方法。

這裏有一個快速和骯髒的僞代碼示例:

public class personTranslator 
{ 

    public static PersonDataContract TranslateToContract(Datarow personDataRow) 
    { 
     PersonDataContract resultPerson = new Person; 
     resultPerson.FirstName = personDataRow["FirstName"]; 
     resultPerson.LastName = personDataRow["LastName"]; 
     . 
     . 
     [etc.] 

     return resultPerson; 
    } 
} 

SERVICELAYER類

public PersonDataContract GetSpecificPerson([Parameters]) 
{ 
    [other setup/validation code...] 
    return PersonTranslator.TranslateToContract(PersonDataAccess.GetPersonRow([Parameters])); 
}