我有以下课程:
public class SomeAssebler {
private EnrichedRequest assembleBasicEnrichedRequest(BasicRequest request) {
EnrichedRequest enrichedRequest = new EnrichedRequest();
if (request != null) {
enrichedRequest.setId(request.getId());
enrichedRequest.setDate(request.getDate());
enrichedRequest.setParam(request.getParam());
}
return enrichedRequest;
}
private static EnrichedRequest assembleGeoDataEnrichedRequest(EnrichedRequest request, GeoData geoData) {
EnrichedRequest geoEnrichedRequest = Optional.ofNullable(request).orElse(new EnrichedRequest());
if (geoData != null) {
geoEnrichedRequest.setCity(geoData.getCity());
geoEnrichedRequest.setCountryCode(geoData.getCountryCode());
}
return geoEnrichedRequest;
}
private static EnrichedRequest assembleUserAgentEnrichedRequest(EnrichedRequest request, UserAgentData userAgentData) {
EnrichedRequest userAgentEnrichedRequest = Optional.ofNullable(request).orElse(new EnrichedRequest());
if (userAgentData != null) {
userAgentEnrichedRequest.setBrowser(userAgentData.getBrowserCode());
userAgentEnrichedRequest.setOperatingSystem(userAgentData.getOsCode());
userAgentEnrichedRequest.setManufacturer(userAgentData.getBrand());
}
}
public static EnrichedRequest assembleEnrichedRequest(BasicRequest request, GeoData geoData, UserAgentData userAgentData) {
EnrichedRequest enrichedRequest = assembleBasicEnrichedRequest(request);
enrichedRequest = assembleGeoDataEnrichedRequest(enrichedRequest, geoData);
enrichedRequest = assembleUserAgentEnrichedRequest(enrichedRequest, userAgentData);
return enrichedRequest;
}
}
它在不同的变压器中被称为:在geodatatransformer中
new KeyValue<>(key, assembleEnrichedRequest(basicRequest, geoData, null))
在useragenttransformer中:
new KeyValue<>(key, assembleEnrichedRequest(enrichedRequest, null, userAgent))
如果更多的“丰富”将被添加到未来这可能会变得非常丑陋。有人知道我怎么能设计得更好吗?我想到了建设者的设计模式,但我不确定。
1条答案
按热度按时间rjee0c151#
你可以用
Builder Pattern
,但您必须在代码中做一些更改。您可以通过这个链接进行检查,这个链接解释了如何使用生成器模式以及它解决了什么问题。你可以尝试这样的方法有很多不同的方法来创建一个
Builder
班级。