Как мне создавать несколько экземпляров View, все с очень похожими ViewModels, используя Prism и Unity - PullRequest
0 голосов
/ 05 июня 2018

Я использую XamarinForms и Prism для MVVM с Unity в качестве моего контейнера IoC.

Я выполняю рефакторинг тонны дубликатов кода View и ViewModel, над которыми работал предыдущий сотрудник.То, что они сделали, по сути вырезали и вставляли чрезвычайно сложные View и ViewModel.Мне нужно было что-то изменить в них, и мне пришлось делать это 5 раз из-за этого кода спагетти.По сути, это то, как выглядит представление:

enter image description here

5 экземпляров этих CardViews и их различные Viewmodels имеют основной заголовок, 3 метки и 3 значениякоторые идут с ярлыками.Значения извлекаются с использованием различных повторных вызовов (все используют различные параметры для их извлечения и обработки результатов вызовов тоже).

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

Что особенно усложняет мою проблему, так это то, что эти 5 различных представлений разделены между модулями Prism (т.е. проектами .NET).Я понимаю необходимость в них, но они, кажется, только добавляют к проблеме дублирующего кода, который в основном делает то же самое.Может быть, они должны содержать логику для спокойных вызовов и обработки?Но как это согласуется с моей проблемой ассоциации ViewModel / View сверху?

Я буду продолжать исследовать лучший способ сделать это, но я просто хотел знать, сможет ли кто-нибудь направить меня в направлении лучшей практики?

1 Ответ

0 голосов
/ 05 июня 2018

Если у вас есть пять видов, которые выглядят одинаково, и пять моделей, которые делают (почти) одно и то же, отбросьте четыре из них.Чтобы учесть различия в производительности моделей представления, создайте службы.

BookService может реализовать GetTitles, запросив службу отдыха для названий книг, в то время как DvdService запрашивает другую службу отдыха для названий DVD.Оба они реализуют ITitleService.Затем UnifiedViewModel специализируется на книгах, передавая ему BookService (предпочтительно через инжектор конструктора), и, таким образом, он делает именно то, что BookViewModel делал раньше.Сейчас у вас есть одна модель представления и пять сервисов, тогда как раньше у вас было пять моделей представления.

...