gpt4 book ai didi

oop - 膨胀的 bool 返回函数

转载 作者:行者123 更新时间:2023-12-04 20:44:08 25 4
gpt4 key购买 nike

虽然我不确定我是否为它选择了正确的名称,但任何参与过具有许多功能的大型项目的人都可能已经看到它:一些 bool 返回函数会随着每个小功能的交互而变得臃肿。最终,曾经简单的一两个变量检查​​变成:

public boolean showFavoritesTool(UserData userData){
if(currentPage.isPremiumPage())
{
return true;
}

if(!userData.isLoggedIn())
{
return false;
}

if(userData.isMember())
{
return userData.getPreferences().isFavoritesTurnedOn();
}

if(getUrlParams()["showFavorites"])
{
return getUrlParams()["showFavorites"]
}

return false;
}

编辑:让我澄清一下,这只是此类功能的早期示例。在某个时候,它会随着新功能的发展而增长到至少两倍的规模。我正在查看的提示这个问题的函数至少有 15 个变量,其中一些是嵌套的。这段代码可能看起来很简单,但随着新变量的添加,它不会保持不变。

每次添加新功能时,都会在 flag 函数中添加另一个条目。它们通常不会重叠,但当它们重叠时,您可以确定没有人想过应该发生什么。这些函数很快就会变得难以解释。

有没有更清洁的解决方案?此外,如果该更清洁的解决方案涉及更多架构,那么何时会实现它?一旦添加了第二个变量?还是有一些突破点?

最佳答案

您的问题相当笼统,很难理解其范围,但是我会尝试提供一些见解,希望能回答它。

Everytime a new feature is added, another entry is thrown into the flag function. They don't usually overlap, but when they do you can be sure that no one has thought about what should happen



这是糟糕的规划和设计的一个令人讨厌的副作用。 Code should be closed for modification, but open to extension

设计时要考虑到 future ,正如 Yuval Itzchakov 之前提到的,一个包含抽象 showFavouritesTool() 的界面每个用户类根据每个类的要求重写的方法将提供更大的灵 active ,并遵守开放/封闭原则。不幸的是,由于提供的信息有限,很难创建一个适合您问题的示例。

顺便说一句,有时需要检查多个 bool 表达式。为什么不使用一个简洁的语句来简化方法。

例如:
public boolean showFavoritesTool(UserData userData){
return currentPage.isPremiumPage()
|| userData.isLoggedIn() && userData.isMember() && userData.getPreferences().isFavoritesTurnedOn()
|| userData.isLoggedIn() && getUrlParams()["showFavorites"];
}

关于oop - 膨胀的 bool 返回函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22917541/

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