Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поделитесь опытом, Архитектура приложения 
:(
    Опции темы
hamsterKSU
Дата 17.10.2007, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 401
Регистрация: 20.10.2006
Где: Украина, Херсон

Репутация: 7
Всего: 11



вот возник вопрос у меня. 
как правильно сделать архитектуру приложения. ведь ресурсы очень ограничены.

я организовываю приложение следующим образом:
в классе наследнике Midlet запускаю главный поток - в котором цикл типа:
Код

public void run() {
        // load app settings from config.
        Settings.init();
        DataPersistenceManager.init();
        // get minimum amount of res needed to start the main.
        Main.start();
        while (isRunning) {
            if (isPaused) {
                try {
                    Thread.sleep(500);
                } catch (Exception e) {}
                ;
                continue;
            }
            curTime = System.currentTimeMillis();
            Main.tick();
            repaintScreen();
            long timeDiff = System.currentTimeMillis() - curTime;
            if (timeDiff < Settings.MIN_TIME_DELAY) {
                try {
                    Thread.sleep(Settings.MIN_TIME_DELAY - timeDiff);
                } catch (Exception e) {
                }
            } else {
                Thread.yield();
            }

        }
        destroyApp(false);
    }



имеется класс Main в котором выполняется вся логика - посредством флагов,
тобиш имеется такая некрасивая функция которая, в приведенном выше коде, вызывается в цикле
Код

public static void tick() {
        // System.out.println("Main.tick()");
        switch (mode) {

        case MODE_LOGOS:

            break;

        case MODE_SPLASH:
            break;

        case MODE_INIT:
            init();
            break;

        case MODE_MENU_MAIN:
            setMode(MODE_NONE, ScreenFactory.getMainScreen());
            System.gc();
            break;
                        case MODE_TYPES:
            loadTypes();
            break;

..........................................................
}

public static void loadTypes() {
        switch (loadStatus) {
        case LOAD_NONE:
            setLoadStatus(LOAD_STARTED);
            DataPersistenceManager.loadGenres();
            break;
        case LOAD_COMPLETE:
            setLoadStatus(LOAD_NONE);
            setMode(MODE_NONE, ScreenFactory.getGenresScreen());
            break;
        }
    }



и соответсвеенно DataPersistenceManager знает где взять данные
а ScreenFactory знает как создать нужное представление
в этих класса практически все методы статические

и еще есть NetCommunicator - для работы с сетью. там тоже один постоянный поток и очередь запросов. 
поток wait-тится если очередь пуста

и все это происходит асинхронно

Обработка событий от пользователя(выбор пункта меню, нажатие на кнопку):
в обработчике просто ставится нужный влаг в классе Main, а он потом сам все выполняет

а теперь вопрос нормальный ли это подход? 
пожалуйста расскажите о своих подходах к построению архитектуры приложения

PM MAIL ICQ   Вверх
W0LF
Дата 17.10.2007, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



Архитектура зависит :
1. Смотря что тебе надо - быстродействие или гибкость. они оба противоположны.
2. Телефоны сейчас стали немного посильнее чем были.
В бизнес-приложениях я использовал следующую логику. Я уже где-то описывал это.
Вот рисунок прикреплю. Там диаграмма, это я так когда-то делал.
Там показан Логин.
Делается LoginThread и у него в run() определяется все тело рисунка, правда там немного недорисовано, времени нет. в конечном результате все сохраняется в модель, а след. скрин берет все из модели и показывает на экран

Присоединённый файл ( Кол-во скачиваний: 18 )
Присоединённый файл  SequenceDiagramLogin.JPG 55,17 Kb


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
hamsterKSU
Дата 17.10.2007, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 401
Регистрация: 20.10.2006
Где: Украина, Херсон

Репутация: 7
Всего: 11



я тут просто пообщался с человеком он мне сказал следующее:
1. потоки каждый раз порождать не недо - лучше иметь один постоянно крутящийся(конечно ему делать wait или sleep)
2. указатель на  формочку(канву) с lazy инициализацией и не килить если она еше тебе пригодится

но это помойму все идет в плане быстродействия
PM MAIL ICQ   Вверх
W0LF
Дата 19.10.2007, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



Цитата(hamsterKSU @  17.10.2007,  15:02 Найти цитируемый пост)
но это помойму все идет в плане быстродействия 

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


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
hamsterKSU
Дата 19.10.2007, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 401
Регистрация: 20.10.2006
Где: Украина, Херсон

Репутация: 7
Всего: 11



ну дык вот вывод какой?
для современных телефонов и для написания ПО(не игр) можно создавать новые потоки, а не держать один?
PM MAIL ICQ   Вверх
W0LF
Дата 19.10.2007, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



Да, но если у тебя будет одновременно много потоков - то получится переполнение. Вот винды например больше 10000 потоков держать не могут, моя нокия 3250 ложилась при 20 запущеных. просто если ты знаешь, что у тебя одновременно могу проскочить много потоков(вот у меня наприме пока логин не пройдет, я ни один другой вызвать не смогу), то желательно завести пул потоков и проверять, чтоб не посыпалось ничего. Но обычно такого быть не должно. Я по крайней мере с таким не сталкивался, а телефон ложил свой, чтоб просто проверить. Одновременно запущенных потоков наверно лучше иметь не больше 3-4, включая основной поток приложения


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
hamsterKSU
Дата 19.10.2007, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 401
Регистрация: 20.10.2006
Где: Украина, Херсон

Репутация: 7
Всего: 11



понятно, большое спасибо. 
т.е. так и остается что 1) один главный поток. 2) это поток работы с сетью 3-4) чета там по мелочам
PM MAIL ICQ   Вверх
W0LF
Дата 22.10.2007, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



Ну примерно smile
у меня было - 
1 - главный поток
2 - сетевой
3 - обновление окна лоадинга


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0476 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.