我正在尝试使用Scala-Graph编写一个小应用程序。这是一个漂亮的包,但在为应用程序的实体建模时,我面临一个问题。
让我们说我们正在为组织中的员工建模。 Employee
仅属于一个Department
,但可以属于两个或更多个SocialClub
。如果我们将Organisation
视为图表,那么
var organisation = Graph[Employee,GroupsInOffice]()
// .....
val e1 = Employee (1, "Nirmalya")
val d1 = Department("Finance")
val d2 = Department("Sales"
val club1 = Club("Beer Drinkers")
val club2 = Club("Horse Riders")
// ....
因此,应允许以下内容:
organisation = organisation(e1 ~> club1,e1 ~> club2)
但是,以下应该不:
organisation = organisation(e1 ~> d1,e1 ~> d2)
我的问题是,为确保预防而采用的模式是什么。它应该是在图表本身(组织)上定义的约束,还是应该是应用程序级别检查,它计算在设置关系时使用e1
的次数( ~
)?在这种情况下,是否还有其他特殊方法?
答案 0 :(得分:0)
经过一些(重新)搜索后,我发现library本身已经在图上定义了用户定义的(应用程序驱动的)约束。包
scalax.collection.constrained.constraints
提供了一些预定义和有用的约束。有趣的是,通过遵循一组特定的步骤并提供回调函数体,可以编写自己的约束。可以在此处获得更多信息:http://www.scala-graph.org/guides/constrained.html#Implementing。我还没有完成使用这种约束的工作,但希望我很快就会这样做。