Набор классов для работы с БД
От: netDalek Россия 7minds.ru
Дата: 02.02.10 13:37
Оценка:
Оцените идею и реализацию

В программе используется иерархическая БД, для хранения данных о датчиках прикрепляемых к пациенту:


Чтобы проще было представить

Программ изначально писалась второпях, и на текущей момент sql запросы раскинуты по всей программе. Сейчас возникла идея создать компонени для работы с данной БД, который позволил бы как минимум абстрагироваться от используемой БД, а как максимум вообще забыть о способе хранения данной иерархии.

Каждая запись бд имеет свой id, а также id родительского элемента (кроме элементов верхнего уровня)

Для удобной работы с данной бд созданы следующие классы:


Соответственно три уровня иерархии представлены классами: Person, Session, Place имеющими общего предка DBRecord. Троеточиями ибозначены поля классов, которые в данном случае не интересны (например для Person это имя, фамилия)

Класс Saver инкапсулирует работу с БД и может быть заменен при переходе на другую БД. Saver может быть дополнен методами для выборки объектов из БД по каким-то другим значениям.

Объекты SessionCollection и PlaceCollection создаются и заполняются объектами при первом обращении к соответствующим полям Sessions и Places классов Person и Session. При добавлении и удалении объектов в этих коллекциях производятся синхронные действия с БД. А каждый объект типа DBRecord имеет метод Save, который сохраняет себя в БД.

Если объекты Session и Place были получены из коллекций SessionCollection и PlaceCollection соответственно, то их поля Person и Session ссылаются на уже существующие объекты. Если же они были получены непосредственно от Saver, то при обращении к данным полям объекты запрашиваются из БД с помощью Saver.

На текущий момент все описанное реализовано, разве что полноценное тестирование сложно устроить. В конечную программу не включено. Код получился достаточно красивым и компактным. Пользоваться достаточно удобно и интуитивно понятно. Единственное что меня беспокоит, а не перемудрил ли я? Ну и может кто предложит что-то лучшее.
<img src="http://www.brainbench.com/images/certlogo/color/cert/cppprogrammer.gif" />
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.