在单个地图中执行多个任务是否是一个好习惯

穆罕默德·伊利亚斯(Muhammad Ilyas):

我是反应式编程的新手,我希望这是在单个映射中执行多个任务的好习惯,或者我应该为每个单个操作创建单独的映射。

方法一

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有一个额外的docker容器来执行构建任务是一种好习惯吗?

使用此“快捷功能”是否是一个好习惯?

在同一个C ++源文件中使用多个命名空间是否是一种好习惯?

扩展NSError是一个好习惯

JFrame-在一个JFrame中使用多个面板是一种好习惯吗?

给每个CouchDB用户一个单独的数据库是否是一种好习惯?

将错误代码的行号记录给用户是否是一个好习惯?

解析文档字符串是否是一个好习惯?

在INSERT语句中使用CHECK约束来验证数据是否是一个好习惯?

将war文件映像放入docker容器是否是一个好习惯?

在PUT方法上添加参数是否是一个好习惯?

在RMQ中关闭动态铲是否是一个好习惯?

将实体bean用作前端是否是一个好习惯

在生产中自行托管wcf服务是否是一个好习惯

在hibernate / jpa实体类中定义save方法是否是一个好习惯?

在JavaScript中结合设计模式是否是一个好习惯

在内部AWS网络内部使用加密是否是一个好习惯?

断言是不是一个好习惯?

传递Ninject内核是一个好习惯吗?

Spring在方法上的@Profile是一个好习惯吗

每层集成测试是一个好习惯吗?

使用`import __main__`是一个好习惯吗?

链接libstdc ++ static是一个好习惯吗?

这是一个好习惯吗?“ / * /某物/ * /某物// * /”

方法链接-为什么这是一个好习惯?

缓存Fragment是一个好习惯吗?

为什么“拖拽”文件不是一个好习惯?

经常使用$ scope。$ apply()是一个好习惯吗?

拥有大量 childEventListeners 是一个好习惯吗?