Подтвердить что ты не робот

Структура проекта для MVVM в WPF

Какова структура проекта, в результате которой вы используете MVVM в WPF?

Из учебников, которые я видел сейчас, у них обычно есть папки: Model, ModelView и Посмотреть.

В модели вы помещаете классы вроде Person, например, которые захватывают данные и логики.

В ModelView вы создаете классы, определенные в модели. Вид содержит .xaml.

Изменить: я редактирую свое оригинальное сообщение, чтобы отправить примерную структуру проекта. У меня есть вопрос, связанный с этим. Как это организовать? App.config App.xaml MainWindow.xaml

Должен ли я оставить их снаружи, как сейчас, или я должен поместить их в какую-то папку?

enter image description here

4b9b3361

Ответ 1

Вы описали обычную или общую папку. По опыту я предпочитаю добавлять отдельную папку (или проект в больших приложениях) для типа данных модели, например, типичный класс Person, о котором вы упомянули. Причина, по которой я это делаю, заключается в том, что это часто становится одним из самых больших проектов. Я также разделил его на следующие подпапки:

DataTypes
    Collections
    Enums
    Interfaces

У меня также есть отдельные папки (или проекты в больших приложениях) для классов приложений Converter, классов классов расширений, классов служебных (или служебных). Наконец, у меня есть тестовые проекты, которые в значительной степени соответствуют структуре папок приложения. В общем, это примерно то, что выглядят мои папки:

Solution

    Third Party Libraries <<< (Solution Folder)

    StartUp Project
        Images
        Resources

    Converters

    DataTypes
        Collections
        Enums
        Interfaces <<< (For Data Type classes)

    Extensions

    Models
        Data Controllers
        Data Providers
        Interfaces <<< (For swapping Model classes out in test projects)

    Utilities (Or Services)
        Interfaces <<< (For swapping Utilities classes out in test projects)

    View Models
        Commands

    Views
        Attached Properties
        Controls

ОБНОВЛЕНИЕ → >

Проекты, такие как папки, просто обеспечивают уровни разделения. Они также помогают мне отображать пространства имен приложений. Например, классы кода в папке/проекте Collections будут находиться в пространстве имен ApplicationName.DataTypes.Collections. Классы в папке/проекте Data Providers будут иметь пространство имен ApplicationName.Models.DataProviders.

Кроме того, в больших приложениях имена моих проектов берутся из их местоположения в этой иерархии... например, мой проект DataTypes на самом деле называется ApplicationName.DataTypes, а проект Models называется ApplicationName.Models. Части Collections и DataProviders являются папками вместе со всеми элементами, находящимися за вторым уровнем, например. Enums, Images, Commands и т.д.

Ответ 2

Большинство людей используют стандартную структуру, о которой вы говорили:

  • Модель /
    • CarModel.cs
    • DriverModel.cs
  • ViewModel/
    • CarViewModel.cs
    • DriverViewModel.cs
  • Вид /
    • CarView.xaml
    • DriverView.xaml

Я думаю, причина, по которой это популярно, состоит в том, что некоторые люди будут утверждать, что вы должны ставить Модели, ViewModels и Views в разные сборки.

Также с этой структурой вы можете легко добавлять папки для других продуктов WPF: Converters/, Resources/ и т.д.

В моей команде мы используем эту структуру, но мы дублируем имена (так что модели /ViewModels/Views ).

Однако большую часть времени классы моделей определяются в других сборках/пространствах имен; в этом случае у нас даже нет папки Models/.

Для больших проектов мы добавляем подпапки в Models/, ViewModels/ и Views/

Для полноты, стоит упомянуть, что вы можете найти несколько человек, использующих структуру, управляемую функцией:

  • Автомобиль /
    • CarModel.cs
    • CarViewModel.cs
    • CarView.xaml
  • Водитель /
    • DriverModel.cs
    • DriverViewModel.cs
    • DriverView.xaml

Но это очень необычно.

Ответ 3

Друзья, решение, которое я нашел для проблемы, похожее на это, - создать отдельный проект, тип WPF, я назвал Startup, только с App.xaml(и App.xaml.cs).

В нем я ссылаюсь на проект View и ViewModel. Таким образом, представление не имеет никакой зависимости, и ViewModel "видит" только вид и бизнес.

В App.xaml.cs объявляйте и создайте экземпляр моего MainWindow, затем загрузите некоторые основные свойства моего приложения и перейдите на страницу Login (я работаю с окном и просматриваю несколько страниц внутри них).

введите описание изображения здесь

Ответ 4

Что я обычно делаю так:

  • Основное приложение (.exe) - Глобальные стили и т.д.
  • Common Lib WPF - базовые классы и помощники для WPF
  • Common Lib General - базовые классы и помощники для моделей
  • Инфраструктура - Инъекция зависимостей, ведение журнала и т.д.
  • Интерфейсы для VM
  • Интерфейсы для M
  • Возможны также несколько библиотек, содержащих Views и соответствующие ViewModels.
  • Несколько библиотек, содержащих модели

Все зависимости основаны на интерфейсах, разрешенных только через DI.