예제 게임 엔진 서버에서 게임 세계는 World 개체로 나타낼 수 있습니다. 게임은 여러 게임 세계를 가질 수 있으며 세계에있는 플레이어는 그 세계에서 유닛의 위치 데이터 만 수신하면됩니다. 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
과 Player
) 많은 반복 기능이 제공됩니다. 수동으로이 일대 다 관계를 성취하는 더 좋은 방법이 있습니까? 양면 업데이트?
[codereview.se] 어쩌면? – user1306322