撰写单页上界上下文(Composing bounded context on single page

2019-09-17 19:00发布

我开始的大项目,我想使用DDD。 主要的问题是如何在不复制数据和NH的映射显示来自多个界上下文数据。 我看着乌迪的播客关于复合应用程序。 他提及关于使用剃刀部分从多个限界上下文中显示的数据,但他没有提供任何细节。 有谁知道如何使用它,或者没有任何人知道其他办法吗?

Answer 1:

关于剃须刀的好处是,它可以让你有完全独立的控制器,负责呈现单页(门户风格)的部分。 例如,在你的主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 
    }
}

需要注意的是控制器不知道对方的存在,尽管它们会显示在同一页上的数据。 该库可以在使用DI容器注入成分根您的应用程序。



Answer 2:

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



文章来源: Composing bounded context on single page