Должен ли Activity иметь прямой доступ к базе данных sqlite или должен существовать класс-посредник? - PullRequest
0 голосов
/ 13 марта 2012

У меня есть подкласс SQLiteOpenHelper, и все компоненты кода готовы к использованию. Вопрос в том, действительно ли это хороший дизайн, позволяющий любому виду деятельности иметь прямой доступ к открытым методам в основном классе базы данных.

У меня есть ситуация, когда моя деятельность будет заполнять информацию в ее макетах в зависимости от того, какую информацию она получает из базы данных - по существу, она динамически создается во время выполнения. так как у меня будет несколько строк, возвращающихся из базы данных, это означает, что у меня будет массив того, что мне нужно, чтобы получить всю информацию.

Так что-то вроде этого:

 //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 (), - где этот метод будет выполнять оператор выбора, собрать информацию - это собственная "структура" и верните его обратно к основному виду деятельности. Затем используйте эту информацию в упражнении для построения макетов / представлений и т. Д.

Если бы у меня в конечном итоге был класс-посредник для общения с базой данных, тогда и этому классу потребовалась бы та же самая "структура", определенная в ней. Будет ли лучше дизайн иметь что-то вроде:

MainActivity

DatabaseAccessor - вызывает публичные классы DatabaseHelper (за запрос от MainActivity)

DatabaseHelper (подклассы SQLIteOPenHelper, выполняет все запросы к базе данных)

Я хотел бы спроектировать что-то по образцу MVC (Model-View-Controller), но мне было интересно, что вы, ребята, думаете о практичности этого в приложении для Android.

спасибо!

Ответы [ 2 ]

1 голос
/ 19 марта 2012

В общем, неплохо сделать деятельность и базу данных максимально отделенными друг от друга. Это позволяет вам изменять источник данных, создавая класс для доступа к нему без необходимости изменять код, который вы используете для представления данных.

Итак, да, у меня был бы совершенно отдельный класс для доступа к данным и отдельный класс, позволяющий передавать данные в действие. В этом случае я также следовал бы Закону Деметры и предоставил бы любую функциональность, необходимую для доступа или изменения базовых данных, без фактического предоставления доступа к базовой базе данных.

0 голосов
/ 19 марта 2012

В заключение - подумайте, что выделение базы данных отдельно от графического интерфейса - это разумный шаг на тот случай, если я захочу снова использовать класс db с любым другим действием.

...