grails:一个字段,多个类

grails:一个字段,多个类,grails,Grails,我想用Grails应用程序跟踪一个马达。有时,电机的位置会发生变化,但位置类型也会发生变化。如何有效地存储当前位置 第一次尝试是: class Motor { String motornumber Locationtype lt } class Locationtype { String type } class Machine { String machinenumber } class Repaircompany { String company

我想用Grails应用程序跟踪一个马达。有时,电机的位置会发生变化,但位置类型也会发生变化。如何有效地存储当前位置

第一次尝试是:

class Motor {
    String motornumber
    Locationtype lt
}

class Locationtype {
    String type
}

class Machine {
    String machinenumber
}

class Repaircompany {
    String companyname
}
根据
Locationtype lt
(属于
{“机器”、“维修”}
之一),电机对象应存储电机所在的机器id或维修公司id。“机器”是指:电机部署在机器上,“维修”是指:电机当前正在维修

所以我想要一个
位置
字段作为
电机
中的字段,但是是哪种类型?我知道,每次访问
位置
,我都必须评估
lt


我在想一个特征里面的一个领域。我会偏离正轨吗?还是这样

这里有许多可能的解决方案,根据提供的有限信息,没有一个比另一个更好。两种可能的解决办法:

最简单:将可为空的
机器
字段和可为空的
修理公司
字段添加到
电机
对象。然后可以填充其中一个(或者从技术上两者都可以),您可以根据需要使用这些值

可能更好:创建一个
Location
基类(可以是抽象的),并从中扩展
Machine
Repaircompany
。在
Motor
中,创建一个类型为
Location
的字段,然后可以用任一子类填充该字段


对于这两种解决方案,您可能不再需要
Locationtype
。您可以确定通过哪个字段填充(对于解决方案1)或通过子类填充(对于解决方案2)。

谢谢,@Daniel,谢谢您的回答。纯粹主义者的路线是创建抽象类,但我认为使用可空字段的解决方案将是我将尝试的,因为这在UI方面更容易处理:在视图中,借助一些JavaScript/jQuery,我可以轻松地选择要显示的下拉列表,根据显示字段的下拉列表的状态
Locationtype lt
。实现后,
lt==“Machine”
意味着:Machine下拉列表字段可见,Repaircompany下拉列表不可见,等等。。。好的,现在我有了清晰的视野,再次感谢!仅仅是另一个反馈——因为愿景是如此清晰,我毫不费力地写下概念,然后实施解决方案。我甚至发现了“可调零场解决方案”的另一个优势,即当机器和维修公司的场均为空时,将电动机解释为垃圾。我正在考虑删除
Locationtype lt
,因为它有点多余,因为字段之间的null模式就是信息本身:两个字段都已填充:无效,一个字段已填充:有效,两个字段均为null:valid&垃圾。这周过得很好,再次感谢你。