我是反应式编程的新手,我希望这是在单个映射中执行多个任务的好习惯,或者我应该为每个单个操作创建单独的映射。
方法一
Mono.just(new Hashmap())
.map(m -> {m.put("One"); return m;})
.map(m -> {m.put("Two"); return m;})
.map(m -> {m.put("Three"); return m;})
方法2
Mono.just(new Hashmap())
.map(m -> {
m.put("One");
m.put("Two");
m.put("Three");
return m;
})
那么,哪种最佳实践特别会对性能产生影响?
让我更清楚地定义它。我想知道的是,在一个映射中键入多个目的代码的一种好习惯,或者我应该为每种目的创建映射,就像我现在有一个User对象一样,我想更新它的十个字段(可能是二十个)。
因此,如果我使用单个地图,我的代码将如下所示。
Mono.just(new User())
.map(user -> {
user.setFirstName("abc");
user.setMiddleName("abc");
user.setLastName("abc");
user.setEmail("abc");
user.setAddress("abc");
// setting twenty more fields.
return user;
});
还是我应该在这样的单独地图中完成每个作业
Mono.just(new User())
.map(user-> {user.setFirstName("abc"); return user;})
.map(user-> {user.setMiddleName("abc"); return user;})
.map(user-> {user.setLastName("abc"); return user;})
//twenty more map function called to set each property
最佳做法是什么?
那么,哪种最佳实践特别会对性能产生影响?
在实践中,性能几乎没有差别,因为反应堆具有可融合的优化功能,这意味着您的多个地图调用实际上会融合到一个操作员中。
因此,恕我直言,重点应该放在最清晰易读的方法上,在这种情况下(至少对我而言),是仅使用一个map调用的方法。
但是,我提出的另一个更大的建议是,在可能的情况下,在整个链中使用不可变的对象,而不是直接通过map调用来改变链中的对象。这实际上不是map调用的目的,出于多种原因,以这种方式对对象进行更改是不可取的。对于POJO,您可能想使用类似lombok的东西@With
,例如:
Mono.just(new User())
.map(user ->
user.withFirstName("abc")
.withMiddleName("abc")
.withLastName("abc")
.withEmail("abc")
.withAddress("abc")
);
虽然在这个人为的示例中,它没有功能上的差异,但更清晰易读,并且使用了“适当”的映射(映射到新值而不是对现有值进行变异。)在实际使用中,错误也少得多容易,因此更容易推断反应链的状态。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句