我有聚合对象有多个级别。聚合根是网络对象,它具有节点和链接的集合。节点和链接有段的集合,段有车道的集合。我的领域是交通网络而这仅是该集合的一部分:
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