Куда поместить код в (в первую очередь) безоконное приложение WPF?

StackOverflow https://stackoverflow.com/questions/1029131

  •  06-07-2019
  •  | 
  •  

Вопрос

Итак, я планирую написать приложение, которое в значительной степени является приложением без окон.Будут окна для взаимодействия с пользователем, но только по запросу пользователя.В противном случае приложение находится в системном трее и запускает таймер, выполняя некоторую логику примерно каждую минуту.Мой вопрос заключается в следующем:Насколько я могу судить, я бы поместил всю связанную логику в App.xaml.cs (запуск таймера, выполнение логики с каждым интервалом), но по какой-то причине это кажется мне неправильным.

У приложения будет значок в системном трее, с которым пользователи смогут взаимодействовать для получения подробной информации, настройки параметров и т.д., Но в остальном приложение просто сидит там и делает то, что оно делает.Уместно ли помещать весь код в code-behind для класса App.xaml?Я не знаю почему, но мне кажется, что я не должен, и должно быть где-то еще, но я действительно ничего не могу придумать.

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

Джеймс

Это было полезно?

Решение

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

То же самое относится и к приложениям, которые большую часть времени не отображают пользовательский интерфейс.Большинство действий будет инициироваться из App.xaml.cs, но это не означает, что весь код должен находиться там.Вы можете инкапсулировать таймеры в их собственные классы, которые могут запускать другой код для выполнения работы, например.Разделите свой код по линиям ответственности, класс window выполняет работу с пользовательским интерфейсом, логика домена переходит в другие файлы и т.д.Это позволит вам создавать более удобные в обслуживании приложения.

Другие советы

Похоже, что коду там не место, и в лучшем случае это просто вызов для запуска таймеров.Что действительно звучит как идеально подходящее для ваших проблем, так это М-В-ВМ (Модель - Вид - ViewModel) шаблон.Как вы отметили, это также будет "ощущаться" более корректно, чем привязка логики к вашему коду.Используя MVVM, вы можете разделить свой разреженный пользовательский интерфейс на представление, и ваш код может существовать отдельно в модели и ViewModel.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top