2011-02-02 2 views
0

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

Я начинаю фон, я университетский студент, изучающий программное обеспечение в прошлом году, мы освещали C#, и я получил работу, работающую в программном обеспечении прототипа программного обеспечения для программного обеспечения в C# (их основной язык - C++ с использованием QT) прототип был предоставлен некоторым клиентам, которые все вернули положительную обратную связь.

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

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

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

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

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

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

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

http://zensoftware.org/archives/248 ссылка

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

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

Снова я благодарю вас за любой вклад, что так всегда.

Vade

ответ

1

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

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

MySqlConnection cn = new MySqlConnection(yourConnectionString); 

//Execute your queries 

cn.close(); 

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

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

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

0

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

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

0

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

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

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

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

0

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

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

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

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

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

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

Смежные вопросы