Вопрос дизайна приложений Blackberry - Singletons - PullRequest
0 голосов
/ 02 февраля 2011

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

Мое приложение сначала требует, чтобы пользователь вошел в систему. (Uid, pass) отправляются веб-сервису, который определяет, является ли логин действительным, и возвращает некоторые дополнительные данные. В моем приложении есть модельный объект, который выглядит примерно так - (после успешного вызова логина)

class UserDataModel
{
    private String username;
    private String password;
    private String fullName;
    private String age;
    ... 
    /* Getters and Setters */


}

У меня также есть UserPreferencesModel, который содержит все настройки, сохраненные пользователем. (Мне нужно сохранить их в нашей базе данных / восстановить на разных устройствах и т. Д.)

Кроме того, в каком контексте глобалы обычно используются в контексте мобильной разработки?

Спасибо,
Тея.

Ответы [ 3 ]

2 голосов
/ 19 июля 2012

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

public class myData
{
long ID = 0xf46f5a7867d69ff0L;
String d1;
RuntimeStore runTS = RuntimeStore.getRuntimeStore();

public void setData(String _d1)
{
    try
    {
        syncronized (runTS)
        {
            runTS.put(ID, _d1);
        }
    }catch(Exception ex){}

}

public String getData()
{
    String s;
    try
    {
        s = (String)(RuntimeStore.getRuntimeStore().get(ID));   
    }catch(Exception ex){}
    return s;
}
}
1 голос
/ 04 февраля 2011

В BlackBerry нет ничего особенного в использовании синглетонов.Конечно, истинные константы должны быть просто статическими.И все они должны быть окончательными, кроме Strings: есть штраф за использование памяти, если static final String часто используется в вашем коде.

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

class UserDataModel
{
    private static UserDataModel singleton;

    public static void login() { 
      //get credentials
      //authenticate
      singleton = new UserDataModel(... user profile data...);
    }

    public static UserDataModel getInstance() { return singleton; }

    private String username;
    private String password;
    private String fullName;
    private String age;
    ... 
    /* Getters and Setters */


} 

Этот способ является правильным, немного упрощенным примером.Если что-то меняется (скажем, хост сервера), все, что вам нужно сделать, это заменить синглтон.Кроме того, это открывает возможность использовать полиморфизм, если реализация UserDataModel различна для разных серверов и т. Д. Это дает много преимуществ за счет одной дополнительной переменной в цепочке методов доступа.Опять же, здесь нет ничего особенного в BlackBerry, это обоснование справедливо для любого Java-приложения.

Почему пример упрощен, потому что вам нужно подумать о потоках.Если есть хоть какой-то отдаленный шанс, что что-то где-то получит доступ к getInstance () в другом потоке, чем login (), вы должны правильно синхронизировать их (даже если мне никогда не удавалось разорвать простую ссылку на объект, открыв / обновив его из разныхтемы на BlackBerry).

0 голосов
/ 03 февраля 2011

это некоторые сценарии, когда иметь статическую переменную - хорошая идея. как для полей константных строк.

вот ссылка на официальный документ Blackberry Best Practice для написания эффективного кода для платформы blackberry.

Black Berry: лучшие практики: написание эффективного кода

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