2010-05-31 45 views
1

我想讓自己習慣於TDD,DI和基於模式的開發。我對於應用程序開發並不陌生,但是因爲我打算在幾個月內啓動一個(大的)新項目,所以我想做好準備並從一開始就這樣做)。實體引用與服務和存儲庫

當前體系結構基於基於WCF的AppServer,MS SQL數據庫和訪問AppServer的WPF/WCF客戶端。

我有3個實體,住宿,公寓和來賓。入住有1間公寓和1位客人。 3個實體中的每一個都有它自己的Repository(因爲據我瞭解,它們是根實體)。實體類是POCO的,並且正在服務器和客戶端中使用。存儲庫在內部使用OR/Mapper(目前爲Entity Framework)。

目前有3個WCF服務,每個處理CRUD操作的實體都有一個...更多將隨着時間推移。

現在到我的問題... 在哪個層應引用的實體發生?存儲庫不應該依賴於彼此(爲了便於更換,但是應該比它們可以鬆散耦合地彼此依賴,因爲我已經使用LightCore作爲DI容器)。 據我瞭解,引用可以在存儲庫或服務中設置。

什麼是「正確」或更優雅的方式?

也許我誤解了一些東西,但引用似乎並沒有真正的高性能。例如,如果我有10,000住宿,15,000客人和150個公寓。如果我想返回500個停留點,包括來自服務的鏈接客人(儘管我想返回更多,500似乎是合理的),那麼這將高達500 * 15,000 = 750萬次迭代。 這似乎不是非常高效。當然,人們可以緩存,但緩存只有幫助到某一點。

或者我在設計的某個地方有一種誤解嗎?每一個建議,將不勝感激:)

[編輯]我仍然不確定如何進行我的設計,所以任何幫助將不勝感激。

回答

0

在我看來,存儲庫模式的訣竅不僅在於考慮原子根實體的上下文,而且還有一個用於聚合的並行上下文。爲了說明,假設我只有兩個實體,Book和Author。我將爲每一個存儲庫,但是說這兩個專門用於Book或Author的操作將是不真實的(特別是在使用EF時)。一本書可能有多個作者,作者可能已經出版了多本書。例如,要創建一本新書,我會在圖書庫中使用一個創建操作,但是將一本新圖書與現有作者相關聯(也就是說出於某種原因存在這種情況),我可能會在我的方法上有一個方法作者庫稱爲AddBookToAuthor(int authorId,Book book)。這將有效地檢索有問題的作者,將該書添加到作者的Books集合中,如果這本書是新書,則實際上在數據存儲中創建新的書實例。

+0

那麼你是說引用應該在存儲庫中進行?雖然此刻我正在使用EF,但我希望保留更改單個存儲庫的數據源的選項,而不必更改訪問第一個存儲庫的其他存儲庫(如使用上述方法)。 – Pharao2k 2010-06-03 17:47:50

+0

假設您使用直接POCO並將POCO傳入和傳出存儲庫,那麼從技術上講,可以使用EF來創建一個存儲庫,使用NHibernate和使用直接ADO的存儲庫。淨。在這一天結束時,存儲庫將成爲您業務層進行數據訪問的邊界。 – 2010-06-03 18:22:03

+0

好的,在我前面提到的場景中,可以通過Stay-Repository的GetAllStays()方法訪問Guest-和Apartment-Repository,並返回已經引用的Guests和Apartments的停留列表? – Pharao2k 2010-06-03 19:19:26