1

当我在 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} />
4

1 回答 1

0

一般来说,人们倾向于使用这样的封装来隐藏服务的具体实现或者模型的结构。它是一种抽象,目的是使您的代码更容易修改,而无需更改其他地方的代码。

如果您以这种方式“扁平化”您的模型,您实际上只是将模型外观的知识从 facelets 转移到托管 bean。如果现在更改模型,则需要更改 javacode 而不是 xhtml 代码。这种情况下的一个好处是您现在有一个编译时错误而不是运行时错误。另一方面,您引入了重复的代码。由于与服务实现相比,您的模型可能更改的频率可能较低,因此我通常在 xhtml 代码中“深入”访问我的模型,因为它可以节省时间并且更舒适,并使托管 bean 更干净。在您的简单情况下,我会避免使用额外的吸气剂。

通常,这是一个品味和特定用例的问题。如果您通过五个(模型)层“深入”访问模型的属性,并且在十个不同的地方执行此操作,并且您知道模型结构可能很快会发生变化,那么使用实用方法直接在托管 bean 的一个位置使用附加的 getter 访问此属性。

然而,还有另一种情况是需要提供对属性的直接访问。如果您想避免有人访问其他属性。这意味着,您希望保持某些属性不可访问。假设您UserDTO也是一个属性password,并且您不希望任何人能够在您的 xhtml 中访问它以显示或更改它,然后使用您的第二个选项滚动并且没有getUser(),但通过getUserName().

于 2013-09-06T05:16:19.770 回答