Хе!
У меня есть агрегатный объект, имеющий более одного уровня. Совокупный корень - это сетевой объект, в котором есть коллекция узлов и ссылок. Node и Link имеют коллекцию сегментов, а Segment - коллекцию дорожек. Мой домен - сеть трафика, и это только часть этого агрегата:
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.
Я думал о добавлении хранилища в сеть, и хранилище будет одноэлементным, поэтому приемник будет видеть его без сохранения ссылки на бросок сети в течение всего времени жизни.