2
我正在學習AutoMapper並瞭解它用於對象映射。但是現在EFCodeFirst,Dapper和Petpoco都冷卻了這些東西,這將允許我們直接使用POCO和數據庫嗎?我們真的需要Automapper嗎?
那麼有誰能讓我知道爲什麼我們仍然需要automapper嗎?
在此先感謝
最好的問候, Jalpesh
我正在學習AutoMapper並瞭解它用於對象映射。但是現在EFCodeFirst,Dapper和Petpoco都冷卻了這些東西,這將允許我們直接使用POCO和數據庫嗎?我們真的需要Automapper嗎?
那麼有誰能讓我知道爲什麼我們仍然需要automapper嗎?
在此先感謝
最好的問候, Jalpesh
我通常使用Automapper映射域模型查看mdoels。如果進行DDD,通常認爲在您的視圖中使用您的域模型並不是一個好主意 - 視圖通常對域有不同的關注點。
例如,你可能有一個用戶模式在您的域:
public class User
{
public int Id {get;set;}
public string EmailAddress {get;set;}
public string FirstName {get;set;}
public string Surname {get;set;}
public string HashedPassword {get;set;}
public string EyeColour {get;set;}
}
而且你可能有一個用戶彙總頁面,顯示這些項目的一個子集:
public class UserSummary
{
public string EmailAddress {get;set;}
public string Surname {get;set;}
}
你可以使用該視圖上的UserSummary類,但您可能會從數據庫中獲取域用戶模型。在這種情況下,你可以使用Automapper到Domain.User映射到ViewModel.UserSummary
var user = _repository.Get(1);
var viewmodel = Automapper.Map<Domain.User, ViewModel.UserSummary>(user);
return View(viewmodel);
它會有什麼性能開銷,因爲我打算它作爲非常大的網站? –
我真的不認爲這會造成問題。我在大型網站上使用沒有問題。實際上設置地圖可能需要一些時間(Mapper.CreateMap調用),並且應該在應用程序啓動時完成一次。以下是關於Automapper性能的分析:http://lostechies.com/jimmybogard/2009/08/05/analyzing-automapper-performance/ – Paul
如果您的View正在進行分頁或過濾,則可能會有性能損失。 Automapper不能與IQueryable對象一起工作,因此您的查詢將在映射時執行。如果您使用Telerik等網格,則在映射後返回viewdata時,它將應用其過濾和排序。你會想看看投影解決這個問題。 – Brian