Как чисто получить ввод данных пользователем с середины метода модели в архитектуре Model-View-Viewmodel?

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

class B{
      private $a=1;
      private static $static=2;

      function semi_static_function(){//remember,don't declare it static
        if(isset($this) && $this instanceof B)
               return $this->a;
        else 
             return self::$static;
      }
}

Использование instanceof не является паранойей:

Если класс A вызывает класс B, статическая функция $this может существовать в области A; Я знаю, что это довольно запутано, но php делает это.

instanceof исправит это и позволит избежать конфликтов с классами, которые могут реализовывать ваши «полустатические» функции.

7
задан Tomáš Kafka 19 May 2009 в 20:22
поделиться

3 ответа

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

В моем проекте мы используем PRISM , который помимо предоставления инфраструктуры служб также предоставляет другие инструменты для создания Разработка графического интерфейса проще.

Вот описание того, как службы работают в PRISM.

Так что конкретно в вашем случае я бы создал своего рода IOC, зарегистрировал в нем службу запросов, а затем на проходе ViewModel в IOC, а затем используйте IOC для получения службы запросов и используйте ее для запроса пользователя. Больше работы? Конечно. Но это означает, что вы можете заменить службу запросов другой реализацией для тестирования, просто заменив ее в IOC.

MVVM + Services = Ultimate Power!

4
ответ дан 7 December 2019 в 12:24
поделиться

Я не знаю, соответствует ли эта идея принципам MVVM, но ... я бы инкапсулировал диалог функциональность как услуга (ссылка на интерфейс). Реализация службы будет на уровне пользовательского интерфейса, но в целях тестирования вы просто "имитируете" интерфейс.

1
ответ дан 7 December 2019 в 12:24
поделиться

На самом деле это не "НЕ ВСЕ" относятся к логике приложения.

Похоже, у вас есть 2 разных "представления". Существует первый (данные, поступающие по сети) и второй (диалоговое окно подтверждения).

Модель должна определить, что новое представление необходимо отобразить, сигнализировать представлению о его отображении, а затем ответить к входным данным из этого представления.

Не пытайтесь сделать все за один шаг.

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

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