我有一個類Bookstore
,它實現了一個接口IBookstore
。通過接口搜索列表
Bookstore
具有作爲私有財產的圖書列表:private List<Book> AllBooks;
我不想通過接口暴露的書籍的完整列表。相反,我希望用戶根據某些屬性查詢圖書。所以,在IBookstore
我有以下幾點:
public interface IBookstore
{
IList<Book> SelectedBooks;
}
public class Bookstore : IBookstore
{
private List<Book> AllBooks;
public IList<Book> SelectedBooks { get; set; }
}
我希望做的是創建一個名爲SearchBooks
的方法,將搜索包含各種屬性的所有條目列表AllBooks,然後設置SelectedBooks
與結果。所以,我使用的是以下幾點:
Bookstore myStore = new Bookstore();
...
myStore.SearchBooks(A BUNCH OF CRITERIA);
myStore.SelectedBooks; // contains books selected by the criteria passed to SearchBooks above
爲什麼我想這樣做:
- 我將需要訪問
SelectedBooks
多次。我不想 多次運行搜索。 - 我希望SelectedBooks的列表屬於
myBookstore
。此對象只創建一次並在很多地方使用,所以我希望能夠在許多地方訪問相同的SelectedBooks
,而無需重新構建它。將其作爲當地財產存儲是不可取的;即,我不想做List<Book> myBooks = myStore.SearchBooks(A BUNCH OF CRITERIA);
。我有一個很好的理由。
我的問題
鑑於Book
有很多特性,例如Title
,Author
,Date
等,什麼是最簡單的方法任意通過一組搜索條件SearchBooks
,以便我可以在Bookstore
私人搜索我的列表?
例如,如果我有權訪問應用程序中的整個列表,我可以使用Linq。我可以傳遞一個Linq查詢到一個方法並讓查詢在myBookstore
內私下執行嗎?
您是否考慮過按條件緩存搜索結果?如果內存不用擔心,那麼只需從'SearchBooks(...)'方法返回結果即可。 – Aaron
@Aaron是的。我不想這樣做。 – Emily
我不想緩存結果的原因是因爲我正在編寫Unity3D的代碼,並且在Unity中,我可以創建一個對象的實例並使其在多個級別和多個GameObjects中保持不變。如果我在查詢結果時緩存了結果,那麼結果會被限定在創建它們的GameObject中,如果我想將它們來回傳遞給其他GameObjects,那麼我必須編寫控制邏輯,或者我有重新執行查詢。我寧願將結果保存在'myBookstore'中,因爲我可以在任何地方訪問結果,而無需做任何額外的工作。 – Emily