Как Вы управляете своим приложением, когда база данных идет офлайн?

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

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

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
6
задан gleng 8 September 2008 в 10:25
поделиться

6 ответов

Ответ зависит от типа Вашего приложения. Существуют приложения, которые могут работать офлайн - Microsoft Outlook, например. Такие приложения не рассматривают исключения возможности соединения как очень важные, они могут сохранить Вашу работу локально и синхронизировать ее позже. Другой приложения, такие как онлайн-игры будут рассматривать проблему связи как критическое исключение и выйдут, если соединение потеряется.

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

Относительно поведения приложения необходимо ли ответить себе по следующему вопросу "Мое приложение, имеет бизнес-возможность для клиента в разъединенном состоянии?" Во многих случаях для конечного пользователя было бы выгодно смочь к, продолжает их работу в разъединенном состоянии. Однако такое поведение чрезвычайно трудно для реализации.

Специально для Вашего сценария Microsoft разработала Разъединенный Блок приложений Агента службы

3
ответ дан 17 December 2019 в 00:17
поделиться

Я не коснулся WinForms и.NET уже много лет, таким образом, я не могу предоставить Вам техническую подробную информацию, но существует ответ изображения лагера:

Прежде всего - не связывают Ваши данные формы непосредственно с базой данных.

Создайте отдельный слой данных/модели, с которым Вы связываете свои виджеты формы.

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

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

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

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

2
ответ дан 17 December 2019 в 00:17
поделиться

Это может быть немного слишком много поддержки офлайнового сценария, но Вы рассмотрели "Microsoft Sync Framework"? Включенный в платформу "Sync Services для ADO.NET 2.0", который позволяет Вашему приложению поражать локальный SQL Server экземпляр CE. Это может легко синхронизироваться с центральным SQL Server через множество методов.

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

1
ответ дан 17 December 2019 в 00:17
поделиться

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

0
ответ дан 17 December 2019 в 00:17
поделиться

У нас есть это в нашем Main() метод, который захватывает все необработанные исключения...

Application.ThreadException += new 
System.Threading.ThreadExceptionEventHandler(UnhandledExceptionCatcher);

Thread.GetDomain().UnhandledException += new 
UnhandledExceptionEventHandler(Application_UnhandledException);

и затем Application_UnhandledException и UnhandledExceptionCatcher отобразите удобные для пользователя сообщения.

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

Это зависит от приложения, конечно, но для вида отказов, которые Вы описываете, я закрыл бы приложение.

1
ответ дан 17 December 2019 в 00:17
поделиться

Используйте что-то как SQLite, чтобы хранить данные офлайн, пока соединение не будет доступно.

Обновление: Я полагаю, что SQLite является бэкэндом для Google Gears, который от моего понимания делает то, что Вы ищете в веб-приложениях..., хотя я не знаю, может ли это использоваться в не веб-контексте.

0
ответ дан 17 December 2019 в 00:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: