Android干净架构 - 何时创建新存储库?

时间:2017-05-17 00:51:36

标签: android clean-architecture

所以我有一个使用firebase登录和存储数据的应用程序,我们还使用了firebase数据库表。

该应用已登录google按钮,因此,如果验证了Google帐户,我会将该帐户传递给firebase以将其存储在数据库中。创建/获取帐户后,我还将用户配置文件存储在firebase数据库表中。所以我的问题是关于使用叔叔bob的干净架构方法的存储库。

我应该为Google登录创建一个存储库,然后创建一个用于个人资料的存储库吗?我的意思是,如果我们看看用例(交互者),应该有googleAPIInteractorfirebaseInteractor对吧?或者我应该创建 一个名为UserDataInteractor的交互者?你明白我的意思吗?我对应该创建多少个存储库感到困惑。我认为每个新的存储库都有自己的交互器,1:1对吗?

让我们来看看我想要实现的目标:

在演示者代码中(假设MVP架构)我会这样做:

public class MyPresenter extends PresenterBase {


@inject someGoogleAPIInteractor i1;
@inject somefirebaseInteractorInteractor i2;

//both these repo's are using firebase so should i just use 1  repo instead ?

//.....

public void doLogin(String googleAccount){

    i1.fetchOrCreateGoogleLogin(,googleAccount,someSubscriber);
    //RXJava async call, not important. but it confirms google account and then in subscriber authenticates into firebase account for my app

}

public void getProfile(String firebaseAccount) {

    //this just gets stuff about the user like order history, name , etc    
    i2.getFirebaseProfile(firebaseAccount,someOtherSubscriber);    

}
我在这里注入的互动者将使用他们自己的回购。一个叫

@inject someGoogleAPILoginRepository r1; //in i1
//and another in i2 called:
@inject someFirebaseProfileRepository r2;

i1连接谷歌API以验证谷歌帐户,然后我将在回调中使用i2来创建个人资料。

所以我现在正在做的是google API有一个repo而firebase有一个repo,我有两个独立的交互者,这是可以接受的吗?事情是谷歌回购,我不存储任何东西。我只是使用它,所以我有一个帐户登录到firebase。

1 个答案:

答案 0 :(得分:0)

清洁架构中提到的“存储库”是一种设计模式,而不是一种实现方式 它适用于数据层,可作为从所有来源(远程或本地)操纵应用程序数据的中心位置。
一个好的做法是在一个地方(模块或包)中有一个存储库及其助手类 有几个很好的例子,你可以看一看 1. Android10's sample
2. Ribot's guideline
3. Google sample