2016-03-27 72 views
3

我需要一個用於我的spring-boot項目的用戶管理服務。我一般都明白春天使用DTO(數據傳輸對象)。但是當我想要設計服務時,我只用一個「User」模型使用多個DTO,例如UserDTO,RegisterUserDTO,UpdateUserDTO,ManagedUserDTO .. UserDTO就像只讀數據(輸出數據包含用戶名,電子郵件,名稱)用於顯示用戶信息。但是RegisterUserDTO就像輸入數據(帶密碼,confirmPassword爲新用戶創建密碼),用於用戶註冊表單。 UpdateUserDTO用於管理員,因爲管理員可以分配權限,啓用或禁用用戶。彈簧驗證:多個DTO與具有多個驗證器的單個DTO

另一個原因可能是由於驗證,所以不同的hibernate註釋驗證器可以應用在不同的DTO上。

我是否正確地使用了很多DTO?它應該像一個DTO一樣使用多個驗證器進行驗證?

有沒有其他的選擇來簡化它?

回答

3

在我看來,有多個DTO是有效的,並導致更清潔的邏輯。

  1. 具有不同的DTO允許在不同的情況下
  2. 你不必對付一個「大課」的驗證,因爲驗證邏輯是在不同的場景不同的暴露對同一User對象的不同和相關信息。如果一切都在一個類中,那麼你將會很難,特別是在驗證中,因爲某些字段不一定要在給定的上下文中驗證。另一方面,這可能會導致暴露不應該暴露的值,如果不小心,例如。密碼等
  3. 允許儘可能使用繼承。例如,如您所述,UserDTO包含有關任何用戶的一般信息,而RegisterUserDTO可以繼承UserDTO,而不必重複UserDTO的屬性和驗證註釋。

除此之外,您還可以使用Spring's conversion service爲您在不同的DTO之間進行轉換,並且此轉換完全與核心業務邏輯分離。我認爲這不是一個好處,但是當有許多這樣的DTO時,轉換服務使它不那麼痛苦。