当我在ManagedBean中使用DTO时,我应该封装getter和setter吗?
class UserMBean {
private UserDTO user;
public String getName() {
return user.getName();
}
public void setName(String name) {
user.setName(name);
}
}或者直接从JSF访问参数:
<h:outputText value=#{userMBean.user.name} />发布于 2013-09-06 13:16:20
通常,人们倾向于使用这种封装来隐藏服务的特定实现或模型的结构。它是一种抽象,目的是为了使您的代码更容易修改,而不必在其他地方更改代码。
如果以这种方式“扁平化”模型,实际上只是将模型外观的知识从facelets转移到托管bean。如果现在更改模型,则需要更改javacode而不是xhtml代码。在这种情况下的一个好处是,您现在有一个编译时错误,而不是运行时。另一方面,你引入了一些重复的代码。由于与服务实现相比,您的模型可能较少更改,因此我通常在xhtml代码中“深入”访问我的模型,因为它节省了时间,而且更舒适,并且使托管bean更干净。在您的简单情况下,我会避免额外的getter。
这通常是一个品味和用例特定的问题。如果您通过五个(模型)层“深入”访问模型的属性,并且您在十个不同的位置执行此操作,并且您知道您的模型结构可能很快就会发生变化,那么让一个实用程序方法通过托管bean中的一个位置中的附加getter直接访问此属性将变得更有意义。
然而,还有一种情况需要提供对属性的直接访问。如果您想要避免有人访问其他属性。这意味着,您希望将某些属性保持为不可访问。假设您的UserDTO也是一个属性password,您不希望任何人能够在您的xhtml中访问它来显示或更改它,然后使用您的第二个选项,并且没有getUser(),但通过getUserName()提供对用户名的直接访问。
https://stackoverflow.com/questions/18648548
复制相似问题