【问题标题】:How would you organize this in asp.net mvc?你会如何在 asp.net mvc 中组织这个?
【发布时间】:2010-05-15 20:36:43
【问题描述】:

我有一个 asp.net mvc 2.0 应用程序,其中包含日历、管理等区域/模块...可能会有多个区域需要访问同一个 Repo,所以我不确定该放在哪里数据访问层和存储库。

第一个选项: 我是否应该为每个区域创建数据访问层文件(在我的情况下为 Linq to SQL)及其随附的存储库,因此每个区域仅包含这些区域所需的表和存储库。

好处是运行该模块所需的一切都在一个地方,因此它更加封装(无论如何在我看来)。缺点是我可能有重复的查询,因为其他模块可能使用相同的查询。

第二个选项 或者,将 DAL 和存储库放在区域之外并将它们视为全局会更好吗?

优点是我不会有任何重复的查询,但我可能会为某些模块加载很多不必要的查询和 DAL 表。为未来的项目重用或修改这些模块也需要做更多的工作(尽管重用它们的机会微乎其微:))

哪个选项更有意义?如果有人有更好的方法,我很乐意听到。

谢谢!

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-2 repository domain-driven-design


    【解决方案1】:

    我会将它们移到自己的程序集/类库中,并基于“聚合”创建存储库。意思是,为所有具有共同目的的操作(即帖子、cmets、标签等)创建一个存储库和 DataContext。

    这将有助于区分每个 DataContext 应该做什么,并最大限度地减少 DataContext 在幕后所做的跟踪。

    另外,我不确定您的意思是什么,“但我可能会为某些模块加载很多不必要的查询和 DAL 表。”如果您监视 Linq 正在创建的 SQL,您可以很容易地调整您的查询。在您的存储库中创建仅从适当的表返回适当数量的记录的公共方法。您会惊讶地发现,通过 Linq 最大限度地减少“不必要的查询”,您可以获得 SQL 的效率。

    【讨论】:

    • “但我可能会为某些模块加载很多不必要的查询和 DAL 表。” - 我的意思是加载模型不需要或使用的查询。
    • 也许我不了解这种情况,但您不应该加载查询并进行不需要或使用的数据库调用,无论您选择何种应用程序结构。例如:“Admin”区域和“Calendar”区域都可以使用它们自己的“CalendarRepository”实例,但您应该创建必要的公共方法,以便仅从数据库返回所需的数据。我想我很难想象会加载很多不必要的查询和 DAL 的场景......
    • 我希望对此有更多意见,但根据我的研究,似乎有很多方法可以做事,而且似乎主要是偏好。
    猜你喜欢
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 2014-11-21
    • 2011-08-21
    • 1970-01-01
    • 2017-10-28
    相关资源
    最近更新 更多