Android 在后端将MVVM和n层体系结构与Firestore相结合
我正在尝试重新构建代码库,使用Android架构组件实现Android 在后端将MVVM和n层体系结构与Firestore相结合,android,mvvm,google-cloud-firestore,android-architecture-components,Android,Mvvm,Google Cloud Firestore,Android Architecture Components,我正在尝试重新构建代码库,使用Android架构组件实现MVVM架构和三层架构 MainActivity.java文件包含一个片段,这个片段是大多数用户交互发生的地方。用户提供了一个输入,基于该输入,我希望能够点击Firebase Firestore数据库来获取相关数据,然后将其显示在UI上。该方法应遵循关注点分离原则 当前,在收到用户对片段的输入时,我使用接口,将输入中继到其父活动,即MainActivity.java,然后调用函数获取用户请求数据。收到数据后,我会将其适当地显示在UI上(而不
MVVM
架构和三层架构
MainActivity.java
文件包含一个片段
,这个片段是大多数用户交互发生的地方。用户提供了一个输入,基于该输入,我希望能够点击Firebase Firestore
数据库来获取相关数据,然后将其显示在UI上。该方法应遵循关注点分离原则
当前,在收到用户对片段的输入时,我使用接口,将输入中继到其父活动,即MainActivity.java
,然后调用函数获取用户请求数据
。收到数据后,我会将其适当地显示在UI上(而不是片段的一部分)
但是,我希望我的1)业务逻辑层、2)数据库访问层和3)UI层在单独的包中。(以确保遵循n层体系结构模式)
另外,使用Firestore
作为我的应用程序的数据库,我不确定从数据层到UI模型的整个过程中,应该如何处理用户输入和Firestore
输出的数据流。请注意,Firestore
数据库调用是异步的
如何设置代码库以遵循三层之间的正确通信模型,从而使其既遵循MVVM
又遵循n层体系结构
代码如下:
MainActivity.java
public class MainActivity extends AppCompatActivity implements FragmentClass.DataPasser {
FirebaseAuth firebaseAuth;
FirebaseUser firebaseUser;
private ArrayList<DataType> dataList = new ArrayList<>();
DataProvider dataProvider = new DataProvider();
.
.
.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
.
.
.
}
@Override
protected void onStart() {
super.onStart();
.
.
.
}
@Override
public void onUserInput(DataType input) {
dataList = dataProvider.ProvideData(input);
//update UI using this dataList
}
}
DataProvider.java
public class DataProvider {
private ArrayList<DataType> dataList = new ArrayList<>();
DataFetcher dataFetcher = new DataFetcher();
public ArrayList<DataType> ProvideData(String userInput) {
dataList = dataFetcher(userInput);
return dataList;
}
private ArrayList<DataType> dataFetcher(String userInput) {
ArrayList<DataType> fetchedData = new ArrayList<>();
fetchedData = dataFetcher.DatabaseCaller(userInput);
return fetchedData;
}
}
公共类数据提供程序{
private ArrayList dataList=new ArrayList();
DataFetcher DataFetcher=新的DataFetcher();
公共ArrayList提供的数据(字符串用户输入){
dataList=dataFetcher(userInput);
返回数据列表;
}
专用ArrayList数据获取程序(字符串用户输入){
ArrayList fetchedData=新建ArrayList();
fetchedData=dataFetcher.DatabaseCaller(userInput);
返回获取的数据;
}
}
DataFetcher.java
public class DataFetcher {
ArrayList<DataType> dataList;
FirebaseFirestore firestore = FirebaseFirestore.getInstance();
public ArrayList<DataType> DatabaseCaller(String userInput) {
//formulate query based on userInput
//hit database and fetch dataList
return dataList;
}
}
公共类数据获取程序{
ArrayList数据表;
FirebaseFirestore=FirebaseFirestore.getInstance();
公共ArrayList DatabaseCaller(字符串userInput){
//基于用户输入制定查询
//点击数据库并获取数据列表
返回数据列表;
}
}
到目前为止您尝试了什么?创建了三个类:MainActivity、DataProvider和DataFetcher。然后在DataProvider中创建DataFetcher对象,在MainActivity中创建DataProvider对象。将用户参数传递给DataProvider的函数,DataProvider又将其传递给DataFetcher的函数。DataFetcher的函数用于制定firestore查询。也尝试了这种方法,但没有按预期工作。请不要描述代码,而是将其添加到您的问题中。您好,下面是两个实现Android MVVM架构模式的示例。在本报告中,您还可以找到一个详细的示例应用程序,该应用程序使用Dagger2、Room、RxJava、FastAndroidNetworking、Placeholder View和AndroidDebugDatabase实现MVVM体系结构。在本文中,您将看到一个基于MVVM模式和存储库模式的实现示例。
public class DataFetcher {
ArrayList<DataType> dataList;
FirebaseFirestore firestore = FirebaseFirestore.getInstance();
public ArrayList<DataType> DatabaseCaller(String userInput) {
//formulate query based on userInput
//hit database and fetch dataList
return dataList;
}
}