简单地说,Use-Cases
处理您的业务逻辑,Repositories
是您存储和访问数据的数据层。
例如,当您打开 Launcher 活动时(我们称之为SplashActivity
)
首先你开始你的Presenter
:
mSplashPresenter.start();
其次,在您的 Presenter 的启动方法中,您是否实现了用户是否登录的逻辑?如果是登录导航到仪表板,如果不是导航到LoginActivity
.
我假设你有一个 LoginUseCase。
public void start(){
if(mLoginUseCase.isLoggedIn()){
mView.navitageToDashboard();
} else {
mView.navigateToLogin();
}
}
第三,您需要一个像下面这样的用例方法。(我再次假设你有一个UserRepository
)
public boolean isLoggedIn(){
// This is your business logic.
return mUserRepository.getCurrentUser() != null;
}
在你的User Repository
:
public User getCurrentUser(){
// This is your data
// You can access remote or local data with repository.
return mLocalDataSource.getUser();
}
那么为什么我们需要一个用例呢?
这是一个简单的业务逻辑,它决定用户是否登录。这可能是更复杂的业务逻辑,或者您想在其他演示者中使用此逻辑。因此,使用Use-Cases
,您可以使您的业务代码可重用并避免您的演示者中的代码重复。
稍后,如果您想决定更改您的登录逻辑,您只需更改您的用例,而不是所有演示者。
让我们为您的问题确定一个逻辑:EditUser
.
您有一个UsersRepository.editUser(User user)
编辑用户的存储库方法。
您有一个Profile
用户可以编辑所有字段的屏幕。此外,您还有一个EditScreenDetail
屏幕,用户可以编辑一些与屏幕详细信息相关的字段,其他人可以看到这些字段。
在两个屏幕中,您都可以编辑用户,但在调用UserRepository
方法之前,您需要检查两个屏幕不同的必填字段。所以你定义了一个ProfileEditUseCase
andScreenDetailsEditUseCase
来实现两个不同的业务逻辑。但最后的操作是一样的。您通过您的回购编辑用户。从远程或本地。
概括:
将Use-Cases
业务逻辑与演示者和数据层分开,避免演示者中的代码重复。您还可以管理您的业务,这些业务可用于一类的其他部分。
我希望我解释清楚。