【问题标题】:What is appropriate formatting style when multiple methods are invoked from a method从一个方法调用多个方法时,什么是合适的格式样式
【发布时间】:2013-10-26 07:23:00
【问题描述】:

所以我有三种可能,我给出真实的代码,因为枯燥的例子会导致对我的问题的误解

1 大软管方法 - 一条龙

return ItemDtoMapper.generateItemDtoFromItem(itemDao.saveItemAndReturn(ItemDtoMapper.generateItemFromItemDto(itemDto, UserDtoMapper.generateUserFromDto(userService.findByUserName(UserNameExtractor.getLoggedUser())))));

2 软管格式化 - 用括号分隔

 return ItemDtoMapper.generateItemDtoFromItem(
     itemDao.saveItemAndReturn(
          ItemDtoMapper.generateItemFromItemDto(itemDto, UserDtoMapper.generateUserFromDto(
              userService.findByUserName(
                 UserNameExtractor.getLoggedUser())))));

3。疯狂的对象创建 - 拆分显式对象的调用

UserDto userDto = userService.findByUserName(UserNameExtractor.getLoggedUser());
User user = UserDtoMapper.generateUserFromDto(userDto);
Item itemForSave = ItemDtoMapper.generateItemFromItemDto(itemDto, user);
Item itemForDao = itemDao.saveItemAndReturn(itemForSave);
return ItemDtoMapper.generateItemDtoFromItem(itemForDao);

我知道我的软件架构并不完美,但这个问题只是为了在这种情况下获得有关专业格式的最佳答案。

【问题讨论】:

  • 我很惊讶有价值的答案基本上都支持所有方法:)

标签: java code-formatting


【解决方案1】:

我投票给第二个。为了提高可读性,我将添加静态导入(Alt+Enter 在 Intellij Idea 中的方法上)并为重复使用的方法 ItemDtoMapper.generateItemDtoFromItem 添加别名,如 ItemDtoMapper.newItemDto。符号越少越好。

static import ItemDtoMapper.generateItemDtoFromItem;
static import UserNameExtractor.getLoggedUser;

...

return newItemDto(
        itemDao.saveItemAndReturn(
            newItemDto(
               itemDto, 
               newUser(userService.findByUserName(getLoggedUser())
            ))));

或者可能是提取嵌套调用使其更具可读性:

ItemDao daoToSave = newItemDto(
    newItemDto,
    newUser(userService.findByUserName(getLoggedUser())
));

return newItemDto(itemDao.saveItemAndReturn(daoToSave));

【讨论】:

  • 选择这个是因为提示代码应该是什么样子,灵活地解决我的问题并提出重构(IntelliJ 快捷方式就像一个魅力:)
【解决方案2】:

tl;dr 可读性优于简洁性。

在您是唯一的开发人员并且您将来不必维护的项目中编写单行代码可能很酷,但是因为您要求“专业”...

正如您所说,“疯狂的对象创建”是要走的路。为什么?

  1. 您可以命名计算的所有后续部分,因此代码 是不是更容易阅读

  2. 代码应该在一些小范围内(例如专用函数),所以那些 无论如何,只要范围结束,其他变量就会消失;

  3. 无论如何都会创建这些对象,只是没有变量引用 它们,因此实际上不存在性能影响。

此外,您不应根据刚刚编写的代码选择自己的格式。在整个公司中使用一些标准格式化程序,让您的 IDE 始终以连贯的方式自动格式化您的代码。

【讨论】:

    【解决方案3】:

    我能想到一个客观的答案:

    • 如果你能想到好的变量名,那就选择第二个,因为它更清晰

    • 如果您想不出好的变量名,请选择第一个,因为它记录了调用彼此之间无序这一事实。
      (后者表明它们必须按特定顺序发生,这可能会让读者困惑,想知道为什么会这样。)

    【讨论】:

      【解决方案4】:

      我们使用第二个。

      1.优点: - 没有额外的对象创建, - 格式良好的易于阅读。 2. 对比: - 如果编辑,需要注意点和括号

      【讨论】:

      • 无论如何都会创建这些对象,只有引用它们的变量可能被称为“附加”。
      猜你喜欢
      • 1970-01-01
      • 2023-02-24
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2020-07-05
      相关资源
      最近更新 更多