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
。查看示例
最后,我认为您担心代码的质量是很好的。将来,我会去看电影。本次交流专门针对这类问题。非常高兴我能提供帮助!如果这个或任何答案已经解决了你的问题,请考虑通过点击签入接受它。非常高兴我能帮助!如果这个或任何答案已经解决了你的问题,请考虑通过点击复选标记接受它。