Управление внутренними изменениями при развертывании обновления для Windows Phone - PullRequest
1 голос
/ 20 декабря 2011

В ближайшее время я добавлю некоторые функции в свое приложение WP7.Как видно здесь , я внесу некоторые изменения в базу данных.Где и как вы будете обрабатывать подобные обновления в коде?Я не думаю, что есть способ добавить код куда-либо, кроме запуска «обновления».Он встроен в код приложения.

Я думаю о наличии флага, который устанавливается в IsolatedStorage.Назовите это как v1.2UpgradeFlag и установите его в false.В файле App.xaml.cs проверьте этот флаг, и если он имеет значение false, то есть обновление не запущено, запустите некоторый набор кода и обновите флаг.

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

Редактировать: Мне также любопытно, как я буду управлять накопительными обновлениями приложения.Итак, в версии 1.2 у меня есть некоторый код, который обновляет схему базы данных.Что если кто-то купит приложение, пока оно в версии 1.3?Я не хочу, чтобы они 'получали' v1.1, с приложением, запускающим код обновления 1.2, чтобы добраться до v1.3.

1 Ответ

2 голосов
/ 20 декабря 2011

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

Чтобы делать накопительные обновления, вы можете использовать тот же механизм. Вы можете сохранить метод, который будет обновлять базу данных с версии v1 до версии 1.2, другой метод перейти с версии 1.2 на 1.3 и т. Д. Метод, который поддерживает процесс обновления, может выглядеть примерно так: псевдокод ...

var currentDbVersion = GetDbVersion();
while(currentDbVersion < currentCodeVersion)
{
    switch(currentDbVersion)
    {
        case 1.2:
            RunUpgradeFrom12to13();
            break;
        case 1.3:
            RunUpgradeFrom12to13();
            break;
        default:
            break;
    }
    currentDbVersion = GetDbVersion();
}

Это должно позволить вам перейти с любой предыдущей версии на текущую без сохранения нескольких путей кода (поскольку обновление с 1.0 до 1.2 никогда не изменится, и вы должны иметь известную стартовую позицию для каждого кумулятивного шага)

Там могут быть гораздо более разумные идеи, но это первое, о чем я подумал.

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