Скажем, я создаю репозиторий для хранения цифровых электронных книг, как показано в интерфейсе ниже. В этом репозитории будет храниться фактический текст книги, а также метаданные, идентифицирующие книгу (название, автор, издатель, 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 с отложенной загрузкой также было бы решением этой проблемы, но я хотел бы проектировать свои репозитории без предположения, что будет использоваться отложенная загрузка