2015-04-29 2 views
1

Какое правильное использование сущностей и DTO при выполнении действий с базой данных? Мое мышление заключается в том, что лучше всего использовать DTO при чтении из базы данных и сущностей при создании/обновлении базы данных. В качестве небольшого примера рассмотрим Teh следующее:Использование сущностей и DTO при выполнении чтения и создания/обновления в базе данных

книги класса

public class Book/Entity 
{ 
    public int Id {get; set;} 
    public string Title {get; set;} 

    public int AuthorId {get; set;} 
    public Author Author {get; set;} 

} 

Автор Класс/Entity

public class Author 
{ 
    public int Id {get; set;}  
    public string Name {get; set;} 

    public int BookId {get; set;} 
    public Book Book {get; set;} 
} 

BookAuthorDto Класс

public class BookAuthorDto 
{ 
    public string Title {get; set;}  
    public string Name {get; set;} 
} 

Теперь, скажем, у нас есть WebAPI Контроллер книги.

public class BookController : ApiController 
{ 
    public IHttpActionResult GetBook(int id) 
    { 
     var BADto = context.Book.Where(book => book.ID == id) 
      .Select(book => new BookAuthorDto 
      { 
       Title = book.Title, 
       Name = book.Author.Name 
      }); 

     return Ok<BookAuthorDto>(BADto); 
    } 

    public IHttpActionResult PostBookEntity(Book book) 
    { 
     // Code for saving book to DB 
    } 

    public IHttpActionResult PostBookDto(BookAuthorDto BADto) 
    { 
     // Code for creating entities from DTO 
     // Code for saving the created entities to Database 
    } 
} 

Какой метод считается более «правильным» методом PostBookEntity или методом PostBookDto?

ответ

0

Объекты в значительной степени являются DTO. Используйте сущность для доступа к базе данных и используйте модели просмотра в своих действиях.

1

На самом деле это есть хорошая идея отделить запросы от изменений данных (вставить, обновить, удалить) - это называется Command Query Responsibility Segregation pattern (CQRS).

Вот некоторые большие сообщения от экспертов

An introduction to CQRS by M.Fowler

Some good reasoning on why Entities + Dto's are better than just using Entities for all cases

Смежные вопросы