我想讓自己習慣於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萬次迭代。 這似乎不是非常高效。當然,人們可以緩存,但緩存只有幫助到某一點。
或者我在設計的某個地方有一種誤解嗎?每一個建議,將不勝感激:)
[編輯]我仍然不確定如何進行我的設計,所以任何幫助將不勝感激。
那麼你是說引用應該在存儲庫中進行?雖然此刻我正在使用EF,但我希望保留更改單個存儲庫的數據源的選項,而不必更改訪問第一個存儲庫的其他存儲庫(如使用上述方法)。 – Pharao2k 2010-06-03 17:47:50
假設您使用直接POCO並將POCO傳入和傳出存儲庫,那麼從技術上講,可以使用EF來創建一個存儲庫,使用NHibernate和使用直接ADO的存儲庫。淨。在這一天結束時,存儲庫將成爲您業務層進行數據訪問的邊界。 – 2010-06-03 18:22:03
好的,在我前面提到的場景中,可以通過Stay-Repository的GetAllStays()方法訪問Guest-和Apartment-Repository,並返回已經引用的Guests和Apartments的停留列表? – Pharao2k 2010-06-03 19:19:26