Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation 有向图边限制模式_Validation_Design Patterns_Graph_Mxgraph - Fatal编程技术网

Validation 有向图边限制模式

Validation 有向图边限制模式,validation,design-patterns,graph,mxgraph,Validation,Design Patterns,Graph,Mxgraph,我有一个有向图(在JS/TS中,但这是一个一般编程模式问题),其中每个顶点都是形状的子类,子类是不同的形状,例如循环、矩形等。我正在寻找以下问题的设计模式: 问题:每个顶点都有自己的规则,可以连接到什么或从什么连接到什么,这有时并不简单 有些规则更容易从目标顶点类检查(例如,循环必须没有传入边),有些规则更容易从源顶点类检查(圆可以没有传出边) 有些规则是双向的,例如矩形可以连接到圆、三角形或从中连接。我可以从源顶点焦点(在矩形类方法validateEdge中,确保目标不是其中任何一个)或目标顶

我有一个有向图(在JS/TS中,但这是一个一般编程模式问题),其中每个顶点都是形状的子类,子类是不同的形状,例如循环、矩形等。我正在寻找以下问题的设计模式:

问题:每个顶点都有自己的规则,可以连接到什么或从什么连接到什么,这有时并不简单

  • 有些规则更容易从目标顶点类检查(例如,循环必须没有传入边),有些规则更容易从源顶点类检查(圆可以没有传出边)

  • 有些规则是双向的,例如矩形可以连接到圆、三角形或从中连接。我可以从源顶点焦点(在矩形类方法validateEdge中,确保目标不是其中任何一个)或目标顶点焦点(在类circle和triangle中,在validateEdge方法中,确保源不是圆)检查此规则。我不应该多次检查同一条规则

  • 一些规则考虑了其中一个顶点的属性,例如,圆只能连接到红色的矩形等。因此,我不能只拥有捕获规则的键值对的映射,并在映射上运行验证以检查是否有适用的键值对

  • 目前我已经把它作为天真的方式实现了;给定一条边,通过限制源和目标的类型来检查所有规则,这显然是丑陋和无法维护的

    我提出的解决方案 我想到的最好的办法是为每个形状都有一个方法isConnectableTo(target)。这将限制验证源顶点焦点的边,从而避免多次检查同一规则的问题,一次检查目标顶点焦点,一次检查源顶点焦点。 问题是它没有完全捕获第一个需求,而且在检查应用哪些规则之前,我仍然需要对目标类型设置条件

    还有其他解决办法吗


    谢谢

    你有没有想出更好的解决方案?我现在面临着同样的问题problem@LucaW不,不是真的。目前,我只是有一个文件,它获取边并根据两个顶点的类型有条件地验证它们,这是不好的。如果你有什么想法就告诉我你有没有想出更好的解决办法?我现在面临着同样的问题problem@LucaW不,不是真的。目前,我只是有一个文件,它获取边并根据两个顶点的类型有条件地验证它们,这是不好的。如果你有什么想法,请告诉我