Orm 在实体中有一个非持久变量可以吗?

Orm 在实体中有一个非持久变量可以吗?,orm,persistence,entity,object-persistence,object-relational-model,Orm,Persistence,Entity,Object Persistence,Object Relational Model,当使用ORM时,让一个模型类具有一些只用于计算的非持久性属性,然后可以安全地删除这些属性是否违反了某种良好的实践 假设我们有一个产品。此产品有一系列可能的选项。期权可能会对产品产生价格影响。我们还有一套规则,即当选择一个选项时,另一个选项的价格会发生变化 当我们向订单中添加产品以及选择的选项时,我们首先需要根据影响每个选择选项的规则重新计算所有选项的价格。然后,我们可以计算产品及其所有选定选项的最终价格 在本例中,该选项可能具有calculatedPrice属性,该属性仅在所选选项的上下文中具有

当使用ORM时,让一个模型类具有一些只用于计算的非持久性属性,然后可以安全地删除这些属性是否违反了某种良好的实践

假设我们有一个产品。此产品有一系列可能的选项。期权可能会对产品产生价格影响。我们还有一套规则,即当选择一个选项时,另一个选项的价格会发生变化

当我们向订单中添加产品以及选择的选项时,我们首先需要根据影响每个选择选项的规则重新计算所有选项的价格。然后,我们可以计算产品及其所有选定选项的最终价格

在本例中,该选项可能具有calculatedPrice属性,该属性仅在所选选项的上下文中具有意义,并且可以在将产品添加到订单后安全地删除


有没有更正确的方法来思考这个问题,或者这样可以吗?

是的,拥有
@Transient
属性是完全可以的


有些人可能认为它是错误的,并坚持要有一个与实体几乎相同的单独的类,但有附加字段,但这是不必要的代码复制。您的方法就是我要做的。

另一种方法,在我使用的大型可怕的电子商务系统中使用,是具有包含计算信息的瞬态对象的并行结构。因此,与订单平行的是订单价格。对于订单中的每个项目,都有一个ItemPrice。如果一个项目有一组选项,那么ItemPrice将有一组OptionPrices。订单的ShippingOption也有一个ShippingPrice,以此类推。然后,定价由另一个并行的价格计算器结构来处理——您向OrderPriceCalculator下订单,然后它返回OrderPrice。这样,它会将每个项目发送到ItemPriceCalculator,ItemPriceCalculator会将每个选项发送到OptionPriceCalculator,依此类推

价格对象可以引用订单对象,但反之亦然。我们的系统实际上坚持价格,但与订单分开

这样做的好处是,它将描述订单内容、描述订单价格和计算订单价格的关注点分离开来

缺点是你有大量的类,而你所需要的信息不可避免地永远不会在你手中的对象中


缺点可能大于优点。

我很高兴有这样一个名字!谢谢。谢谢你的详细回答!