У меня есть приложение, которое является довольно средним по размеру и плотности данных, но я пытаюсь найти наилучший способ инкапсуляции данных, поскольку он должен использоваться во многих местах вокруг приложения.Стратегии для инкапсуляции и/или организации данных
В настоящее время у меня есть все мои данные, параметры и состояния, хранящиеся в большом «DataObject». Это выглядит примерно так:
public class DataObject {
public static final String M_READY_INTENT = "com.intent.action.M_READY"
//and more...
public static jsonRawFoos;
public static jsonRawBars;
//and more..
private static HashMap<String, Foo> catFoos = new HashMap<>();
private static HashMap<String, Bar> catBars = new HashMap<>();
//and more..
private static String session;
//and more..
private static boolean optFoo;
//and more..
public static boolean dataState = false;
//and more..
/* Static accessors, static data processors */
}
Эта сумма может составлять до 42 полей. Они должны быть доступны в разных действиях и классах в моем приложении. Я рассмотрел просто создание локального экземпляра в моем MainActivity
и просто сопряжение MainActivity
, чтобы получить доступ к DataObject
, но я не уверен, что передача интерфейса повсюду является правильным вариантом.
Чтобы подвести итог моему вопросу, каков наилучший подход к инкапсуляции/организации моих данных, чтобы сделать его доступным в нескольких разных объектах, сохраняя мой код чистым, эффективным с точки зрения памяти и безопасным от сбоев во время паузы/возобновления/приостановки Мероприятия?
Edit:
Чтобы добавить больше деталей, мое приложение делает запросы API, чтобы получить списки 3-х различных видов объектов, мы будем называть их Foo
, Bar
и Cat
. Результат этих вызовов в формате JSON, поэтому после того, как IntentService
вернется с результатами вызова API, DataObject
анализирует JSON и сохраняет сгенерированные объекты в HashMap
s.
Сгенерированные объекты списков должны быть доступны адаптерами в Fragments
, содержащемся в MainActivity
. Существуют и другие виды деятельности, которые иногда нуждаются в доступе к этим спискам объектов.
Кроме того, пользователь может установить определенные параметры, которые влияют на один или многие из Fragment
s и Activity
s на приложение. Я также установил эти настройки в DataObject
.
Наконец, приложение иногда должно знать, какие данные готовы и были ли очищены другие определенные состояния, прежде чем определять следующий курс действий. Я сохраняю эти состояния в DataObject
.
Второе редактирование:
Я забыл упомянуть, то DataObject
также несет ответственность за информирование остальной части приложения, когда некоторые данные становятся доступными.
Можете ли вы быть более конкретными в отношении ваших данных? Я думаю, что это правильный вопрос, но без каких-либо подробностей я думаю, что трудно найти решение. В таких ситуациях я обычно задаю вопросы о том, что имеет смысл группировать вместе, как все относится друг к другу, кому нужно использовать эти объекты и т. Д. Не зная конкретно, для чего должен отвечать «DataObject», Я думаю, что у вас могут возникнуть некоторые неопределенные ответы. Сразу после битвы это выглядит как анти-шаблон объекта Бога, но мне нужен какой-то контекст. –
Ну, я думаю, это на самом деле моя проблема.DataObject не несет ответственности за определенную вещь, он просто держит, организует и работает с данными в моем приложении. Я попытаюсь добавить больше деталей, не сделав свой пост гигантским раздутым беспорядком. – nukeforum
Я тебя слышу. Определенно звучит так, будто у вас может быть ситуация с объектами богов - один объект, который слишком много знает: https://en.wikipedia.org/wiki/God_object –