gpt4 book ai didi

java - 重构箭头反模式

转载 作者:行者123 更新时间:2023-11-30 05:53:35 26 4
gpt4 key购买 nike

我有一些数据要用单一方法查询。它已经到了成为箭头反模式的地步。它看起来像这样:

void queryData()
{
int masterIndex = getMasterIndex();
if (masterIndex != -1)
{
byte[] pageData = getMasterPage(masterIndex);
if (pageData) != null)
{
Item1 i1 = getItem1(pageData);
Item2 i2 = getItem2(pageData);

if (i1 != null && i2 != null)
{
showResults(i1, i2);
}
}
}
}

想象一下以上但更大。更多的 if 语句和被调用的每个方法都有相当数量的逻辑。

现在我能做的是重构上面的方法,所以所有 if 语句都是肯定的,如果为真则提前返回。

不过,我觉得将每个查询和有效性检查分解到它们自己的类中会更清晰。每个操作都将继承/实现如下接口(interface):

public interface Action
{
public void run();
public boolean wasSuccessful();
}

我会创建一个所需操作的列表,并一次执行一个操作。这样很明显可以看出每个 Action 属于什么逻辑。

这是过度架构了吗?以上是我还不知道的现有模式吗?

提前致谢。

最佳答案

我将从滥用您的 IDE(如果有的话)的“提取方法”功能开始,将每个逻辑分支提取到它自己的方法中。这样您就可以使代码更具可读性。

您可能希望先开始编写单元测试,以确保重构的结果不会破坏或更改代码本身的业务逻辑。一旦您重构为更小的方法并确信代码仍能按最初的预期工作,您就可以查看是否可以创建类并将代码提取到其中。

我不会说创建类来进行查询和有效性检查会过度设计,只要它有意义且可读即可。正如你所说,你可以有一个 List<Action>然后循环调用 run()每个方法,然后检查wasSuccessful()在每个上并根据需要输出信息。

这样,如果您想要更改给定操作的验证或查询,只需更改封装功能的类,而不必更改实际的执行代码。

关于java - 重构箭头反模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10379036/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com