Концепция моделей и ViewModels в программировании - PullRequest
0 голосов
/ 21 июня 2020

Сегодня я реорганизовал свой проект на компоненты. Например, у меня есть GeometryComponent, в котором находятся классы для линий и прямоугольников (я создал свой собственный). А теперь я запуталась. Должна ли линия (если она содержит точки типа double) находиться в моделях или в моделях просмотра?

Я заметил, что некоторым визуализациям не требуется выделенная модель просмотра для отображения удержаний модели данных. Это означает, что такие классы, как Line или Rectangle, принадлежат как к моделям, так и к группе ViewModels (потому что они хранят данные и потому что они используются для визуализации). Когда он принадлежит обоим, где я должен его разместить?

Также кажется, что по умолчанию разработчики склонны создавать модели, и если они не могут быть отображены, они создают ViewModel и Converter. Но что, если Модель может отображаться только частично? Например, есть класс под названием Person; у него есть имя и возраст. Допустим, мы хотим отображать возраст человека как ProgressBar, но имя должно отображаться в виде строки. Сначала нам нужно преобразовать Age в полосу (если мы хотим где-то ее сохранить), нам понадобится ViewModel - Person. У него будет точно такое же поле под названием Name, что и у Model Person. Кажется странным иметь все эти дубликаты.

Также нормально, если ViewModel содержит поля как Models, так и ViewModels? Я не вижу в этом проблемы, однако я не уверен, что мне здесь чего-то не хватает.

И, наконец, я понял, что Модель можно визуализировать по-разному, поэтому у нас могут быть разные ViewModels связанные с этой моделью. Какой была бы хорошая структура каталогов и пространств имен для нескольких ViewModels? Обычно это примерно так (для моделей): Vendor / Module / Models / Person. А для ViewModels можно создать Vendor / Module / ViewModels / Person. Как бы вы создали еще одного человека ViewModel? Рефакторинг типа Vendor / Module / ViewModels / ProgressBar / Person - хорошее решение? Я подозреваю, что он может укусить при определенных c обстоятельствах.

Как вы, ребята, структурируете Модели и ViewModels в своих проектах?

...