在Play Framework 1.x中,惯例是在Java类上使用公共字段。这样做的理由是Play Properties Enhancers的工作原理如下所述:http://www.playframework.org/documentation/1.2.4/model
简而言之,公共字段是“正常的”,因为Play会在运行时自动生成setter和getter。这对我来说很有意义,还有其他问题可以解决这个问题。
Play Framework 2.0的工作方式非常不同。没有“属性模拟”功能。也许他们正在考虑稍后添加,但我找不到任何建议。如果没有属性模拟,使用所有公共字段的原始理由就会消失。 Play Framework 2.0示例仍然使用公共字段: http://www.playframework.org/documentation/2.0/JavaEbean
为什么仍然建议将公共字段用于playframework 2.0?这只是开发人员在旧版游戏中创建样本的习惯,还是在Play 2.0中仍然推荐使用公共字段的其他原因?
答案 0 :(得分:4)
查看文档:{{3}},Play将为我们生成缺少的访问者。
然而,他们是这种技术的警告,最多的是ebean工具将无法生成get / setter ...因此可能会发生问题(事务,......)
以下是相关引用:
Play已设计为自动生成getter / setter,以确保与期望它们在运行时可用的库(ORM,Databinder,JSON Binder等)兼容。如果Play在模型中检测到任何用户编写的getter / setter,它将不会生成getter / setter以避免任何冲突。
注意事项:
(1)因为编译后发生了Ebean类增强,所以不要指望Ebean生成的getter / setter在编译时可用。如果您希望直接使用它们进行编码,请自行添加getter / setter,或者确保在项目的其余部分之前编译模型类,例如。将它们放在一个单独的子项目中。
(2)直接Ebean字段访问(启用延迟加载)的增强仅适用于Java类,而不适用于Scala。因此,来自Scala源文件(包括标准Play 2模板)的直接字段访问不会调用延迟加载,通常会导致空(未填充)实体字段。要确保填充字段,可以(a)手动创建getter / setter并改为调用它们,或者(b)确保在访问字段之前完全填充实体。
HTH
答案 1 :(得分:0)
我想这是因为拥有公共getter和setter的私有字段只会产生线路噪音,并且不会添加任何实际值。在Scala中,getter和setter也不可见,它们也是自动生成的。例:
class Person(var name: String)
val a = new Person("John Smith")
a.name = "Henry Smith"
Play的灵感来自Rails,Ruby也有自动生成getter和setter的语法:
class Person
attr_accessor :name
end
person = Person.new
person.name = "John Henry"