Перенос веб-приложения .Net Core (2.2) на стандарт .Net (2.1) для использования в проекте Xamarin

Недавно я создал веб-проект MVC в.Net Core, для которого теперь хочу создать интерфейс для Android и iOS. Я понимаю различия между.Net Standard и.Net Core, но у меня проблема с определением того, что должно быть в каком проекте. Сначала опишу текущее решение:

DataModel: как и следовало ожидать, DataModel содержит все мои базовые модели и DTO. На него ссылаются все другие проекты.

DataAccess: выполняет все операции хранения / сбора данных (репозитории) и ссылается только на DataModel

HostService: служба RESTful, которая обслуживает данные и ссылается на DataModel и DataAccess.

Отображение: код MVC переднего плана, который содержит модели представления, представления, контроллеры и т. Д. И ссылается на DataModel и HostService.

Насколько я понимаю, некоторые части проекта Display действительно должны быть в проекте.Net Standard, чтобы повторно использовать их в проекте Xamarin, ориентированном на Adroid и iOS, но я немного не понимаю, какие части следует переместить в новый.Net Стандартный проект. Очевидно, что представления должны оставаться в проекте Display, поскольку они содержат код Razor, специфичный для веб-интерфейса. Мне кажется, что единственные вещи, которые нужно переместить в новый проект, - это модели представления и контроллеры (а также все, на что они ссылаются)? Звучит правильно, или я слишком упрощаю? Я что-то упускаю или есть какие-то ошибки, о которых мне следует знать?

FWIW, я запустил анализатор переносимости.Net и получил следующие результаты:

Он отметил, что эти элементы несовместимы со стандартом.Net:

Как определить, где возникают эти конфликты, чтобы разрешить их? Я искал целевые члены (IE. Microsoft.AspNetCore.Razor.Hosting.RazorConfigurationNameAttribute) в проекте Display, но не нашел совпадений, поэтому не знаю, как их исправить. Приветствуются любые указатели!

1 ответ

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

Простой ответ: вы не можете.

Длинный ответ:

Мой веб-код написан с использованием MVC (Model-View-Controller), тогда как Xamarin использует MVVM (Model-View-View Model). Две инфраструктуры несовместимы. У них обоих общая модель, но на этом сходство заканчивается.

В MVC представление запрашивает действие у контроллера. Затем контроллер извлекает данные из модели, создавая любые необходимые структуры данных, необходимые для составления представления, а затем возвращает представление, которое использует структуры данных для отображения представления. Структуры данных могут быть либо отдельным элементом, например List, либо ViewModel, который содержит множество полей List Employees, int CurrentEmployeeID, string CurrentEmployeeName и т. Д. Эта ViewModel является просто временным устройством хранения, используемым для передачи данных между контроллер и представление и не содержит бизнес-логики.

В MVVM, с другой стороны, ViewModel занимает место контроллера. Представление запрашивает действие у ViewModel. Затем ViewModel выполняет запрошенное действие (получение данных из модели) и сохраняет данные внутри себя, вызывая INotifyProperty. View имеет прослушиватель для PropertyChanged, и когда он получает уведомление о событии от ViewModel, он запрашивает обновленные данные из ViewModel.

Таким образом, хотя обе инфраструктуры (могут) использовать нечто, называемое ViewModel, они работают ОЧЕНЬ по-разному и не могут использоваться в разных базах кода. В приведенном выше сценарии будет использоваться только общий код от HostService (модели) вниз. Ни один код из PVS.Display нельзя будет повторно использовать в моем проекте Xamarin.

Другие вопросы по тегам