2010-10-29 3 views
1

Это, вероятно, довольно простой вопрос для начинающего дизайнера. Я пытаюсь проделать свой путь с помощью ряда требований и дать пользователям тот опыт, который они ищут ...Использование базы данных MS Access в качестве формата файла для настольных приложений, требующих функциональности открытого/безопасного типа

Я написал инструмент, который делает большие вещи типа калькуляции. В настоящее время он состоит из библиотеки классов и инструмента командной строки (отдельные .NET-проекты). Мы используем формат базы данных Access в качестве типа файла, так как он может хранить все разные таблицы в одном файле. Несколько других вопросов о приложении: - Пользователей мало. Нет проблем с масштабируемостью. - Нет проблем с обновлениями. - Рабочий стол желательно. Не в Интернете. - Использование VB и .NET 3.5 SP1

Теперь мне нужно разработать интерфейс GUI, который позволит выполнять типичные операции File/Open и File/Save.

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

Имеет ли смысл использовать временный файл для чего-то вроде прокси? В случае, когда пользователь «открывает» файл, скопируйте исходный файл доступа в локальный файл temp и затем используйте его для сеанса редактирования? Затем, если пользователь «сохраняет», скопируйте локальный файл temp обратно в исходный путь?

Является ли этот вопрос понятным? Является ли дизайн ужасным ??? Любые комментарии или предложения?

Обновление: [с тегом ms-access too] Кроме того, я опустил тот факт, что пользователи также ожидали бы обычной функции File/Save As. Я думаю, что дизайн, который я поставил под вопрос в этом посте, - это традиционно называемый шаблон прокси-дизайна. Кто-нибудь пробовал это (успешно!) С файлами базы данных Access раньше? Предупреждения или советы?

ответ

0

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

Обычно вы скопируете транзакцию с BEGIN и COMMIT. Таким образом, транзакция не включает всю базу данных, а только те части, которые вы сейчас работаете.

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

Но если пользователь рассчитывает открыть БД, внести здесь несколько изменений, зафиксировать их, затем внести несколько изменений, а затем отменить их, это не сработает.

+0

Спасибо за ответ. Это хорошая мысль - использование транзакций. Я не добавил в свое первоначальное сообщение, что мне нужно также поддерживать типичную функциональность «Сохранить как». Я не уверен, что это возможно. Если я начал транзакцию, пользователь внес изменения, а затем попытался сделать «Сохранить как», тогда я хотел бы оставить исходный файл как есть, но каким-то образом передать транзакции новому файлу «Сохраненный As». Извините за то, что вы оставили эту деталь из оригинального сообщения. Вы согласны с тем, что транзакции не будут работать так хорошо, верно? – Mike

+0

Да, в этом случае нет, транзакции, вероятно, будут работать так здорово. Из любопытства, почему файл доступа в этом случае? Почему бы просто не создать свою модель данных из устойчивых объектов и не сохранить их все в XML-файлах по запросу. Они получают хороший читаемый XML, вы получаете все функции сохранения и сохранения в качестве функциональности и не полагаетесь на Access. Если наборы данных просто ОГРОМНЫЕ, это может быть лучшей альтернативой. – DarinH

+0

Ну, вычисления, полученные из системы (и сохраненные во входном файле), могут быть огромными в количестве - 1000 строк данных. Хм ... Мне нравится текст. Я не рассматривал XML или сохранял объекты напрямую. Это по периметру моих знаний в .NET. Я думаю, что мои пользователи предпочитают доступ, потому что они могут использовать его для настройки номеров за пределами внешнего интерфейса, если это необходимо. Я думаю, что то же самое можно сказать и для XML, но даже Access запугивает некоторых пользователей! Я думаю, что редактирование/настройка XML может полностью отпугнуть людей. Тем не менее, я буду управлять ими. Еще раз спасибо за ваши комментарии/предложения. – Mike

0

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

Как упоминалось в @drventure, обычно вы должны использовать транзакции, чтобы контролировать, будут ли изменения сохранены или нет, но в вашем приложении вам нужно будет начать транзакцию «gobal» после открытия базы данных доступа и совершения или отказа от этой транзакции в зависимости от что делает пользователь. Однако я понятия не имею, как Access выполняет обработку транзакции с несколькими изменениями в нескольких таблицах, которые «открыты» в течение длительного времени ...

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

+0

Да, это в значительной степени идея. База данных Access - это «файл сценария», как вы говорите. И пользователи ожидают своего рода традиционный подход MDI, с которым они знакомы с приложениями MS Office. Каждый документ в MDI, вероятно, будет показывать что-то вроде дерева и сетки в нем для этого конкретного документа/файла. – Mike

+0

Если каждый файл открывается только одним пользователем, я не знаю, что это была бы слишком большая проблема, чтобы сделать все в одной транзакции. Тем не менее, мой вопрос заключается в том, все ли это или ничего, т. Е. Будут ли совершены все транзакции, если они есть, а в противном случае - нет, или некоторые из них должны быть совершены, а некоторые нет? Я ожидаю, что это, скорее всего, будет последним, что будет меньше напрягать ваше временное файловое пространство (где хранятся транзакции), так как транзакции будут в меньших количествах. –