0

Как описано в заголовке, я хочу создать приложение Xamarin Forms, которое связывается с веб-сервером. Конечно, на стороне клиента я использую шаблон MMVM.Архитектура приложения Xamarin, общающегося с веб-сервером

Здесь мой вопрос: а как насчет связи с сервером? С моей точки зрения, сервер ничего не знает о конкретной клиентской технологии (INotifyPropertyChanged, например), поэтому в этом слое мне еще нужно применить шаблон MVC для связи, не так ли?

Что стоит мне спать на таком подходе является то, что мне нужно, чтобы преобразовать объекты необходимо 2 раза в каждом направлении: Entity <--> MVC-Model (Dto) <--> MVVM-ViewModel

Правильно ли я с моим предположением или полностью вне трассы?

+1

Да. Я думаю, вы захотите, чтобы объект DTO обменивался данными между системами и преобразовывал их в свои собственные рамки. – kenny

+1

DTO является частью M (odel) как в шаблонах MVVM, так и в MVC. INotifyPropertyChanged является частью ViewModel в MVVM. Несмотря на то, что вам потребуется написать код для обертывания DTO (ов) внутри виртуальной машины, время (более или менее) сохраняется меньше кода контроллера. С помощью форм вам не нужен контроллер и вы можете пропустить виртуальную машину и просто использовать View (XF View) в качестве замены VM, но тогда вы не сможете повторно использовать код на платформах, на которых нет поддержки форм. Если вы решите написать полную виртуальную машину, тогда ее можно легко использовать в другом месте (например, WPF, Razor). – SKall

ответ

1

Одним из способов достижения этого является создание WebAPI, который вы затем вызываете из своей модели представления в своем общем проекте Xamarin Forms.

public class CommunicationService<T> where T : class 
{ 
    public CommunicationService() 
    { 
    } 

    public async Task<T> GetRequestAsync (string url) 
    { 
     var client = new System.Net.Http.HttpClient(); 
     var response = await client.GetAsync (url); 
     var responseResult = response.Content.ReadAsStringAsync().Result; 
     var result = JsonConvert.DeserializeObject<T> (responseResult); 
     return result; 
    } 
} 

С моей точки зрения модели, которую я затем вызвать мою функцию, используя код ниже:

var communicationService = new CommunicationService<List<MyDtoModel>>();  
var items = await communicationService.GetRequestAsync (@"http://myurl.com/api/controller/action"); 

Затем вы можете использовать AutoMapper для отображения результата в вашей модели представления, или, конечно, использовать DTO напрямую , даже если это не лучшая практика для шаблона MVVM.

Смежные вопросы