在Web系統中實現評論功能

大概是兩個月前,項目組來了一位新的leader,看起來經驗很豐富的亞子。有一天,新Leader對我說:小夥子, 你來做一下這個備註(用戶評論)模塊吧。我一聽,這不是在爲難我胖虎嗎,之前從來沒做過啊。

但是轉念一想,終於可以做點新東西了,心裏還是有些小開心得。OK,在開始之前先先了解一下模塊有哪些需求吧:

用戶可以設置評論評論是否公開。如果該用戶設置了不公開,並且@了其他用戶,該用戶以及被他@的用戶是可以看見這條評論的,否則只有他自己可以看見這條評論。

用戶可以在其他用戶的評論下發表自己的評論。

需求看起來並不困難,那麼按照慣例先進行表字段的設計:

1.評論的實體類

@Entity
@Table(name = "t_discuss")
public class Discuss Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    // 評論的用戶
    @Column(name = "user_name")
    private String userName; 
    
    // 評論的實體類型
    @Column(name = "entity_type")
    private EntityType entityType;
    
    // 評論的實體id
    @Column(name = "entity_id")
    private Long entityId;
    
    // 評論的內容
    @Column(name = "discuss_value")
    private String discussValue;

    // 父級評論的id
    @Column(name = "discuss_id")
    private Long discussId;
    
    // 評論是否公開
    @Column(name = "publicity")
    private Boolean publicity;

  
    // 省略 get, set方法

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Discuss discuss = (Discuss) o;
        return Objects.equals(id, discuss.id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }
}

簡單說明一下實體類中各個字段。

  • userName字段用來記錄是哪位用戶發表的評論,這裏可以改爲User來進行多對一關聯:
  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "user_id")
  private User user; 
  • 實體類型和實體id很好理解,比如說在某一個視頻下方評論,那麼實體類型就是"視頻",實體id就是這個視頻的id。
  • discussId存的是上級評論的Id,如果沒有上級評論,那麼discussId置爲null。
  • publicity爲ture,表明這是一條公開的評論

接下來在Service層中實現具體業務功能,首先是寫評論:

public interface IDiscussService {

    // 創建評論
    void createDiscuss(DiscussCreateDTO dto, EntityType entityType, Long entityId);
}


public class DiscussCreateDTO {

    // 父評論id
    private Long discussId;

    // 評論內容
    private String value;

    // 是否公開
    private Boolean publicity;

    // 省略 get, set 方法
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章