我应该在我的MVVM移动应用程序中放置身份验证逻辑?

时间:2015-02-11 20:54:40

标签: mvvm xamarin xamarin.forms

所以我目前正在使用Xamarin.Forms开发一个应用程序。 Xamarin Forms使用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通信吗?比方说,在代码隐藏的构造函数中,我直接调用我的DataAcess帮助程序进行身份验证,然后如果可以,我继续使用ViewModel的方法来获取数据并填充我的组件?或者我是否应该在视图用于验证的ViewModel中放置一个方法?

即。这样:

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-object。这个对象包含用于与DAL通信的包装器方法,以及诸如持久化/获取在身份验证请求中使用的用户凭据之类的东西?

思想?

2 个答案:

答案 0 :(得分:1)

这不是一个事实答案,而是更多关于使用MVVM的应用程序架构的意见,但这里有:

首先,它反对MVVM让View直接与任何不纯粹与UI相关的东西进行对话。没有应用程序逻辑,没有后端调用,nada。

我会建议健康剂量的分离关注点;有一个登录View / ViewModel来处理收集和验证凭据的过程,成功验证的结果将导航到您尝试访问的视图。如果您需要为后端服务提供令牌或其他对象,请将其提供给ViewModel的构造函数(理想情况下使用带有ViewModelLocator的IoC容器),然后它会将其提供给任何内容它为模型数据提供咨询的后端服务。

答案 1 :(得分:1)

绝对选项A.始终让您的VM通过命令/方法与您的服务/存储库进行通信。实际上,您应该将您的AuthenticationService注入ViewModel,但这是另一个主题。