【问题标题】:Composing bounded context on single page在单页上组合有界上下文
【发布时间】:2012-06-10 07:34:09
【问题描述】:

我正在启动大型项目,我想使用 DDD。主要问题是如何在不复制 NH 的数据和映射的情况下显示来自多个 Bounded Context 的数据。我观看了 Udi 关于复合应用程序的播客。他提到了使用 Razor 部分来显示来自多个有界上下文的数据,但他没有提供任何细节。有谁知道怎么用或者有其他方法吗?

【问题讨论】:

  • 第一步是将应用程序划分为子系统。包含业务规则的应用程序的核心可以在一个子系统中实现,在另一个子系统中实现 UI,在另一个子系统中实现数据库。完成每个子系统后,您可以使用定义明确的消息格式在它们之间建立“桥梁”。 “子系统”类似于“有界上下文”。
  • @jeyoung:您所说的“子系统”也称为“层”。层与限界上下文不同。有界上下文垂直划分系统,层水平划分它们。
  • 子系统是域。见ooatool.blogspot.co.uk/2008/09/…

标签: asp.net-mvc razor domain-driven-design


【解决方案1】:

Razor 的好处在于它允许您拥有完全独立的控制器,这些控制器负责渲染单个页面的各个部分(门户样式)。例如在您的 Razor 主视图中:

<some_markup> New products </some_markup>

@{ Html.RenderAction("Get", "NewProducts"); }

<some_markup> Product ratings </some_markup>

@{ Html.RenderAction("Get", "ProductRatings"); }

其中NewProductsControllerProductRatingsController 属于不同的限界上下文,如下所示:

public class NewProductsController {

    private readonly IProducts repository;

    public NewProductsController(IProducts repository) {
        ...
    }

    [ChildActionOnly]
    public ViewResult Get() {
        // load products from repository and
        // return corresponding ViewModel 
    }
}

public class ProductRatingsController {

    private readonly IProductRatings repository;

    public ProductRatingsController(IProductRatings repository) {
        ...
    }

    [ChildActionOnly]
    public ViewResult Get() {
        // load product ratings from repository and
        // return corresponding ViewModel 
    }
}

请注意,尽管控制器会在同一页面上显示数据,但它们并不了解彼此。可以使用应用程序的Composition Root 中的 DI 容器注入存储库。

【讨论】:

  • 那么用户界面访问多个上下文,用户界面驻留在哪个上下文中?,在您的示例中,视图将驻留在哪里?
  • @Sudarshan 将用户界面限制在一个单一的上下文中将禁止您将其创建为信息丰富且用户友好的。有界上下文的思想是隔离大部分业务规则和逻辑。 UI 不需要那么孤立,因为在该级别上合并不会产生会降低可维护性的系统范围内的凝聚力。
【解决方案2】:

关于 NH 映射,每个有界上下文 (BC) 都应该有自己的一组映射,因此也应该有自己的会话工厂。配置 DI 容器以使其为每个相应的 BC 解析适当的会话工厂可能很棘手,因为必须“标记”会话工厂接口以与特定 BC 相关联,然后该 BC 中的所有依赖项也将必须与该标签相关联。另一种选择是创建一个开放的主机服务(例如 REST)来封装每个 BC,然后从您的 Web 应用程序中引用该服务。这样您就不必担心在 Web 应用程序中管理 NH 映射。

【讨论】:

    猜你喜欢
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2019-11-18
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多