假设我正在创建一个存储库来存储数字电子书,如下面的界面所示。该存储库将存储图书的实际文本,以及标识图书的元数据(书名、作者、出版商、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 也可以解决这个问题,但我想设计我的存储库而不假设将使用延迟加载