-1

我不知道这是否是正确的地方。但我非常需要回答。

我正在编写锦标赛管理程序。我有一个简单的问题,但对我来说还不是很清楚。

有许多俱乐部(一个城市的一个俱乐部)。俱乐部里有球员。没有没有俱乐部的球员。

我有球员班和俱乐部班。我应该在俱乐部类中保留球员名单还是在他的班级中保留球员俱乐部?哪种方式会更好?

4

4 回答 4

1

这取决于您需要如何使用数据。

  • 如果您需要能够获得Playera 中的所有 s Club,那么您的Club班级应该维护一个Players 列表。
  • 如果您需要能够获取Club特定Player对象所属的对象,则Player该类应维护一个Club变量。
  • 如果您需要两者,则同时使用两者,但请确保在其中一个更改时使它们保持同步。

为了使它们保持同步,您基本上需要每种方法的两个不同版本。第一个版本(“公共”版本)自动处理调用的副作用并同步两种表示。第二个版本是第一个版本所调用的。它不执行任何同步,因为这会导致无限循环。

这看起来类似于以下内容:

  • Club.AddPlayer(播放器播放器,布尔同步 = true)
    1. 添加player到该俱乐部的球员名单。
    2. 如果同步:
      1. 呼叫当前RemovePlayer(player,false)player俱乐部。
      2. 打电话。SetClub(this,false)_player
  • Club.RemovePlayer(播放器播放器,布尔同步 = true)
    1. player从该俱乐部的球员名单中删除。
    2. 如果同步:
      1. 打电话player.SetClub(null,false)
  • Player.SetClub(俱乐部俱乐部,布尔同步 = true)
    1. 将玩家的俱乐部设置为club
    2. 如果同步:
      1. 如果球员俱乐部不在null,请致电RemovePlayer(this,false)
      2. 如果club不是null,请在其上调用 AddPlayer(this,false)`。

这似乎不必要地笨重,所以我希望其他人有更好的主意...... :-)

于 2012-12-04T22:18:29.227 回答
1

由于每个玩家都有一个俱乐部,因此请在 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);
于 2012-12-04T22:19:02.667 回答
1

如果你使用依赖注入,那么答案是,你两者都做。在俱乐部中,您有一个数组结构,其中包含一组玩家对象。在 player 中,您有一个存储 Club 对象的 club 变量。

于 2012-12-04T22:23:59.973 回答
0

您可以根据目的链接两种方式。使用 a 编写 Club 类和使用list<int> PlayerIdsa 编写 Player 类,int ClubId并根据操作使用其中任何一种。

例如,如果您显示俱乐部页面,则更容易使用 Club 类,如果您显示 Player 页面,则更容易使用 Player 类。

于 2012-12-04T22:24:20.910 回答