С точки зрения ОО, бизнес-логика всегда должна быть изолирована от пользовательского интерфейса. Я бы изолировал и централизовал все свои бизнес-вызовы, такие как getSong (), getStore () и т. Д., В POJO и оставил мой класс активности только на манипулировании / рендеринге пользовательского интерфейса, вот как я это делаю:
- Определение интерфейса IBusinessDAO
- Определение RealBusinessDAO реализует IBusinessDAO
- Определить, что MockBusinessDAO реализует IBusinessDAO
Позвоните IBusinessDAO.getSong (); внутри AsyncTask.doInBackground ()
public class MyActivity extends Activity {
IBusinessDAO businessDAO;
... ...
private class MyAsyncTask extends AsyncTask<Void, Void, Void> {
... ...
protected void doInBackground(Void... params) {
businessDAO.getSong();
}
}
... ...
public void onCreate(Bundle savedInstanceState) {
if (runInTest)
businessDAO = new MockBusinessDAO();
else
businessDAO = new RealBusinessDAO();
new myAsyncTask().execute();
}
}
Таким образом, в каждой из ваших реализаций AsyncTask среди различных Деятельностей ваш AsyncTask.doInBackgroud () будет простым и чистым, в результате чего ваш код будет более эффективным и обслуживаемым.
Это также помогает улучшить тестируемость кода, для модульного тестирования вашей бизнес-логики, поскольку это POJO, вы можете использовать только JUnit для написания своего тестового примера. Иногда мы хотим протестировать компонент пользовательского интерфейса, и нам неважно, как реализована основная бизнес-логика, например, моя бизнес-логика подключается к удаленному http-серверу, загружает некоторые данные json, я не хочу делать это каждый раз, когда просто Я хочу протестировать макет пользовательского интерфейса. В этой ситуации я могу легко изменить все свои действия, используя MockBusinessDAO (своего рода концепцию DI Spring), для тестирования компонента пользовательского интерфейса, не касаясь того, как реализована реальная бизнес-логика.
Наконец, это также улучшает возможность повторного использования вашего кода, поскольку ваш businesDAO не имеет ничего общего с Andriod, кроме классического POJO, кроме того, вам не нужно беспокоиться о параллелизме в вашей реализации BusinessDAO, так как все его методы будут вызываться внутри AsyncTask Метод .doInBackground ().
Надеюсь, что поможет.