我有一个class
,如util
,它包含所有准备和调用请求(我希望能够轻松管理请求)。例如:
public void reqLogin(String emailAddress, String password) {
JsonRequestBody parameters = new JsonRequestBody();
parameters.put(USER_NAME, emailAddress);
parameters.put(PASSWORD, password);
mService.login(parameters.createRequestBody());
}
public void reqRegister(LocationWrapper location) {
JsonRequestBody jsonRequestBody = new JsonRequestBody();
jsonRequestBody.put(DEVICE_TOKEN, "myToken");
jsonRequestBody.put(DEVICE_TOKEN_TYPE, "type");
mService.register(jsonRequestBody.createRequestBody());
}
...
但是这个设计的问题在于LoginFragment
我可以拨打Register request
,在RegisterFragment
我可以拨打Login request
。那么,创建这个util
类是不好的解决方案?是否有一种模式可以解决我的issue
?
答案 0 :(得分:2)
那么,创建这个util类是不好的解决方案呢?
Util
类不会将处理委托给其他类。他们处理输入,进行一些计算并返回结果。在您的示例中,您将任务委派给来自util的服务类。那是不对的。相反,服务类应该调用util方法。
而且,Utils不应该有业务逻辑。看看Math班。
答案 1 :(得分:1)
例如,要在60个API调用之后避免GodObject
反模式,您可以使用类似Command
设计模式的内容。
interface APIOperation {
void execute();
}
class LoginAPIOperation implements APIOperation {
private final String mEmail, mPass;
public LoginAPIOperation(String emailAddress, String password) {
mEmail = emailAddress;
mPass = password;
}
public void execute() {
JsonRequestBody parameters = new JsonRequestBody();
parameters.put(USER_NAME, mEmail);
parameters.put(PASSWORD, mPass);
mService.login(parameters.createRequestBody());
}
}
new LoginAPIOperation("user@gmail.com","qwerty").execute();
您可以在不同的类中重复使用它。
答案 2 :(得分:0)
其中一个解决方案可能是您班级的2个不同界面:
class RequestManager implemets LoginRequest, RegistrationRequest{
@Override //method from LoginRequest
public void reqLogin(String emailAddress, String password) {
JsonRequestBody parameters = new JsonRequestBody();
parameters.put(USER_NAME, emailAddress);
parameters.put(PASSWORD, password);
mService.login(parameters.createRequestBody());
}
@Override //method from RegistrationRequest
public void reqRegister(LocationWrapper location) {
JsonRequestBody jsonRequestBody = new JsonRequestBody();
jsonRequestBody.put(DEVICE_TOKEN, "myToken");
jsonRequestBody.put(DEVICE_TOKEN_TYPE, "type");
mService.register(jsonRequestBody.createRequestBody());
}
}
其他解决方案可能只是2个单独的类进行登录和注册。
如上所述,这个类不是Utils类,它更像是网络处理器或请求管理器。