Где поместить код в (в основном) безоконное приложение WPF?

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

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

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

Джеймс


person James McConnell    schedule 22.06.2009    source источник
comment
Дох. Надо было поискать. Нашел это сообщение (stackoverflow.com/questions/995195/) должен заставить его делать то, что мне нужно. Прости за это!   -  person James McConnell    schedule 23.06.2009
comment
Это хорошее начало, но есть еще кое-что, специфичное для WPF.   -  person rmoore    schedule 23.06.2009


Ответы (2)


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

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

person Mendelt    schedule 22.06.2009
comment
Да, я нашел другую ветку, о которой я прокомментировал выше, и я почти уверен, что смогу заставить ее работать с ней. В любом случае, отмечая это как ответ. :) - person James McConnell; 23.06.2009

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

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

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

person rmoore    schedule 22.06.2009