Если активность имеет прямой доступ к базе данных SQLite или должен быть класс посредника?
-
12-12-2019 - |
Вопрос
Я имел подклассный SQLiteopenheelper и иметь все компоненты кода, готовыми к использованию. Вопрос в том, это действительно хороший дизайн, чтобы позволить любую деятельность иметь прямой доступ к публичным методам в основной базе данных.
У меня есть ситуация, когда моя деятельность собирается заполнить информацию в его макетах на основе какой информации, которую она получает из базы данных - по сути, будучи динамически созданной во время выполнения. Поскольку у меня будет несколько строк, возвращающихся из базы данных, что означает, что у меня будет массив того, что мне нужно, чтобы получить всю информацию.
Так что-то вроде этого:
//in Main Activity Class
private class menuItems{
String category_name;
int category_id;
int menuItem_id;
String menu_title;
String menu_desc;
String price;
int icon;
}
//ArrayList in Main Activity
ArrayList<menuItems> menu = new ArrayList<menuItems>();
.
Моя деятельность нуждается в этой «структуре» в качестве собственной - так что она может получить информацию из базы данных - что-то вроде GetallMenuitems (), - где этот метод выполнит оператор SELECT, собрать информацию о том, что информация является его собственной «структурой» и вернуть его обратно в основную деятельность. Затем используйте эту информацию в рамках деятельности для создания макетов / представлений и т. Д.
Если бы я должен был в конечном итоге иметь класс посредника, чтобы поговорить с базой данных, то этот класс также понадобится ту же «структуру», определенную в нем. Было ли это лучше дизайн, чтобы иметь что-то вроде:
МАКТИВНОСТЬ
databaseAccessor - звонки общедоступные классы данных databasehelper (за запрос от мэмпировки)
databasehelper (подклассы sqliteopenheelper, выполняет все запросы базы данных)
Я хотел бы спроектировать что-то вдоль линий MVC (контроллер по просмотру модели), но мне было интересно, что вы, ребята, думали о практичности этого в приложении Android.
Спасибо!
Решение
В общем, это хорошая идея, чтобы сделать активность и база данных, как это отделение друг от друга.Это позволяет вам иметь возможность изменить источник данных, создав класс для доступа к нему, без необходимости менять код, который вы используете для представления данных.
Итак, да, я бы абсолютно имел отдельного класса для доступа к данным, и отдельный класс, чтобы позволить передавать данные в действие.Я также следовал бы за законом Демитера в этом случае и предоставить любые функциональные возможности, необходимые для доступа или изменения базовых данных, не обеспечивая доступ к базе данных.
Другие советы
Чтобы заключить - думаю, что имение базы данных отдельно от GUI - это умный шаг в случае, если я хочу снова использовать класс БД с любым другим действием.