【问题标题】:Does repository implementation be a part of infrastructure?存储库实现是否是基础架构的一部分?
【发布时间】:2013-02-20 18:52:22
【问题描述】:

在一个 DDD 项目中,我有这样的结构:

基础设施

  • MyProj.Library(包含辅助方法)
  • MyProj.Factory(包含 IoC 和 DI 方法)
  • MyProj.Data(包含 IUserRepository 的实现)

  • MyProj.Domain(包含域聚合和存储库接口,即 IUserRepository)

应用程序

  • MyProj.WebAPI

我需要知道 MyProj.Data 是属于基础设施层还是领域层。我真的很困惑实现的存储库属于哪里。

【问题讨论】:

    标签: c# domain-driven-design ddd-repositories


    【解决方案1】:

    通常情况下,您会在基础架构层中实现存储库,而在域层中拥有存储库接口。

    作为一个例子,看看Onion Architecture 的状态

    内层定义接口。外层实现接口

    在这个simple implementation of the Onion Architecture 中,VisitorRepository 驻留在基础设施层并实现在核心(域)层中找到的 IVisitorRepository。

    【讨论】:

    • 你的意思是:六边形架构
    • 其实没有,但是 Onion 架构类似于 Hexagonal 架构。虽然我发现洋葱架构更具体。
    • 好吧,看来您提议基础设施层位于域模型下方,与 UI 层并排。我从 DDD 中学到的是基础设施对所有其他层都是通用的,并且位于项目层的顶部。所以,在这种架构中,领域核心不能依赖基础设施,但在 DDD 中可以。
    • 使用领域驱动设计:解决软件核心中的复杂性中描述的分层架构,基础设施层位于底部。此外,域层应与其他层隔离,例如UI、应用程序、基础架构。
    • 在分层架构上应用 DDD 时,存储库实现进入领域层,而不是基础设施层。如果您注意到较低层不允许(根据定义)依赖于较高层,原因应该很明显。也就是说,基础设施不能依赖于域。在这里,重要的是要理解“不依赖于”意味着对更高层所做的更改(例如,我们添加/删除/修改实体)必须不需要对较低层进行更改(我这样说只是为了避免与层之间引用的方法调用或类型混淆)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 2019-02-03
    • 2017-03-30
    • 2019-01-17
    • 1970-01-01
    相关资源
    最近更新 更多