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

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

enter image description here

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

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

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

Отображение: внешний код MVC, который содержит ViewModels, Views, Controllers и т. Д. И ссылки на DataModel и HostService

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

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

Itотметил, что эти элементы были несовместимы с .Net Standard: enter image description here

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

1 Ответ

0 голосов
/ 30 сентября 2019

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

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

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

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

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

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

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

...