вторник, 24 апреля 2012 г.

8. Снова планирование

Прежде чем продолжать увлеченно кодить наше приложение , хорошо-бы понять что мы хотим получить на выходе.

8. Снова планирование


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

1. Запуск Activity (onCreate)
   1.1 Загрузить не закрытую сессию
       a) long sessionId
       b) int profileId
       c) int puzzleId
       d) long positionId
       e) int localeId
   1.2 Если сессия не найдена
       1.2.1 Загрузить профиль по умолчанию
             a) int profileId
             b) int puzzleId
             c) int localeId
       1.2.2 Получить идентификатор начальной позиции для puzzleId
             a) long positionId
       1.2.3 Создать сессию, сохранив текущие параметры
             a) long sessionId
   1.3 Загрузить позицию positionId для головоломки puzzleId
       1.3.1 Загрузить параметры головоломки
             a) Размер игрового поля по вертикали
             b) Размер игрового поля по горизонтали
       1.3.2 Загрузить параметры Item-ов
             a) long itemId
             b) long tagId (принадлежность к Tag-у)
             c) int x (координата по горизонтали)
             d) int x (координата по вертикали)
       1.3.3 Загрузить финальные позиции
             1.3.3.1 Загрузить item-ы каждой финальной позиции для puzzleId
2. Приостановка Activity (onPause)
   2.1 Создать новую позицию
       a) long newPositionId
   2.2 Сохранить координаты всех Item-ов в newPositionId
   2.3 Сохранить newPositionId в текущей сессии sessionId
   2.4 Если старая позиция positionId не связана с puzzleId, удалить ее
       2.4.1 Удалить все Item-ы, связанные с positionId
       2.4.2 Удалить positionId
3. Запуск новой игры (меню)
   3.1 Получить параметры новой игры
       a) newPuzzleId
       b) newPositionId (стартовая позиция)
   3.2 Сохранение параметров, полученных в 3.1
       3.2.1 Сохранить значение newPuzzleId в профиле
       3.2.2 Сохранить значение newPositionId в sessionId
   3.3 Если positionId не связана с какой либо puzzleId, удалить ее (аналогично п.2.4)
   3.4 Загрузить головоломку (аналогично п.1.3)
   3.5 Отобразить экран подсказки
4. Завершение игры (достижение финальной позиции)
   4.1 Сохранить текущую позицию (аналогично п.2)
   4.2 Пометить сессию как закрытую
   4.3 Загрузить список рекордов, выделив текущую сессию
   4.4 Получить начальную позицию для текущей puzzleId
       a) positionId
   4.5 Загрузить головоломку (аналогично п.1.3)
5. Изменение пользовательского профиля (меню)
   3.1 Получить новые параметры
       a) localeId
   3.2 Сохранить новое значение localeId в профиле
   3.3 Перестроить меню

Этот алгоритм описывается "сверху-вниз", то есть сначала составляется список пунктов верхнего уровня, детализируемых впоследствии, по мере необходимости. Перепроверив логику работы алгоритма, приступаем к составлению списка задач:

1. Critical
2. High
   2.1 Создать меню (с поддержкой локализации и возможностью перестроения)
   2.2 Реализовать окно подсказки
   2.3 Реализовать таблицу рекордов
3. Normal
   3.1  Загрузить параметры профиля
   3.2  Загрузить параметры открытой сессии
   3.3  Получить начальную positionId из puzzleId
   3.4  Получить параметры для puzzleId
   3.5  Получить список Item-ов для positionId
   3.6  Получить список финальных positionId для puzzleId
   3.7  Реализовать логику создания сессии
   3.8  Реализовать логику сохранения текущей позиции (п.2)
   3.9  Реализовать логику сохранения параметров сессии
   3.10 Реализовать логику сохранения параметров профиля
   3.11 Реализовать закрытие сессии
4. Low

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

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

Комментариев нет:

Отправить комментарий