Java 从不同资源创建视图对象的最佳方法(模式?)

Java 从不同资源创建视图对象的最佳方法(模式?),java,design-patterns,builder,Java,Design Patterns,Builder,目前,我正在根据搜索结果(来自不同的单一资源)构建一个视图对象,如下所示: ViewObject vo = searchResultToViewObjectMapper.map(searchResult); private SomeOtherResourceRepository someOtherResourceRepo; private SomeUrlBuilder someUrlBuilder; private SearchResultToViewObjectMapper search

目前,我正在根据搜索结果(来自不同的单一资源)构建一个视图对象,如下所示:

ViewObject vo = searchResultToViewObjectMapper.map(searchResult);
private SomeOtherResourceRepository someOtherResourceRepo;

private SomeUrlBuilder someUrlBuilder;

private SearchResultToViewObjectMapper searchResultToViewObjectMapper;

public ViewObject build(SearchResult) {
    ViewObject vo = searchResultToViewObjectMapper.map(searchResult);

    String reference = someOtherResourceRepo.getOtherResource(searchResult);

    String urlToOtherResource = someUrlBuilder.build(reference);
    vo.setUrlToOtherResource(reference);

    return vo;
}
这个很好用

但是,现在我想添加一些图片。这些图片是url,我只能通过搜索结果以外的其他资源确定它们的位置

我的第一个想法是使用Builder模式,它将成为:

ViewObject vo = viewObjectBuilder.build(searchResult);
viewObjectBuilder将执行以下操作:

ViewObject vo = searchResultToViewObjectMapper.map(searchResult);
private SomeOtherResourceRepository someOtherResourceRepo;

private SomeUrlBuilder someUrlBuilder;

private SearchResultToViewObjectMapper searchResultToViewObjectMapper;

public ViewObject build(SearchResult) {
    ViewObject vo = searchResultToViewObjectMapper.map(searchResult);

    String reference = someOtherResourceRepo.getOtherResource(searchResult);

    String urlToOtherResource = someUrlBuilder.build(reference);
    vo.setUrlToOtherResource(reference);

    return vo;
}
问题是:这是一个好办法吗?还是有其他(更好的)方法?我也很好奇DDD方法是如何做到这一点的


提前谢谢

如果您在创建对象之前拥有所有可用的资源,那么使用工厂将非常有用-只需将它们传递给工厂方法,它就会发挥神奇的作用


如果您正在创建的对象(视图)是分步骤创建的,即首先您只有
搜索结果
,在此之后,您将进一步挖掘并获得一些添加到视图中的额外URL,然后您对更多信息进行更多搜索,只有这样您才想获得视图对象,建筑商是更好的解决方案。

您描述的不是建筑商,而是工厂。工厂在一个步骤中构建对象,而构建器在几个步骤中构建对象。此示例提供了一个步骤,但它需要多个资源。实际上,我甚至可能需要将这个seeachService推回,以便本例中的构建器可能需要很长的as参数,而不是searchresultWe。我们会分步创建视图对象。所以我们确实使用了一个构建器。但不像我发现的构建器模式(即,作为类的一部分),相反,它就像一个单独的类,具有多种构造方法。看起来很像工厂,但它做的更多,所以我不会这样称呼它。此外,factory更像-->函数create(枚举类型);但对我们来说,情况并非如此。