Обработка базы данных в приложениях - PullRequest
0 голосов
/ 02 февраля 2011

Это довольно сложный вопрос, но любая обратная связь вообще приветствуется.

Начну с предыстории, я студент университета, изучавший разработку программного обеспечения в прошлом году, когда мы изучали c #, и я получил работу в программном обеспечении для создания прототипов программного кода на c # (их основным языком является c ++ с использованием QT) после производства Прототип был передан некоторым клиентам, которые все получили положительные отзывы.

Теперь я смотрю на приложение и думаю, что смогу использовать его как витрину с моим резюме, так как клиенты, которые использовали программное обеспечение, сказали, что они подпишут что-то, чтобы ссылаться на него.

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

само приложение работает вдоль сервера MySQL, и существует 6 различных схем, с которых оно получает свои данные.

Я написал класс (названный им databaseHandler), в котором есть mysqlconnection (один вопрос был о том, должно ли соединение оставаться открытым все время, пока приложение работает, или открыть его, запустить запрос, затем закрыть его и т. Д.) Внутри в этом классе я написал метод, который принимает некоторые аргументы и создает свою строку запроса, которую затем выполняет весь mysqlDataReader = cmd.executeReader (), затем возвращает читателя туда, откуда он был вызван.

После разговора с другом, которого он упомянул, было бы неплохо, если бы метод возвращал необработанные данные, а не считыватель, поэтому держал все «вещи» базы данных подальше от основного приложения.

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

затем я наткнулся на страницу, которая шла о создании класса, который имел атрибуты имен столбцов и создал список, из которого вы могли бы извлечь свои данные:

http://zensoftware.org/archives/248 является ссылкой

, поэтому я подумал, что для использования этого метода мне нужно создать 6 классов с атрибутами столбцов моих таблиц (пара таблиц имеет до 10-15 столбцов)? или есть лучший способ для меня обрабатывать свои данные?

Я на самом деле не разбираюсь в этих вещах, но, если указывать в правильном направлении, я очень быстро учусь :) 1027 *

Опять же, я благодарю вас за любой вклад.

1031 * Vade *

Ответы [ 4 ]

1 голос
/ 02 февраля 2011

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

На вопрос о том, оставить ли соединение открытым для всей программы или только открыть его в течение фактического времени запроса. Обычный (и правильный) способ сделать это - открыть соединение столько, сколько вам нужно, поэтому

MySqlConnection cn = new MySqlConnection(yourConnectionString);

//Execute your queries

cn.close();

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

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

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

0 голосов
/ 02 февраля 2011

Абстрагирование вашего кода доступа к данным с использованием объектов называется Отображение объекта / реляционного .На самом деле это гораздо более сложная задача, чем кажется на первый взгляд.Есть несколько библиотек, даже в самой среде, которые уже очень хорошо выполняют то, что вы пытаетесь реализовать.

Если ваши потребности очень простые, посмотрите на типизированные DataSets.Они позволяют вам создавать классы таблиц в конструкторе, а также создавать объекты, которые будут выполнять загрузку и сохранение для вас (с учетом определенных ограничений)

Если ваши потребности не так просты, но все же довольно просты, я рекомендую вам взятьПосмотрите на Linq To SQL, чтобы увидеть, покрывает ли он ваши потребности, так как он очень просто отображает таблицы и использует более современный шаблон использования, чем DataSets.

Существуют также более сложные ORM, которые позволяютвам нужно определить более сложные отображения, такие как Entity Framework или nHibernate, но очень часто их сложность не требуется.

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

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

0 голосов
/ 02 февраля 2011

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

Вы хотите, чтобы соединение оставалось открытым как можно меньше. Поэтому вы должны открывать каждый запрос данных и закрывать его, как только закончите. Вы также должны утилизировать его, но если ваша база данных находится внутри оператора C # using, что происходит автоматически.

Что касается вопроса о том, как вернуть данные в ваше приложение, вы на правильном пути. Обычно вы хотите скрыть необработанную базу данных от остальной части вашего приложения, и сопоставление необработанных данных с другими промежуточными классами является правильным решением.

Теперь, как вы делаете это отображение, очень большая тема. В идеале вы не хотите создавать классы, которые отображают один в один ваши таблицы / столбцы, а скорее предоставляют вашему приложению более удобное для приложения представление данных (например, бизнес-объектов, а не таблиц базы данных). Например, если данные ваших сотрудников Разделив на три таблицы или в целях нормализации, вы можете скрыть эту сложность и представить информацию в виде одного класса Employee, который связывает данные из других таблиц вместе.

0 голосов
/ 02 февраля 2011

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

Многие новые технологии Microsoft сосредоточены на выполнении этой задачи.Полегче.Довольно часто требуется более 6 классов, и написание всего этого кода может показаться рутиной.Я хотел бы предложить, чтобы, если вы заинтересованы в изучении этих новых подходов и, возможно, адаптации их к своему собственному коду, вы можете проверить Linq to SQL и Entity Framework .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...