說我正在創建一個存儲數字電子書的存儲庫,如下面的界面所示。這個存儲庫將存儲書的實際文本,以及標識書的元數據(標題,作者,出版商,ISBN等)。DDD存儲庫可以使用摘要對象來處理「真實」對象嗎
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也將是一個解決方案,但我想用的是延遲加載將用於
是但是如果將圖書添加到IBookRespository中,我的域名確實期望找到BookSummary。如果它們是獨立的存儲庫,那麼無法確保將Book添加到另一個會導致BookSummary出現在另一箇中。當然你可以設置兩個存儲庫指向同一個數據庫表,但這將是一個特定的實現。對我來說,有一個存儲庫意味着來自存儲庫的所有數據來自同一個數據存儲。看到我最新的與此相關的SO問題:http://bit.ly/jjUhbi – 2011-06-10 05:42:40
您可以從另一個庫調用一個存儲庫。 – 2011-06-10 08:09:50
我認爲存儲庫不應該調用其他存儲庫:http://stackoverflow.com/questions/1364461/should-a-repository-call-another-repository-or-should-a-repository-call-a-servic, – 2011-06-10 20:53:39