2015-02-11 78 views
0

所以我目前正在用Xamarin.Forms开发一个应用程序。 Xamarin Forms使用MVVM模式,我觉得使用这种模式有点舒服,但是我确实有一些问题。为了简单起见,我将使用一个单页面应用程序的例子。这是我到目前为止已经构建它:我应该在哪里将验证逻辑放入我的MVVM移动应用程序中?

MainView.xaml //View 
MainView.xaml.cs //Code behind 
MainViewModel.cs //ViewModel 
DataAccessHelper //DAL layer helping me communicate with a REST-API & DB 
Models 
Other util classes 

所以对于喜欢在哪里放置逻辑用于填充与来自REST的API数据视图中使用的藏品东西;这很清楚。我为此使用ViewModel,ViewModel与我的DataAccessHelper进行通信来完成任务。虽然ViewModel应该包含表示逻辑,但这很自然。但是,如何认证?这不是以任何方式与屏幕上显示的数据相关。但显然,这是在我能够做任何其他请求之前必须完成的必要步骤。

所以这是我的问题:

应该认为我DataAccessHelper直接沟通?比方说,在代码隐藏的构造函数中,我直接调用DataAccess帮助器进行身份验证,然后如果没有问题,我继续使用ViewModel的方法来获取数据并填充我的组件?或者我也应该在ViewModel中放置一个视图用于验证的方法?

I.e.这样的:

public partial class MainPage 
{ 

    private MainPageViewModel ViewModel 
    { 
     get { return BindingContext as MainPageViewModel; } 
    } 

    public MainPage() 
    {  
     ViewModel.Authenticate(); 
     ViewModel.LoadCountries(); 
     ViewModel.LoadCities(); 

     InitializeComponent(); 
    } 
} 

对战这样的:

public partial class MainPage 
{ 

    private MainPageViewModel ViewModel 
    { 
     get { return BindingContext as MainPageViewModel; } 
    } 

    public MainPage() 
    {  
     var dataAccessHelper = new DataAcessHelper(); 
     dataAccessHelper.Authenticate(); 
     ViewModel.LoadCountries(); 
     ViewModel.LoadCities(); 

     InitializeComponent(); 
    } 
} 

或者都不是?这里最好的做法是什么?甚至可能创建一个可以使用的Authentication对象。这个对象将包含用于与DAL进行通信的包装器方法,以及诸如持久化/获取用于认证请求中的用户凭证之类的东西?

想法?

回答

1

确定选项A.始终让VM通过命令/方法与您的服务/存储库通信。其实,你应该注入你的ViewService到你的ViewModel,但那是另一个主题。

+0

这就是我最终做的。我在“根”上创建了所有服务的新实例,并将它们从需要的位置注入到需要的位置。我也结束了与选项A.所以我想它会变好:) – Ajaco 2015-02-16 13:43:18

1

这是少一个事实的答案,更使用MVVM上的应用程序架构的意见,但这里有云:

首先,它违背了MVVM有视图直接交谈什么,这不是纯粹的UI相关。没有应用程序逻辑,没有后端调用,虚无n。。

我反而会推荐健康剂量的分离问题;有一个登录View/ViewModel来处理收集和验证凭证的过程,并且成功验证的结果将导航到您想要访问的视图。如果有一个令牌或其他对象需要提供给后端服务,请将其提供给ViewModel的构造函数(理想情况下使用IoC容器加上ViewModelLocator),然后将它转发给它所咨询的任何后端服务模型数据。

相关问题