2011-06-25 73 views
4

假設DataLayer中有一個UserEntity需要轉換爲BusinessLayer中的用戶。這兩種類型之間沒有1:1映射,繼承不是一種選擇。從數據對象轉換爲業務對象。最佳實踐

我想將用戶轉換爲UserEntity和其他方式。這樣做的最好方法是什麼?我看到一些模式,但我不知道哪個好,爲什麼:

  1. 實現用戶2種方法:從實體和ToEntity
  2. 實現的TypeConverter
  3. 重載=操作

回答

2

不要重載賦值運算符 - 它很討厭,並且會咬任何繼承你的代碼的開發者。最好是明確的。

我會封裝邏輯映射這兩種類型(或更多,如果它不是1:1)在一個單獨的類。創建一個UserAdapter類,您可以在其中實現您的ToEntity/FromEntity方法。

並確保您使用AutoMapper以儘量減少代碼量。

AutoMapper使用流利配置 API來定義一個對象對象的映射 策略。 AutoMapper使用基於約定的匹配算法 匹配源到目標值。 目前,AutoMapper是面向 朝向模型投影場景來 弄平復雜對象模型的DTO 等簡單的目的,其設計 更適合於系列化, 通信,消息收發,或僅僅是 抗腐敗層的 之間域和應用程序層。

更新:

可以將這些方法添加到User類,它可能是足夠的一個小項目。當涉及到設計時,我有點純粹並且會將適配器邏輯保留在這些類之外。 User類爲什麼要依賴並具有UserEntity類的任何知識?把它們綁在一起對我來說有點味道。一個單獨的適配器層更具前瞻性。例如,如果您必須用不同的數據庫層(即從Linq2SQL轉移到EntityFramework或Dapper)來替換數據庫層,您只需創建新的適配器 - 您的業務類將保持不變。

+0

爲什麼不在用戶類中添加ToEntity/FromEntity? – JimK

+0

AutoMapper的+1。 –

+0

@JimK - 更新了答案 –