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