Скажем, я создаю хранилище для хранения электронных электронных книг, как показано в интерфейсе ниже. В этом хранилище будет храниться фактический текст книги, а также метаданные, которые идентифицируют книгу (название, автор, издатель, ISBN и т. Д.).
public interface IBookRepository
{
void AddBook(Book newBook);
void DeleteBook(int bookId);
void UpdateBook(Book updatedBook);
Book GetBook(int bookID)
}
public class Book
{
public int BookId {get; set;}
public string Title {get; set;}
public string Author {get; set;}
public IList<Page> Contents {get; set}
}
public class Page
{
public int PageNumber {get; set;}
public string PageContent {get; set;}
}
В большинстве случаев я не хотел бы получать весь текст для книги, поскольку это было бы довольно дорого. В большинстве случаев все, что меня волнует, - это метаданные, например, я могу просто захотеть создать список книг. Таким образом, было бы приемлемо в отношении DDD также разрешить IBookRepository
иметь методы, которые возвращают BookSummary
объекты? Сводные объекты книги включают метаданные, но не фактическое содержание книги.
А как насчет метода UpdateBook(BookSummary book)
? Скажем, я хочу обновить свойство Book.Rating
, но не нужно / не хочу читать все содержимое книги из репозитория, чтобы сделать это.
public interface IBookRepository
{
//Full Book Methods
void AddBook(Book newBook);
void DeleteBook(int bookId);
void UpdateBook(Book updatedBook);
Book GetBook(int bookID)
//BookSummary Methods
BookSummary GetBookSummary(int bookID)
IEnumerable<BookSummary> GetBooksByAuthor(string authorName);
IEnumerable<BookSummary> GetBooksByGenre(int genreId);
void UpdateBook(BookSummary bookSummary);
}
public class BookSummary
{
public int BookId {get; set;}
public string Title {get; set;}
public string Author {get; set;}
public int PageCount {get; set;}
}
Примечание: я знаю, что использование ORM с отложенной загрузкой также могло бы стать решением этой проблемы, но я хотел бы разработать свои хранилища без предположения, что будет использоваться отложенная загрузка