Шаблон персистентности для однопользовательского доступа к базе данных на основе файлов - PullRequest
2 голосов
/ 12 ноября 2011

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

Это настольная программа (C # и WPF) с доступом к локальной однофайловой однопользовательской базе данных (SQL Server CE).

В моем домене есть основная таблица, содержащая «документы».Я хочу, чтобы пользователь открыл один документ из базы данных, и он извлечет из базы данных и сохранит в памяти полный график: каждый отдельный объект документа имеет различные коллекции объектов «сын» и «внук».Из памяти в пользовательский интерфейс, где пользователь может свободно манипулировать документом, но он будет сохраняться только тогда, когда пользователь нажимает «Сохранить», например, как документ Word.

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

Я не вижу, чтобы моя проблема была реализована, просто некоторые предложения по хорошим шаблонам дизайна, относящимся к моему домену (ссылки тоже были бы хорошими).Кроме того, домен довольно прост, поэтому я мог бы реализовать эти шаблоны самостоятельно, не используя каркас OR / M, такой как NHIbernate или Castle (на самом деле я считаю, что NHibernate - это слишком много хлопот для такой простой проблемы), но я бы не сталне против какой-то простой, маленькой и легкой структуры постоянства.

Ответы [ 2 ]

1 голос
/ 12 ноября 2011

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

1 голос
/ 12 ноября 2011

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

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

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

...