2017-08-12 72 views
1

我在我的UserService中有一些方法。我應該分開還是放在同一班?

class UserService { 

    Token generateTokenForLogin(String phone); 
    User login(String phone, String token); 

    Token generateTokenForRegistration(String phone); 
    User register(String phone, String token); 

    Token generateTokenForForgotPassword(String phone); 
    User forgotPassword(String phone, String token, String newPassword); 

    User updateUser(UpdateUserRequest request); 
} 

我如果這些方法分開,

class LoginService { 

    Token generateTokenForLogin(String phone); 
    User login(String phone, String token); 
} 

class RegistrationService { 

    Token generateTokenForRegistration(String phone); 
    User register(String phone, String token); 
} 

class UserPasswordService { 

    Token generateTokenForForgotPassword(String phone); 
    User forgotPassword(String phone, String token, String newPassword); 
} 

class UserService { 

    User updateUser(UpdateUserRequest request); 
} 

每一種方法都有10+ LOC,我想知道這是一個更好的辦法,謝謝。

回答

4

在OOP中有SOLID原則。 S代表單一職責,每個職能/職業應該有明確的目標。從它的外觀來看,我會說你的UserService類不遵循這個原則。我確實將功能分開,但我會採用不同的方法。將其分爲2類,用戶服務和令牌生成器像...。

class UserService { 

    User login(String phone, String token); 
    User register(String phone, String token); 
    User forgotPassword(String phone, String token, String newPassword); 
    User updateUser(UpdateUserRequest request); 
} 

class TokenGenerator { 

    String newLoginToken(String phone); 
    String newRegistrationToken(String phone); 
    String newForgotPasswordToken(String phone); 
} 

現在你的類被適當分開。 TokenGenerator致力於生成令牌,UserService致力於用戶服務。

單獨的筆記,我喜歡你的自我記錄功能名稱,但它看起來有點冗長。我將函數名稱更改爲更簡潔。最後,爲什麼你的「生成令牌」函數返回類型令牌的任何理由,但登錄,註冊和忘記密碼令牌爲令牌類型字符串?如果可以的話,使用內置的變量類型來避免不必要的複雜性。

爲了獲得最大的靈活性和健壯性,我建議創建一個interfaceiUserService。查看GoogleAPI UserService Interface的例子

最後,我認爲你很擔心你的代碼質量。在將來,我會檢查出Code Review Stack Exchange。這種交流是專門針對這些類型的問題。

+0

這是我期待的答案,謝謝:) – dream83619

+0

非常高興我可以幫忙!如果這個或任何答案已解決您的問題,請考慮通過點擊複選標記來接受它。 – shockawave123

相關問題