【发布时间】:2010-04-01 14:14:23
【问题描述】:
在我们的应用程序中,我见过这样写的代码:
User.java(用户实体)
public class User
{
protected String firstName;
protected String lastName;
...
getters/setters (regular POJO)
}
UserSearchCommand
{
protected List<User> users;
protected int currentPage;
protected int sortColumnIndex;
protected SortOder sortOrder;
// the current user we're editing, if at all
protected User user;
public String getFirstName()
{return(user.getFirstName());}
public String getLastName()
{return(user.getLastName());}
}
现在,根据我的经验,这种模式或反模式对我来说看起来很糟糕。一方面,我们将几个问题混合在一起。虽然它们都是与用户相关的,但它偏离了典型的 POJO 设计。如果我们要走这条路,那我们不应该这样做吗?
UserSearchCommand
{
protected List<User> users;
protected int currentPage;
protected int sortColumnIndex;
protected SortOder sortOrder;
// the current user we're editing, if at all
protected User user;
public User getUser()
{return(user);}
}
只需返回用户对象,然后我们就可以随意调用它的任何方法了吗?
由于这与典型的 bean 开发 JSR 303 完全不同,因此 bean 验证不适用于此模型,我们必须为每个 bean 编写验证器。
其他人认为这种设计模式有什么问题吗,还是我只是作为开发人员很挑剔?
沃尔特
【问题讨论】:
-
也许你有一个更根本的问题:你为什么要在 search 对象中编辑用户?
-
@Walter White:但在当今人们“高度重视final”(包括Joshua Bloch)并到处谈论“不变性”和“有效不变性”的时代甚至围绕不变性概念设计的整个语言,POJO 本身的概念(它是可变的槽设置器)不是非常糟糕的代码气味和反模式吗? ;)
-
朱丽叶,我同意你的评论,我就是这么说的。我认为我们不应该混淆这些担忧。他们的评论是这样更容易理解。 WizardOfOdds,我部分同意您的评论,但这仍然令人担忧。
标签: java design-patterns architecture