Я фактически использую эту строку кода во всех моих сценариях, она работает хорошо и предотвращает ошибки.
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
исправит это и позволит избежать конфликтов с классами, которые могут реализовывать ваши «полустатические» функции.
Это одна из тех проблем, которые MVVM не решает самостоятельно. Одним из решений было бы использовать службу для запроса пользователя, а затем использовать эту службу в ViewModel.
В моем проекте мы используем PRISM , который помимо предоставления инфраструктуры служб также предоставляет другие инструменты для создания Разработка графического интерфейса проще.
Вот описание того, как службы работают в PRISM.
Так что конкретно в вашем случае я бы создал своего рода IOC, зарегистрировал в нем службу запросов, а затем на проходе ViewModel в IOC, а затем используйте IOC для получения службы запросов и используйте ее для запроса пользователя. Больше работы? Конечно. Но это означает, что вы можете заменить службу запросов другой реализацией для тестирования, просто заменив ее в IOC.
MVVM + Services = Ultimate Power!
Я не знаю, соответствует ли эта идея принципам MVVM, но ... я бы инкапсулировал диалог функциональность как услуга (ссылка на интерфейс). Реализация службы будет на уровне пользовательского интерфейса, но в целях тестирования вы просто "имитируете" интерфейс.
На самом деле это не "НЕ ВСЕ" относятся к логике приложения.
Похоже, у вас есть 2 разных "представления". Существует первый (данные, поступающие по сети) и второй (диалоговое окно подтверждения).
Модель должна определить, что новое представление необходимо отобразить, сигнализировать представлению о его отображении, а затем ответить к входным данным из этого представления.
Не пытайтесь сделать все за один шаг.