【发布时间】:2010-04-20 10:57:18
【问题描述】:
嘿!
我有多个级别的聚合对象。聚合根是网络对象,它具有节点和链接的集合。 Node 和 Link 有 Segment 的集合,Segment 有 Lane 的集合。我的域是交通网络,这只是这个聚合的一部分:
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 创建接收器,但问题是如何优雅地将网络对象的引用传递给接收器 对象,因为 sink 对象需要引用网络,因为它需要根据 laneId 获取车道。
我正在考虑添加网络存储库,并且存储库将是单例的,因此接收器会看到它,而不会在整个生命周期中保持网络抛出的引用。
【问题讨论】:
标签: oop object repository domain-driven-design aggregate