首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在我的方法中检查两次Core.Instance.isLocalPlayer是否构成一个糟糕的设计?

在我的方法中检查两次Core.Instance.isLocalPlayer是否构成一个糟糕的设计?
EN

Code Review用户
提问于 2017-08-10 06:23:45
回答 2查看 82关注 0票数 1

我一直在为我的统一项目编写一些代码,在这个项目中,我将玩家连接到一个游戏中,并将它们添加到字典中,该字典位于数据库类中。

我有一个简单的方法,就是将它们添加到数据库中,如果成功的话,它会将相关的游戏对象实例化到游戏中。

让我怀疑这是否是一个糟糕的设计的是我检查球员是否是本地客户的方式。

这是我的密码:

代码语言:javascript
复制
public bool SetConnection(byte connectionID)
{
    Agent agent;
    if (Core.Instance.isLocalPlayer)
        agent = new Agent_Local();
    else
        agent = new Agent_Enemy();

    if (Core.Instance.Database.Add(connectionID, agent)) // fails if room is full
    {
        if (Core.Instance.isLocalPlayer) //Checking this again : maybe bad design?
            Core.Instance.LocalHandler.SetPlayer(agent);
        else
            Core.Instance.SetEnemy(agent);

        return true;
    }
    return false;
}

所以你会注意到,我正在检查球员是否是本地的两次,我觉得我不需要检查我是否更聪明的方式来设置这件事。这是否被认为是糟糕的或多余的编码,或者可能有人可以提出更好的方法?

EN

回答 2

Code Review用户

回答已采纳

发布于 2017-08-10 07:27:01

如果您发现自己使用了大量If (type == x) do语句,则可以使用继承。在代码中使用if (type == x)的问题是,如果明天添加了一个新的代理,那么您必须在每个地方添加一个额外的情况。

下面是一个如何改进的示例:

代码语言:javascript
复制
public bool SetConnection(byte connectionID)
{
    Agent agent = agentFactory.CreateAgent(Core.Instance.IsLocalPlayer);
    return agent.TryToEnterRoom(connectionId);
}
票数 3
EN

Code Review用户

发布于 2017-08-10 09:46:59

在你的情况下,没关系。但是我会将Core.Instance存储到局部变量,因为它被多次使用:

代码语言:javascript
复制
public bool SetConnection(byte connectionID)
{
    var core = Core.Instance;

    Agent agent = core.isLocalPlayer
        ? new Agent_Local()
        : new Agent_Enemy();

    if (!core.Database.Add(connectionID, agent))
        return false; // yes, I'm fan of early returns :)

    if (core.isLocalPlayer)
        core.LocalHandler.SetPlayer(agent);
    else
        core.SetEnemy(agent);

    return true;
}
票数 0
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/172539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档