在示例遊戲引擎服務器中,遊戲世界可以由世界對象來表示。遊戲可能有多個遊戲世界,而一個處於世界中的玩家只需要接收該世界中單位的位置數據。如何在C#中正確自動更新一對多雙向關係
class World
{
public List<Unit> Units { get; set; }
}
然而一段代碼也需要能夠查找一個單元是容易什麼世界,所以單位對象本身跟蹤世界參考的。
class Unit
{
public World World { get; set; }
}
這適用於查找,但很快改變時數據當程序員不知道對象之間的關係的事情,所以我在World
改變Units
成爲問題的是隻讀的,有下面的代碼在Unit
。
public virtual World World
{
get { return _world; }
set
{
// Unit must always be in a world
Contract.Requires<ArgumentNullException>(value != null);
// If already this, don't do anything
if (value == _world) return;
var oldWorld = _world;
_world = value;
if(oldWorld != null) oldWorld.UpdateUnitEntry(this);
_world.UpdateUnitEntry(this);
}
}
這可行,但感覺就像有更好的方法來做到這一點。特別是當我添加更多需要以相同方式鏈接的東西時(World
也有Structure
s和Player
s),會有很多重複的功能進來。是否有更好的方法來實現這種一對多關係而無需手動更新雙方?
[codereview.se]也許? – user1306322