【问题标题】:What's the best way to keep status of comment object?保持评论对象状态的最佳方法是什么?
【发布时间】:2012-01-08 04:33:28
【问题描述】:

我有一些用于放置在外部网站上的网络应用程序。这个应用程序是一个像 disqus (disqus.com) 这样的 cmets 的小部件。

每条评论都是一个实体对象,包含“作者”、“正文”、“时间”等字段。 除了这些字段之外,注释对象还具有名称为“活动”的字段 那就是:

@Entity
class Comment {

    private User author;

    private String body;

    //... and a lot of many other attributes

    private boolean active;
}

“活动”字段用于分隔活动和已删除的 cmets。 如果 "active" == false 则评论被删除,如果不是则处于活动状态。

很快我将介绍一个允许对 cme​​ts 进行预审核的功能。 即用户发表了评论,但在管理员未批准之前,评论仍然无效。

所以问题是最好的制作方法是什么?

我看到了两种方式:

1) 将“活动”字段从 boolean 更改为 int 并保持评论状态,

例如:0 - 预审核,1 - 活动(已批准),-1 已删除,-2 未批准可能是其他东西...

2) 保留“活动”布尔字段并为状态添加附加字段

【问题讨论】:

  • 听起来对你来说更容易做..

标签: java database hibernate entity comments


【解决方案1】:

为什么是int - 为什么不是enum

enum CommentStatus {
    Deleted, Pending, Active
}

编辑:另外,尽量不要把你的enum 到处散布。使用您的 Comment 类作为一个健壮的模型,为 isActive()isPending() 添加函数——无论您使用一个或两个字段,还是使用枚举或 int,这是一个实现细节。隐藏那个shizzle,哟。

【讨论】:

  • 我同意枚举的建议,但我不确定我是否同意枚举的屏蔽。拥有一个 getStatus() 方法对我来说似乎很干净,我会发现有一些管理页面显示一个带有每个状态的复选框来搜索 cmets 是合乎逻辑的。顺便说一句,HQL 和 Criteria 查询无论如何都必须使用枚举。
  • 嗯,Hibernate 天生就知道类的实现细节。我更喜欢“谈话功能”而不是x == MyEnum.SomeValue。如果有CommentRepository 我想问findActiveComments(Listing listing) 我同意 - 将基于枚举制作 HQL/Criteria 查询。但这意味着这个细节在两个地方。并非在所有需要围绕评论状态做出决定的地方。
  • 这完全取决于用例。如果您必须搜索 [活动] [或待处理] [或已删除] cmets,则使用带有 EnumSet 作为参数的单个方法更清晰,IMO。两者兼有可能是最好的解决方案。
  • 谢谢大家,但我仍然不明白保持评论状态的最佳方式是什么 - 在两个字段(“活动”和“状态”)或只有一个字段(所有状态的“状态” )?
  • 我们说的是一个字段。作为enum - 你熟悉这个吗? docs.oracle.com/javase/tutorial/java/javaOO/enum.html
猜你喜欢
  • 2015-10-08
  • 2015-04-28
  • 1970-01-01
  • 2015-07-02
  • 2018-08-14
相关资源
最近更新 更多