Oop 我应该把它们分开还是放在同一个班级?

Oop 我应该把它们分开还是放在同一个班级?,oop,domain-driven-design,Oop,Domain Driven Design,我的UserService中有一些方法 class UserService { Token generateTokenForLogin(String phone); User login(String phone, String token); Token generateTokenForRegistration(String phone); User register(String phone, String token); Token generate

我的
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,我想知道哪种方法更好,谢谢。

在OOP中有一些原则。其中S代表单一责任,其中每个功能/类别应具有明确定义的用途。从外观上看,我认为您的UserService类没有遵循这个原则。我确实会将功能分离出来,但我会采用不同的方法。将其分为两类,用户服务和令牌生成器,如

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
专用于用户服务

另请注意,我喜欢您的自文档化函数名,但它似乎有点冗长。我将函数名更改为更简洁。最后,您的“生成令牌”函数返回类型令牌,但登录、注册和忘记密码令牌使用类型字符串作为令牌的原因是什么?如果可以,请使用内置变量类型以避免不必要的复杂性

为了获得最大的灵活性和健壮性,我建议创建一个
iUserService
。查看示例

最后,我认为您担心代码的质量是很好的。将来,我会去看电影。本次交流专门针对这些类型的问题。

在OOP中,有一些原则。其中S代表单一责任,其中每个功能/类别应具有明确定义的用途。从外观上看,我认为您的UserService类没有遵循这个原则。我确实会将功能分离出来,但我会采用不同的方法。将其分为两类,用户服务和令牌生成器,如

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
专用于用户服务

另请注意,我喜欢您的自文档化函数名,但它似乎有点冗长。我将函数名更改为更简洁。最后,您的“生成令牌”函数返回类型令牌,但登录、注册和忘记密码令牌使用类型字符串作为令牌的原因是什么?如果可以,请使用内置变量类型以避免不必要的复杂性

为了获得最大的灵活性和健壮性,我建议创建一个
iUserService
。查看示例


最后,我认为您担心代码的质量是很好的。将来,我会去看电影。本次交流专门针对这类问题。

非常高兴我能提供帮助!如果这个或任何答案已经解决了你的问题,请考虑通过点击签入接受它。非常高兴我能帮助!如果这个或任何答案已经解决了你的问题,请考虑通过点击复选标记接受它。