我一直在为我的统一项目编写一些代码,在这个项目中,我将玩家连接到一个游戏中,并将它们添加到字典中,该字典位于数据库类中。
我有一个简单的方法,就是将它们添加到数据库中,如果成功的话,它会将相关的游戏对象实例化到游戏中。
让我怀疑这是否是一个糟糕的设计的是我检查球员是否是本地客户的方式。
这是我的密码:
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;
}所以你会注意到,我正在检查球员是否是本地的两次,我觉得我不需要检查我是否更聪明的方式来设置这件事。这是否被认为是糟糕的或多余的编码,或者可能有人可以提出更好的方法?
发布于 2017-08-10 07:27:01
如果您发现自己使用了大量If (type == x) do语句,则可以使用继承。在代码中使用if (type == x)的问题是,如果明天添加了一个新的代理,那么您必须在每个地方添加一个额外的情况。
下面是一个如何改进的示例:
public bool SetConnection(byte connectionID)
{
Agent agent = agentFactory.CreateAgent(Core.Instance.IsLocalPlayer);
return agent.TryToEnterRoom(connectionId);
}发布于 2017-08-10 09:46:59
在你的情况下,没关系。但是我会将Core.Instance存储到局部变量,因为它被多次使用:
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;
}https://codereview.stackexchange.com/questions/172539
复制相似问题