Ich möchte das Ansichtsmodell für die Anzeige des Domänenmodells verwenden. Und ich möchte eine Eigenschaft für die Anzeige anpassen, wie soll ich das tun? Und ist es eine gute Übung, AutoMapper für die Anzeige zu verwenden?Zuordnen des Domänenmodells zum Anzeigen des Modells über AutoMapper oder nicht
Unten ist der Code Beispiel:
public class BookController : BaseController
{
private IBookService bookService;
public BookController(IBookService bookService)
{
this.bookService = bookService;
}
public ActionResult Details(int id)
{
var book = bookService.GetBookById(id);
return View(Mapper.Map<BookView>(book));
}
}
public class Book
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
public class BookView
{
public int Id { get; set; }
public string Name { get; set; }
}
Wenn ich eine andere Art und Weise zu verwenden, ich jede Eigenschaft anpassen kann, wie unten:
public ActionResult Details(int id)
{
var book = bookService.GetBookById(id);
return View(new BookView(book));
}
public class BookView
{
public BookView(Book book){
Name = book.Name +" Decorated";
}
public int Id { get; set; }
public string Name { get; set; }
}
Wie soll ich das tun? Und ist es eine gute Übung, AutoMapper für die Anzeige zu verwenden?
aktualisieren
Es ist im Szenario unter Verwendung AutoMapper scheint besser geeignet ist. Zum Beispiel das Zuordnen eines Ansichtsmodells zum Domänenmodell wie unten. Irgendwelche Meinungen?
[HttpPost]
public ActionResult Create(BookView bookView)
{
try
{
var book = Mapper.Map<Book>(bookView); //this is wrong
bookService.SaveOrUpdate(book);
return RedirectToAction("Index");
}
catch
{
return View();
}
}
Update 2
Für über View-Modell komplexe benutzerdefinierte Anzeige, möchte ich nicht AutoMapper verwenden Anzeigelogik abzubilden, AutoMapper vorausgesetzt, es abbilden kann. Weil es verschiedene Zwecke mischt. Zum Beispiel:
Mapper.CreateMap<Book, BookView>()
.ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Name + " this is for display purpose"));
Allerdings scheint die Verwendung der manuellen Zuordnung wie unten intuitiv.
public BookView(Book book){
//mapping here
}
Update 3
Zitat von Jimmy Bogard:
ich AutoMapper denke, mit, weil du die „=“ Operator nicht verwenden wollen, ist etwas faul. Stattdessen verwenden wir es zum Glätten und Umformen, Optimierung für die Umgebung des Zieltyps. Denken Sie daran, meine ursprüngliche Motivation für AutoMapper war:
Aktivieren Sie die Domäne Schicht von anderen Schichten durch Zuordnung zu DTOs
Dank @AndrewWhitaker für den Link zu schützen
Pro Update 2, wie mischt es verschiedene Zwecke? Ist das Ziel des ViewModels nicht das Anzeigen eines Domänenmodells? Automapper ist nur ein Vehikel dafür. –
Es vergleicht mit anderen Zuordnungen, zum Beispiel Domäne zu dto, die nicht angezeigt wird, und wahrscheinlich sauber. – Pingpong
Sie würden ein völlig anderes Mapping für Domain '->' DTO erstellen. Außerdem sollten Sie AutoMapper nicht verwenden, um von einer beliebigen TO-Domäne aus zuzuordnen. –