我不知道这是不是正确的地方。但我非常需要回答。
我正在为锦标赛管理编写程序。我有一个简单的问题但对我而言并不是那么清楚。
有很多俱乐部(一个城市的一个俱乐部)。俱乐部里有球员。没有没有俱乐部的球员。
我有Player级和Club级。 我应该保留俱乐部课程中的球员名单还是让球员俱乐部继续上课? 哪种方式会更好?
答案 0 :(得分:1)
这取决于您需要如何使用数据。
Player
中的所有Club
,那么您的Club
课程应保留Player
的列表。Club
所属的Player
,那么Player
类应该保留Club
变量。为了使它们保持同步,您基本上需要每个方法的两个不同版本。第一个版本(“公共”版本)自动处理呼叫的副作用并同步两个表示。第二个版本是第一个版本调用获取的版本。它不会执行任何同步,因为这会导致无限循环。
类似于以下内容:
player
添加到此俱乐部的播放器列表中。RemovePlayer(player,false)
现有分会的player
。SetClub(this,false)
上致电player
。player
。player.SetClub(null,false)
。club
。null
,请拨打RemovePlayer(this,false)
。club
不是null
,请在其上调用AddPlayer(this,false)`。这似乎不必要地笨重,所以我希望别人有更好的主意......: - )
答案 1 :(得分:1)
由于每位玩家都有俱乐部,因此请保留俱乐部课程中的玩家列表。这使得枚举或搜索给定俱乐部中的所有玩家变得快速而简单。但是,没有理由你不能在Player类中引用指向其父级Club的引用。有两个方向都有链接的有效用例,两者都有。
我假设每个玩家只能属于一个俱乐部。如果不是这样的话,情况会变得复杂一些。
C#中的一个例子:(未编译/测试,因此可能有一些小错误)
public class Club
{
// other class members
// this is private so that code must use Club's methods to get at the Players
private List<Player> _players;
public int PlayerCount
{
get
{
return _players == null ? 0 : _players.Count;
}
}
public void AddPlayer(Player p)
{
// null checking etc
// here you could enforce a rule that p.ParentClub must be null
// to prevent a Player from being in multiple Clubs
p.ParentClub = this;
_players.Add(p);
}
public void RemovePlayer(Player p)
{
// null checking etc
_players.Remove(p);
p.ParentClub = null;
}
}
public class Player
{
// other class members
public Club ParentClub
{ get; set; }
}
现在,您可以这样做:
// add Player Joe to the London Club if it is not full (10 members max)
// otherwise add Joe to the Munich Club
if(londonClub.PlayerCount <= 10)
{
londonClub.AddPlayer(joePlayer);
}
else
{
munichClub.AddPlayer(joePlayer);
}
// print how many players are in the club that Joe is in
Console.WriteLine("Number of Players in Joe's Club: " + joePlayer.ParentClub.PlayerCount.ToString());
// move Joe to the Amsterdam club. Note that it does not matter what Club Joe was already in
joePlayer.ParentClub.RemovePlayer(joePlayer);
amsterdamClub.AddPlayer(joePlayer);
答案 2 :(得分:1)
如果您使用依赖注入,那么答案是,您同时执行这两项操作。在俱乐部中,您有一个阵列结构,其中包含一系列玩家关注点。在玩家中,你有一个存储俱乐部对象的俱乐部变量。
答案 3 :(得分:0)
您可以根据目的双向链接。使用list<int> PlayerIds
和具有int ClubId
的播放器类对俱乐部类进行编码,并根据操作使用。
例如,如果您显示俱乐部页面更容易使用俱乐部课程,如果您显示播放器页面更容易使用播放器课程。