2

我有一個asp.net mvc 2.0應用程序,其中包含像日曆,管理等區域/模塊...有可能有多個區域需要訪問相同的回購的情況,所以我不知道在哪裏放置數據訪問層和存儲庫。你會如何組織這個在asp.net mvc?

第一個選項: 我應該創建數據訪問層的文件在每個領域及其隨行庫(LINQ到我的情況,SQL),所以每個區域僅包含由這些領域所需的表,和存儲庫。

好處是,運行該模塊所需的一切都是一個地方,因此它更加封裝(無論如何,在我的腦海中)。缺點是我可能有重複的查詢,因爲其他模塊可能使用相同的查詢。

第二個選項 或者,將DAL和存儲庫放在區域之外並將它們視爲全局?

好處是我不會有任何重複的查詢,但我可能會加載很多不必要的查詢和DAL表,爲某些模塊。爲未來的項目重用或修改這些模塊也有更多的工作(儘管重用它們的機會很渺茫:))

哪個選項更有意義?如果有人有更好的方式,我很樂意聽到它。

謝謝!

回答

2

我會將它們移到自己的程序集/類庫中,並根據「聚合」創建存儲庫。意思是,爲所有共享目的的操作(例如帖子,評論,標籤等)創建一個存儲庫和DataContext。

這將幫助分離每個DataContext應該做什麼,並儘量減少DataContext在幕後進行的跟蹤。

此外,我不確定你的意思,「但我可能正在加載大量不必要的查詢和DAL表以滿足某些模塊的要求。」如果你監視Linq創建的SQL,你可以很容易地調整你的查詢。在您的存儲庫中創建只從適當的表中返回適當數量的記錄的公共方法。您會驚奇地發現,通過Linq最大限度地減少「不必要的查詢」,您可以有效地獲得SQL。

+0

「但我可能正在爲特定模塊加載大量不必要的查詢和DAL表。」 - 我的意思是加載模型不需要或不使用的查詢。 – chobo 2010-05-16 05:37:30

+0

也許我不瞭解情況,但不應該加載查詢和進行數據庫調用,而不管您選擇何種應用程序結構,都不需要或不使用數據庫調用。例如:「管理」區域和「日曆」區域都可以使用他們自己的「CalendarRepository」實例,但您應該創建必要的公共方法,以便只從數據庫返回所需的數據。我想我很難想象一個場景,其中有很多不必要的查詢和DAL被加載... – 2010-05-16 06:57:00

+0

我希望對此有更多的意見,但從我的研究看來,有很多方法可以做事情,似乎歸結爲主要偏好。 – chobo 2010-05-17 22:31:08