OOP:何时检查[关闭]

问题描述 投票:-1回答:4

想象一下社交媒体应用程序,用户可以加入某些组以与其成员进行交互。所以在我的业务逻辑中,我有一个创建这样一个新组的函数:

public void createGroup(String groupname)
{
    //check if group with the specified name already exists
    if (!groupnameAlreadyExists(groupname))
    {
        //...code creating a new group with the specified name
    }
}

当您仔细查看代码时,您会看到在创建新组之前,我会检查是否已存在具有指定名称的组。

我的问题:在代码的地方我调用上面的函数,我也检查一个具有指定名称的组是否已经存在,并根据我决定下一步做什么:

public void doStuff(String groupname)
{
    if (groupnameAlreadyExists(groupname))
    {
        joinGroup(groupname);
    }
    else
    {
        createGroup(groupname)
    }
}

所以事实上我仔细检查,如果该组已经存在或不存在。这个szenario的编程风格是什么?有没有办法确保错误安全,但没有仔细检查?

c# design-patterns software-design
4个回答
1
投票

由于createGroup是一个公共方法,我会在那里检查,因为没有任何东西阻止从其他地方调用该方法而不通过“doStuff”进行“重复”检查。

如果createGroup是私有的,并且您检查了调用createGroup的所有方法,并且检查的时间/资源成本很高......那么我可能会从createGroup中删除该检查。


1
投票

创建一个方法并将其名称设置为JoinOrCreateGroupIfNotExist

  public JoinOrCreateGroupIfNotExist(string groupName){
       if (groupnameAlreadyExists(groupname)) { 
            joinGroup(groupname);
        }
        else {
           createGroup(groupname);
        }
  }

此方法确保您将创建一个组(如果不存在)。同时检查组是否存在或不进行一次。


0
投票

如果你想要的是安全的错误,那么我不会因为有人想加入它而创建一个不存在的组。原因如下:

朋友:你应该加入“GroupFullOfReallyCoolPeople”。

我:加入“GroupFulllOfReelyCoolPeople”

App:恭喜,您加入了“GroupFulllOfReelyCoolPeople!”

我:为什么我是这里唯一的一个?

如果用户尝试加入不存在的组,则该例外是异常或至少是意外情况。据推测,用户正在搜索要加入的群组,然后当他们想要加入群组时,他们正在选择群组,而不是手动输入其名称。因此,加入不存在的组的请求将是意外的。如果发生这种情况,那么最好返回一条消息,说明该组不存在,并且可能会询问用户是否要创建它。


-1
投票

在这种情况下,我实际上会使用HashSet,因为如果它已经丢失,你已经创建了它,如果不是只使用现有的那个。这将保证您始终只有一个组名,并且您可以跳过第二个检查,例如总是在HashSet中创建一个组(如果它已经存在,没有任何反应),然后总是加入它。

沿着:

public void doStuff(String groupname)
{
    groups.add(groupname) // groups would be a HashSet<string>
    joinGroup(groupname)
}

检查越多,您就可以安全地消除代码所具有的分支越少,并且更容易维护。

© www.soinside.com 2019 - 2024. All rights reserved.