0

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

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

我应该为谷歌登录创建一个存储库,然后为个人资料创建一个存储库吗?我的意思是,如果我们看一下用例(交互器),应该有 agoogleAPIInteractor和 afirebaseInteractor吗?或者我应该只创建一个名为的交互器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 连接到 google API 以验证 google 帐户,然后我将在回调中使用 i2 来创建配置文件。

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

4

1 回答 1

0

Clean Architecture 中提到的“存储库”是一种设计模式,而不是一种实现。
它应用于数据层,并作为一个中心位置来处理来自所有来源(远程或本地)的应用程序数据。
一个好的做法是在一个地方(模块或包)有一个存储库及其帮助程序类。
有几个很好的例子,你可以看看。
1. Android10 的样例
2. Ribot 的指南
3. Google 样例

于 2017-05-17T02:14:05.273 回答