Перенос веб-приложения .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
В MVVM, с другой стороны, ViewModel занимает место контроллера. Представление запрашивает действие у ViewModel. Затем ViewModel выполняет запрошенное действие (получение данных из модели) и сохраняет данные внутри себя, вызывая INotifyProperty. View имеет прослушиватель для PropertyChanged, и когда он получает уведомление о событии от ViewModel, он запрашивает обновленные данные из ViewModel.
Таким образом, хотя обе инфраструктуры (могут) использовать нечто, называемое ViewModel, они работают ОЧЕНЬ по-разному и не могут использоваться в разных базах кода. В приведенном выше сценарии будет использоваться только общий код от HostService (модели) вниз. Ни один код из PVS.Display нельзя будет повторно использовать в моем проекте Xamarin.