【问题标题】:Refactoring, nested method calls重构、嵌套方法调用
【发布时间】:2012-01-19 14:54:34
【问题描述】:

我正在重构一个有很多嵌套调用的程序,例如

ServiceManagement.getGlobalizationService()
                    .createExportConfiguration(
                            exportConfiguration,
                            getAdminWebClientSession().getUser().getToken()
                                    .getTokenValue());

我希望得到一些建议,关于在这里哪种重构是合适的,以及开始所说重构的最佳和最简单的地方,现在我发现这是一个过于复杂和不清楚的块。

【问题讨论】:

  • 得墨忒耳定律和最少知识原理在这里浮现在脑海中。虽然Code Review 可能是一个更好的地方。
  • @Anthony Pegram 我刚刚阅读了有关该法律的维基百科条目,非常有帮助,谢谢。如果您或其他人想提供答案作为重构以更好地遵守该法律的最佳方式,我很乐意接受。

标签: java refactoring


【解决方案1】:

第一件事:您是否完全确定这些调用都不会(我的意思是永远)返回 null?如果您不完全确定,那么您应该这样做:

GlobalizationService gs = ServiceManagement.getGlobalizationService();
if (gs!=null) {
  ....
}

或者你可以捕获 NullPointerException。

如果您完全确定这不是必需的,那么有一个有用的轻微重构以提高可读性:

TokenValue tv = getAdminWebClientSession().getUser().getToken().getTokenValue();
ServiceManagement.getGlobalizationService()
                .createExportConfiguration(exportConfiguration,tv);

您可能会考虑应用得墨忒耳定律直接从 AdminClientSession 获取 TokenValue,但在一般情况下,重构不一定有用。 Demeter 法则的替代应用将 TokenValue 或 Token 传递给该代码所在的方法,但这也不一定是一个好主意。

【讨论】:

  • 如果您想根据得墨忒耳法则添加一些关于未来重构的必要性,我很乐意接受这个作为答案
猜你喜欢
  • 1970-01-01
  • 2012-01-14
  • 2019-11-08
  • 1970-01-01
  • 2012-07-15
  • 2019-09-19
  • 2015-08-14
  • 2015-09-15
  • 1970-01-01
相关资源
最近更新 更多