【问题标题】:Domain Layer + Repository Layer with asp.net mvc question域层 + 存储库层与 asp.net mvc 问题
【发布时间】:2011-06-10 02:51:04
【问题描述】:

关于我的域层/域服务的快速问题...我应该允许该层对数据库具有只读访问权限吗?即连接一个 IReadOnlySession 并只允许存储库层访问 CRUD 即持久性?或者 Repository 层应该同时执行 ReadOnly 和 CRUD,服务层调用 Repository 层?

我觉得很奇怪的一件事是,为什么大部分时间服务层只是直接调用回购协议,因此问题是 - 将 ReadOnly 移至域服务层。

编辑:

我决定在我的应用程序中有 3 层(对于任何对我所做的感兴趣的人),第一层是 WebUI(我总共有 3 层,业务需求),下面是域服务即所有业务规则,验证,检查用户是否可以执行操作 x,用户是有效用户,为数据调用 repo。最后一层是存储库层,即与数据库本身对话的层,我使用的是 LinqToSql,我所有的 CRUD 和 ReadOnly 逻辑都在这里。作为旁注,我创建了另一个名为 Model 的项目,这是实际的 LinqToSql 模型实体,即 Product、Item、Shop、Customer 等。UI、Domain Service 和 Repo 引用了这个项目,使我免于编写 DTO 和希望有不必要的复杂性。

【问题讨论】:

    标签: c# asp.net-mvc dns repository data-access-layer


    【解决方案1】:

    我将讨论视为这些层的职责。存储库显然是为了提供对数据库的抽象。正确完成后,存储库的用户无法判断您是使用 SQL 服务器、mysql 还是文件进行持久化。该层必须具有所有必要的 crud 操作。

    服务层是另一个抽象。它可能依赖于存储库的持久性。通常有更多的业务逻辑。可能是跨存储库问题或其他数据流(例如 gps)。

    有些应用不需要服务层。在需要之前不要添加它。如果你确实需要服务层,让它成为一个围绕 repo 暴露读/写的瘦说唱歌手,让你的模型只有一个直接依赖关系。

    【讨论】:

    • 感谢 rcravens- 服务层的原因:我有 3 个 Web UI 项目都非常相似,因此需要或要求!
    【解决方案2】:

    在您的应用程序中,只有一个“层”应该与数据库通信。

    在存储库模式中,它是存储库。

    不管是 CRUD 还是 ReadOnly,它都应该通过存储库到达数据库。

    【讨论】:

    • 感谢您的回答,rcravens 稍微快一点! :)
    • @haroon 如果您将鼠标悬停在时间戳上,您会看到我首先回答了。 (20:29 UTC,与 20:38 UTC)。当两个帖子的票数相同时,网站会随机显示顺序。
    • 大声笑...对不起我的错!在我得到答案的时候我从来没有标记答案,我只是在我确信我所做的是正确的时候才标记它,那时它只显示几个小时,谢谢你的提醒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    相关资源
    最近更新 更多