Android 干净的架构 - 何时创建新的存储库?
Android clean architecture - when to create a new repository?
所以我有一个使用 firebase 登录和存储数据的应用程序,我们还使用 firebase 数据库 table。
该应用程序有一个带有 google 按钮的登录所以,如果 google 帐户被验证,我将该帐户传递给 firebase 以将其存储在数据库中。在帐户 created/fetched 之后,我也将用户配置文件存储在 firebase 数据库 table 中。所以我的问题是关于使用 bob 叔叔的干净架构方法的存储库。
我应该为 google 登录创建一个存储库,然后为配置文件创建一个存储库吗?我的意思是,如果我们看一下用例(交互器),应该有一个 googleAPIInteractor
和一个 firebaseInteractor
对吗?或者我应该创建
一个名为 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,我有两个独立的交互器,acceptable 是吗?事情是为了 google 回购,我没有存储任何东西。我只是在使用它,所以我有一个帐户可以用来登录 firebase。
'Repository'在Clean Architecture中提到是一种设计模式而不是实现。
它适用于数据层,并作为一个中心位置来处理来自所有来源(远程或本地)的应用程序数据。
一个好的做法是你在一个地方(一个模块或包)有一个存储库和它的助手class。
那里有几个很好的例子,你可以看看。
1. Android10's sample
2. Ribot's guideline
3.Google sample
所以我有一个使用 firebase 登录和存储数据的应用程序,我们还使用 firebase 数据库 table。
该应用程序有一个带有 google 按钮的登录所以,如果 google 帐户被验证,我将该帐户传递给 firebase 以将其存储在数据库中。在帐户 created/fetched 之后,我也将用户配置文件存储在 firebase 数据库 table 中。所以我的问题是关于使用 bob 叔叔的干净架构方法的存储库。
我应该为 google 登录创建一个存储库,然后为配置文件创建一个存储库吗?我的意思是,如果我们看一下用例(交互器),应该有一个 googleAPIInteractor
和一个 firebaseInteractor
对吗?或者我应该创建
一个名为 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,我有两个独立的交互器,acceptable 是吗?事情是为了 google 回购,我没有存储任何东西。我只是在使用它,所以我有一个帐户可以用来登录 firebase。
'Repository'在Clean Architecture中提到是一种设计模式而不是实现。
它适用于数据层,并作为一个中心位置来处理来自所有来源(远程或本地)的应用程序数据。
一个好的做法是你在一个地方(一个模块或包)有一个存储库和它的助手class。
那里有几个很好的例子,你可以看看。
1. Android10's sample
2. Ribot's guideline
3.Google sample