这个问题有点相关Hibernate注解放置问题 https://stackoverflow.com/questions/305880/hibernate-annotation-placement-question.
但我想知道哪个是better?通过属性访问还是通过字段访问?
各自的优点和缺点是什么?
两者都有争议,但大多数源于某些用户需求“如果需要添加逻辑怎么办”或“xxxx 破坏封装”。然而,没有人真正评论这个理论,并给出合理的论证。
Hibernate/JPA 在持久化对象时实际上在做什么 - 嗯,它是持久化对象的状态。这意味着以易于复制的方式存储它。
什么是封装?封装意味着使用应用程序/客户端可以用来安全访问数据的接口封装数据(或状态) - 保持数据一致和有效。
可以将其想象为 MS Word。 MS Word 在内存中维护文档的模型 - 文档状态。它提供了一个用户可以用来修改文档的界面 - 一组按钮、工具、键盘命令等。但是,当您保存(保存)该文档时,它会保存内部状态,而不是一组按键和鼠标用于生成它的点击次数。
保存对象的内部状态不会破坏封装 - 否则,您不会真正理解封装的含义以及它存在的原因。这就像对象序列化一样。
因此,在大多数情况下,保留字段而不是访问权限是合适的。这意味着可以按照数据库的存储方式准确地重新创建对象。它不需要任何验证,因为这是在创建原始数据时以及将其存储在数据库之前完成的(除非上帝禁止,您在数据库中存储无效数据!!!)。同样,应该不需要计算值,因为它们在存储对象之前就已经计算好了。该对象的外观应该与保存之前的样子一样。事实上,通过在 getter/setter 中添加额外的东西,你实际上是增加您重新创建的内容与原始内容不完全相同的风险。
当然,添加此功能是有原因的。可能存在一些用于持久化访问器的有效用例,但是,它们通常很少见。例如,您可能希望避免保留计算值。但是,您可能想问为什么不在值的 getter 中按需计算它,或者在 getter 中延迟初始化它。就我个人而言,我想不出任何好的用例,并且这里的答案都没有真正给出“软件工程”的答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)