我正在努力为在线游戏找到一个好的设计模式(用于教育项目,而不是商业用途)。
让我们说我有一个玩家表,以及我的数据库中的地图表。 因此实体框架自动生成了这些Model类:
public partial class Map
{
public Map()
{
this.Players = new HashSet<Player>();
}
public int MapID { get; set; }
public string Name { get; set; }
public virtual ICollection<Player> Players { get; set; }
}
public partial class Character
{
public int CharacterID { get; set; }
public string Name { get; set; }
public int MapID { get; set; }
public virtual Map Map { get; set; }
}
现在我需要一个“控制器”播放器和地图类,它们将保存状态信息(如地图上的位置):
public class MapController
{
private Map _map;
}
public class PlayerContoller
{
private Player _player;
private int _locationX;
private int _locationY;
}
现在我想向PlayerController添加一个MapController属性(它将返回播放器所在地图的MapController)。
我可以使用this._player.Map
获取Map对象,但现在要找到MapContoller,我必须实现自己的MapControllers列表并搜索该列表。类似的东西:
public class PlayerContoller
{
private Player _player;
private int _locationX;
private int _locationY;
public MapController MapController
{
get { globalListOfMapControllers.Search(this._player.Map); }
}
}
哪种丑陋。我希望有一个更好的方法来找到它,这已经为我实现了。 (就像Player.Map一样)
此外,它是一个冗余搜索,因为Player.Map
已使用Player.MapID
搜索地图对象。
有人能想到像这样的系统更好的设计吗?
谢谢你, Bugale。