C ++ класс для управления доступом к базе данных

0

Вопрос - это скорее лучший способ сделать вопрос, чем реальную проблему.

Контекст и то, что я делаю

У меня есть приложение, которое должно получить доступ к базе данных. Поэтому у меня есть класс DatabaseManager который вызывается каждый раз, когда мне нужно получить доступ к базе данных, а это, например:

DatabaseManager *db = new DatabaseManager;
std::vector<Element> elementVector = db->getAElementsById(id);

И вы одинаково для всех вставляете, обновляете или удаляете запросы.

Что в итоге произошло...

... что мой файл имеет уже 1200 строк и растет с каждой новой функцией.

Вопрос

Так как делают красивые люди?

  • Один заголовок несколько разделенных файлов? (Это сказало, что это не очень хорошая идея)
  • Разделение класса в нескольких классах? DatabaseManager - это один класс, это был бы вздор...
  • Есть ли другой вариант? (Я не знаком с понятием пространства имен, может быть, это способ?)

Я читал и другие сообщения, но не нашел ни хорошего вопроса, чтобы спросить у Google, либо людей, отвечающих на мой вопрос.

  • 0
    Я понимаю, что ваша проблема заключается в размере и сложности исходного файла databaseManager, правильно?
  • 0
    Да. Я использую IDE, так что это не так ужасно, но это может стать болью.
Показать ещё 8 комментариев
Теги:
database
class

2 ответа

1
Лучший ответ

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

Шахта на самом деле более сложная, но практика должна заключаться в разделении кода на отдельные тематические файлы, предпочтительно не более 300 LOC (Lines Of Code).

0

Решение, которое я выбрал сейчас, следующее (потому что я слишком ленив, чтобы воссоздать новые классы и т.д.): Я разделил класс на несколько файлов cpp

// DatabaseManager.h

class DatabaseManager
{

//// Getters - in DatabaseManager_getters.cpp
public:
    // Movies
    Movie getOneMovieById(const int id);
    QList<Movie> getAllMovies(const QString fieldOrder = "title");
    ....

private:
    // Other functions for getters
    Movie hydrateMovie(QSqlQuery &query);

//// Inserts - in DatabaseManager_insert.cpp
public:
    bool insertNewMovie(Movie &movie);
    ....

private:
    bool insertNewTag(Tag &tag);
    ....

//// Updates - in DatabaseManager_update.cpp
public:
    bool updateMovie(Movie &movie);
    ....

//// Delete - in DatabaseManager_delete.cpp
public:
    bool deleteMovie(Movie &movie);

private:
    bool deletePeople(const People &people);

};

И, очевидно, файлы.cpp следуют объявленным. Мне легче найти, где функция, и поддерживать код.

В другой раз, я подумаю дважды, если не будет более уместным следовать рекомендациям, которые вы дали.

спасибо снова!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню