我不知道这是否是正确的地方。但我非常需要回答。
我正在编写锦标赛管理程序。我有一个简单的问题,但对我来说还不是很清楚。
有许多俱乐部(一个城市的一个俱乐部)。俱乐部里有球员。没有没有俱乐部的球员。
我有球员班和俱乐部班。我应该在俱乐部类中保留球员名单还是在他的班级中保留球员俱乐部?哪种方式会更好?
这取决于您需要如何使用数据。
Player
a 中的所有 s Club
,那么您的Club
班级应该维护一个Player
s 列表。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)`。这似乎不必要地笨重,所以我希望其他人有更好的主意...... :-)
由于每个玩家都有一个俱乐部,因此请在 Club 类中保留一份玩家列表。这使得枚举或搜索给定俱乐部中的所有球员变得快速而简单。但是,没有理由不能在 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);
如果你使用依赖注入,那么答案是,你两者都做。在俱乐部中,您有一个数组结构,其中包含一组玩家对象。在 player 中,您有一个存储 Club 对象的 club 变量。
您可以根据目的链接两种方式。使用 a 编写 Club 类和使用list<int> PlayerIds
a 编写 Player 类,int ClubId
并根据操作使用其中任何一种。
例如,如果您显示俱乐部页面,则更容易使用 Club 类,如果您显示 Player 页面,则更容易使用 Player 类。