rpc结构错误_结构性错误

浅浅的花香味﹌ 2023-02-25 04:58 81阅读 0赞

rpc结构错误

团队成员在使用以下代码时遇到了麻烦:

format_png

  1. void extractData(String targetUri) {
  2. Path tempFile = createTempFilePath();
  3. extractDataToPathAndUpload(tempFile, targetUri);
  4. cleanUp(tempFile); } void extractDataToPathAndUpload(Path tempFile, String targetUri) {
  5. try (FileOutputStream stream = createOutput(tempFile)) {
  6. // extract from db to file stream
  7. database.readTable(TABLE_1, stream);
  8. // upload the temp file to the destination
  9. uploader.upload(tempFile, targetUri);
  10. } }

上面的代码经过编辑和简化,使您对问题有所了解。 我们有一个数据库,一个临时临时文件要写入以及一个上载过程。

问题在于上upload呼叫只是无法正常工作。 真令人沮丧!

老鹰眼的读者可能会发现,在进行上upload调用时,由第二个函数内的OutputStream写入的临时文件尚未关闭。 那是个错误,解决方法是将调用uploadtry-with-resources块之外,该块的工作是关闭流,从而释放文件(至少在Windows上,您不能读取您也在写的文件!)。

错误不是那样!

这是一个很难发现的错误,是结构决策的结果。 上传调用属于导出操作之外的原因不仅是为了确保流关闭,还因为它是整个过程的另一个阶段。 该过程应该是:

  • 创建临时位置

    • 导出到临时位置
  • 清理临时位置

这里的缩进反映了作用域。

上面的实现合并了两个中间步骤,甚至似乎将上传操作放在了导出内部。 这是一个结构性错误。

有一个论点是,上面的代码应该被编写为三个函数,而不是两个:

  • 一种功能,用于管理临时文件,然后调用…
  • 下一个调用导出,然后上传的函数
  • 导出功能

这是一个很好的例子,说明在正确使用结构上获得一些额外的精度会减少难于发现的错误将我们赶走的可能性。

翻译自: https://www.javacodegeeks.com/2019/10/the-structural-bug.html

rpc结构错误

发表评论

表情:
评论列表 (有 0 条评论,81人围观)

还没有评论,来说两句吧...

相关阅读