我想用Grails应用程序跟踪电动机。在某些情况下,电动机的位置会发生变化,但是位置类型也会发生变化。如何有效地存储当前位置?
第一次尝试是:
class Motor {
String motornumber
Locationtype lt
}
class Locationtype {
String type
}
class Machine {
String machinenumber
}
class Repaircompany {
String companyname
}
取决于Locationtype lt
之一的{"Machine","Repair"}
,电动机对象应存储电动机所在的机器ID或维修公司ID。 “机器”是指:电动机已部署在机器上,“修理”是指:电动机正在维修中。
因此,我想将location
字段作为Motor
内的字段,但是哪种类型?我知道,每次访问location
时,我都必须评估lt
。
我在考虑特质中的一个领域。我会偏离轨道吗?还是那条路要走?
答案 0 :(得分:1)
这里有很多可能的解决方案,根据所提供的有限信息,没有一种方案比另一种更好。两种可能的解决方案:
最简单:向Machine
对象添加可为空的Repaircompany
字段和可为空的Motor
字段。然后可以填充其中一个(或从技术上来说都可以填充),然后您可以根据需要从这些值进行操作。
可能更好:创建一个Location
基类(可以是抽象类),并从中扩展Machine
和Repaircompany
。在Motor
中,创建一个类型为Location
的字段,然后可以使用任一子类填充该字段。
对于这两种解决方案,您可能都不再需要Locationtype
。您可以确定是通过填充哪个字段(对于解决方案1)还是通过子类(对于解决方案2)来填充。