Emi*_*Adz 5 android helper android-networking android-async-http
我创建了以下类:
public class AsyncHttpsClientHelper {
public static final int REMOVE_CREDIT_CARD = 1;
public static final int ENABLE_AUTORENEW = 2;
// +10 final ints...
private static AsyncHttpsClientHelper instance = null;
private static Activity activity;
// Some other variables
private AsyncHttpsClientHelper(Context context) {
// Initiate variables
}
public static AsyncHttpsClientHelper getInstance(Context context) {
// Guarantees the same instance for this class (Singleton)
}
public void performNetworkTask(int networkTaskType, String value)
{
switch (networkTaskType)
{
case REMOVE_CREDIT_CARD:
{
CupsLog.d(TAG, "path: " + Consts.ACCOUNT_REMOVE_CREDIT_CARD_PATH);
client.post(Consts.ACCOUNT_REMOVE_CREDIT_CARD_PATH , new JsonHttpResponseHandler() {
@Override
public void onSuccess(JSONObject result) {
try {
CupsLog.d(TAG, Consts.ACCOUNT_REMOVE_CREDIT_CARD_PATH + " -> onSuccess, result: " + result.toString(3));
AccountService.getInstance(activity).pullAccountDetailsFromServer();
Toast.makeText(activity, "Your credit card was removed", Toast.LENGTH_SHORT).show();
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Throwable arg0) {
CupsLog.d(TAG, "commitPaymentToServer -> onFailure");
BusProvider.getInstance().post(new DialogChangeEvent(DialogChangeEvent.REMOVE_CREDIT_CARD, "failed"));
}
});
break;
}
case ENABLE_AUTORENEW:
{
// Do ENABLE_AUTORENEW logic
}
// +10 cases goes here...
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个类还没有完成,我仍然需要在这里添加另外10个我在应用程序周围执行的其他网络调用.
要运行其中一个网络任务,我运行此行例如:
AsyncHttpsClientHelper.getInstance(this).performNetworkTask(AsyncHttpsClientHelper.COMMIT_COUPON_TO_SERVER, event.getValue());
Run Code Online (Sandbox Code Playgroud)
当任务完成时,我Event
使用Square
事件Bus
工具触发,以对活动/片段布局提交所需的可视更改.
问题:我的老板声称这是一种不好的做法,当我完成它时,这堂课会变得一团糟.更多的是他声称这个类应该是一个愚蠢的类,他知道怎么做是配置AsyncHttpClient
对象并返回它,以便我可以使用它并在相关的内部执行https任务Activity
.基本上他说https调用本身应该位于Activity类中.我更喜欢这种方式,并认为它使我的活动更清洁,更好阅读.另一方面,他说这种方式更难以调试,而且这个类结合了Controller和View功能的一部分,它不应该这样做.
那么谁是对的?创建这样的类真的是一个坏习惯吗?
考虑一下迪米特里关于轮换的说法,因为这是事实。切勿对与 UI 有任何连接的对象使用静态引用。它会导致内存泄漏,并且很难调试。
其他问题:
并回答您的问题:
我的老板声称这是一种不好的做法,当我完成它时,这堂课会变得一团糟。
是的,它会变得一团糟(并且当您开始添加/修改功能时会变得更糟)。
此外,他声称这个类应该是一个愚蠢的类,他所知道的就是配置 AsyncHttpClient 对象并返回它,以便我可以使用它并在相关 Activity 中执行 https 任务。
应该是愚蠢的。在我看来,你可以保留performNetworkTask方法,但是你需要有回调参数来让调用者做出不同的反应。
public void performNetworkTask(Request request, JsonHttpResponseHandler handler);
Run Code Online (Sandbox Code Playgroud)
你也应该放下int networkTaskType
。我的建议是使用抽象 Request 类。但是,如果您喜欢这种方式,那么至少切换到 Enum。
基本上他说 https 调用本身应该位于 Activity 类中。
“Https 调用”可以表示任何意思。我认为他的意思是回调应该由调用者传递。
我更喜欢这种方式,并认为它使我的活动更清晰、更易于阅读。
这样你的 Activity 中的代码肯定会减少,但你只能支持一个 Activity!基本上,您只是将缺少的代码从 Activity 移至此帮助程序类。更不用说以任何方式修改助手都会很痛苦。
另一方面,他说这种方式更难调试,并且这个类结合了控制器和视图功能的一部分,这是它不应该做的。那么谁是对的呢?创建这样的类真的是一种不好的做法吗?
归档时间: |
|
查看次数: |
2284 次 |
最近记录: |