Android: как лучше всего передавать данные в представление? - PullRequest
4 голосов
/ 06 февраля 2011

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

Прямо сейчас я вызываю сеттер для этого:

((GameView) findViewById(R.id.game)).setLevels(loadLevels());

Однако мне не нравится тот факт, что представление будет нефункциональным, если я забуду вызвать сеттер.Есть ли лучший способ пройти уровни в?

Ответы [ 3 ]

2 голосов
/ 06 февраля 2011

Это также вопрос предпочтений.Теоретически, проходить уровни так, как вы делаете, совершенно нормально.В качестве альтернативы, если вам нужно больше, чем просто установить уровни, но обеспечить дополнительные функциональные возможности (то есть также сохранение уровней), я обычно использую отдельный класс, отвечающий за обработку таких вещей (например, Repository, некоторый класс "Manager" и т. Д.).Этот класс затем передается в View конструктора, предпочтительно, если его нужно предоставить.Конечно, чтобы разделить вещи, я использую интерфейсы, а не конкретные реализации, тогда это может выглядеть следующим образом:

public class MyView {

   public MyView(ILevelLoader levelLoader){
      this.levelLoader = levelLoader;
   }

   ...
}

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

Только для вашего интереса, вы также можете взглянуть на контейнеры IoC и внедрение зависимостей. Guice , предоставленный Google, - это хороший фреймворк, который я уже использовал на Android.

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

Сделать ваш взгляд абстрактным классом с абстрактным методом getLevels()? Таким образом, когда вы создаете экземпляр класса, если вы забыли пройти уровни в вашем коде, он не скомпилируется.

Лучше или нет, это вопрос вкуса, я думаю:)

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

Я надеюсь, что не упустил момент, но здесь идет речь: обычно у вас есть либо функция, задающая что-то (например, текст для просмотра текста), либо атрибут, который вы задали в xml.

ВзятьПосмотрите на этот ответ, который я получил на вопрос: Как разместить «сетку» изображений в центре экрана

Есть некоторые вещи, которые нужны пользовательскому представлению, но позволяетВозьмем пример: 'numColumns'.

  • вы можете установить его, используя setNumColumns (это будет эквивалентно вашему loadLevels ()?)
  • вы можете проигнорировать его, этовернемся к значению по умолчанию.
  • вы можете установить его как атрибут lik так: app:numColumns="3"

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

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