2020/09/07

在命名规则中设置一个系统的允许等级的开发注意事项

作者 Leon

管理员在定义某个系统或管线号时想让设计人员只看到特定的某几个等级。这个是很常见的需求,大多数情况下,管理员会手动到System and Specification的Task下设置功能分区的Allowable Specification,这个设置工作挺繁琐的。

现在我们将这个设置的操作集成到System的命名规则中,用户在创建Piping System的时候即可根据系统名字加载特定等级,实现无感的自动化。

关于Allowable Spec,代码里只有如下几个固定的方法:Add,Remove,Replace,Reset,所以我们接下来要实现目的就围绕这几个方法。

默认不做任何设置的情况下,System会继承父级的等级集合,也就是ResetToParentSpecs。这里我们假设针对Piping System去做等级筛选,那么我们只需要判断在Piping System的时候处理加载等级的逻辑即可,它下面的子系统都会自动继承。

当然Piping System创建时在代码里我们可以先使用ResetToParentSpecs获取到父级等级集合,然后根据配置文件进行筛选,配置文件可以放在SharedContent,里面规定每种哪种系统下面该放哪些等级。继承父级以后就是全部的等级,这里筛选的过程就是Remove,碰到一个不符合的就Remove一个,最后剩下的就是符合要求的。

还有一种方式先ResetToParentSpecs,然后用Replace方法,用一个只有一个默认等级的集合去代替(因为任何一个系统都至少要有一个等级,不允许为空),这样系统就只剩下了一个等级,然后再和将父级集合和配置文件配对筛选,碰到符合的就添加进去。最终系统里会多一个默认等级,当然你也可以把它Remove掉。

以上两种方法其实都可以,都是拿全部的等级集合和配置文件中的允许等级集合做对比,一个是遍历对比做减法,一个是遍历对比做加法。速度上几乎没区别。但不排除什么意外情况发生,比如我在一个非常复杂的客户环境里测试发现,.net的这个Remove方法奇慢无比,无奈我只能选择Replace+Add这种方式。

0 0 投票数
文章评分