Я реализую шаблон MVP, который использует шаблон репозитория для предоставления данных. Теперь у меня есть сомнения относительно наилучшего способа управления отношениями между действиями или фрагментами и данными. Моему приложению нужен набор объектов, который может быть большим, давайте предположим, что List. Эти объекты должны отображаться в фрагменте карты. Я знаю, что могу использовать объект Singleton или Application и хранить там данные. Другой выбор - просто загружать данные каждый раз, когда представление, которое требует загрузки этих данных. Наличие данных в Singleton легко и быстро, но в моем случае количество объектов может быть большим. Кроме того, есть проблемы с тестированием приложения, использующего Singletons. С другой стороны, загрузка данных каждый раз при загрузке представления может привести к проблемам с производительностью. Возможно, лучше всего было бы реализовать одно промежуточное решение, такое как кеширование данных?Сохраняет данные в памяти или загружается каждый раз при загрузке представления?
Будет здорово слушать ваши переживания. С уважением,
Редактировать: Я решил избежать использования Singleton с использованием кеша для хранения данных. Вот методы я использую для кэша:
/**
* generic caching methods
* @param key
* @param object
* @throws IOException
*/
private static void writeObject(String key, Object object) throws IOException {
FileOutputStream fos = TheAAApp.getApp().openFileOutput(key, Context.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(object);
oos.close();
fos.close();
saveCurrentTimeStamp();
}
private static Object readObject(String key) throws IOException,
ClassNotFoundException {
FileInputStream fis = TheAAApp.getApp().openFileInput(key);
ObjectInputStream ois = new ObjectInputStream(fis);
Object object = ois.readObject();
return object;
}
Привет, Яхнольд, спасибо за ваш совет, на самом деле это то, что я сделал. Я решил, наконец, не использовать Singleton, заменив его кешем. Мое приложение большое, и мы увидим, можно ли полностью его избежать. Я редактирую свой вопрос, чтобы поместить эти методы, потому что, возможно, они могут быть полезны для других людей. – lm2a