Ho creato un set di classi per rappresentare un grafico ciclico diretto per rappresentare i processi BPM, basato sulla classe , che fornisce solo metodi di manipolazione del grafico di base per aggiungere e trovare vertici e spigoli.Interfaccia fluente per costruire un grafico ciclico orientato?
La sfida che sono rivestimento è creare un builder che fornisce un fluent interface grado di creare un grafico che include ramificazione complessa, cicli, e più nodi di estremità (vedi esempi sotto).
rami paralleli
Unione Branches
Cicli
Complex
My implementazione corrente (vedi esempio sotto) è ricorrere alla aliasing vertice in cui si verifica una forcella (per esempio, il vertice "B" in Parallel Branches), e poi fare riferimento all'alias quando si aggiunge un nuovo ramo a quel vertice. Il mio builder include anche qualcosa di simile per consentire la fusione di rami e cicli. Gli alias sono stati introdotti perché i nomi dei vertici non sono univoci nei grafici BPM. Voglio un'interfaccia fluida più elegante per creare rapidamente grafici, liberi da questi riferimenti.
Graph graph = GraphBuilder.newGraph()
.addVertex("A")
.edgeName("")
.addVertex("B", "b-fork")
.edgeName("")
.addVertex("C")
.edgeName("")
.addVertex("E")
.addBranch("b-fork")
.edgeName("")
.addVertex("D")
.edgeName("")
.addVertex("F")
.build();
Avete considerato l'aggiunta di un parser DOT al vostro programma?'GraphBuilder.parse (" A -> B; B -> C; B -> D; ")' sembra più leggibile. –
@Duncan Si prega di leggere l'intero post. Non sto chiedendo l'intero costruttore, voglio solo non avere un alias, perché non sono eleganti. – izilotti
Come si desidera creare un grafico ciclico, ma la catena del metodo ha una struttura ad albero, alcune forme di aliasing sembrano inevitabili. –