首页
学习
活动
专区
圈层
工具
发布

使用DTO
EN

Stack Overflow用户
提问于 2013-09-06 09:37:50
回答 1查看 359关注 0票数 1

当我在ManagedBean中使用DTO时,我应该封装getter和setter吗?

代码语言:javascript
复制
class UserMBean {
    private UserDTO user;
    public String getName() {
        return user.getName();
    }
    public void setName(String name) {
        user.setName(name);
    }
}

或者直接从JSF访问参数:

代码语言:javascript
复制
<h:outputText value=#{userMBean.user.name} />
EN

回答 1

Stack Overflow用户

发布于 2013-09-06 13:16:20

通常,人们倾向于使用这种封装来隐藏服务的特定实现或模型的结构。它是一种抽象,目的是为了使您的代码更容易修改,而不必在其他地方更改代码。

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18648548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档