我正在使用干净的架构创建聊天应用程序,我想检查用户是否在应用程序启动时登录,如果他没有登录则打开登录屏幕,所以我的问题是:
实施该方法的最佳方法是什么?如果用户已登录,我应该Get-WmiObject win32_operatingsystem -ComputerName (Get-Content C:\Users\user1\Desktop\Servers.csv) -Property name, csname | select csname, name | Format-Table -AutoSize
启动器活动并检查LoginActivity
何时启动,然后打开LoginPresenter
?我应该在哪里放置用于检查用户是否经过身份验证的逻辑(MainActivity
可能?)?
我真的不明白存储库和用例之间有什么区别,为什么我应该IsLoggedInUseCase
和GetAllUsersUseCase
...等等已经EditUserUseCase
和UsersRepository.getAllUsers()
?为什么要创建一个全新的类只是为了引用存储库中已存在的方法?
答案 0 :(得分:5)
简单地说,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
和ScreenDetailsEditUseCase
来实现两种不同的业务逻辑。但最终的操作是一样的。您可以通过回购来编辑用户。来自远程或本地。
<强>要点:强>
使用Use-Cases
,您可以将业务逻辑与演示者和数据层分开,避免在演示者中复制代码。您还可以管理您的业务,可以在一个班级的其他部分中使用。
我希望我能清楚地解释清楚。