我有聚合對象有多個級別。聚合根是網絡對象,它具有節點和鏈接的集合。節點和鏈接有段的集合,段有車道的集合。我的領域是交通網絡而這僅是該集合的一部分:
public class Network
{
private List<Node> nodes;
private List<Link> links;
}
public class Node
{
private Segment segment;
}
public class Link
{
private List<Segment> segments;
}
public class Segment
{
private List<Lane> lanes;
}
public class Lane
{
private List<Cell> cells;
}
public class Cell
{
private bool IsOccupied;
}
首先,可有人告訴我,這是好還是它更好地擊穿該聚合上也許三個層次(網絡,段細胞)在該根的頂部實施存儲庫模式。
我的問題是我想添加到網絡中的附加功能。如果這個網絡將被用於仿真,那麼模擬器需要車輛源和接收器,它們將產生並摧毀網絡邊緣的車輛。我的想法是讓這種功能脫離網絡聚合。這是代碼:
public class Simulation
{
public void Iteration()
{
//do something with vehicles
//foreach sink in sinkRepository call o.Update()
}
}
public class SinkRepository
{
private List<Sink> sinks;
//Singleton pattern
//+ CRUD operations and GetEnumerator()
}
public class Sink
{
private int nodeId;
private List<int> laneIds;
public void Update()
{
//need reference to Network object
//foreach laneId
////network.GetLane(id)
////find is cell in lane occupied
////if it is then network.SetCellStatus(false);
}
}
這樣做的好方法嗎?並且你有什麼建議:) 另外我有一些從XML創建網絡的持久性代碼,它也可以從XML創建接收器,但問題是如何應對網絡對象的傳遞引用以接收對象,因爲接收器對象需要引用網絡,因爲它需要根據laneId獲取通道。
我在考慮添加網絡存儲庫和存儲庫將是單身,所以下沉會看到它保持參考網絡拋出整個一生。
好吧,但是不會違背集合模式來保存對Sink中Lane對象的引用嗎? – Vedran 2010-04-21 15:34:44
好吧,它可能是。但真正的問題是這個解決方案對你有沒有效。模式是模式不是法律:) – derdo 2010-04-21 16:11:26