2017-08-12 59 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

相关问题