Flutter最佳架构探究( 二 )


这样,我们使用和分别将登录/注册操作和结果回调操作进行封装,然后使IView、、分别实现自己应该具有的功能,最后让View、、Model分别实现IView、、接口,一步一步实现了视图与数据的解耦 。
代码实现
以上是理论分析部分,落实在代码中,我来大家一步一步地实现:
首先定义我们所说的登录/注册操作对应的接口:
enum RequestType { LOGIN, SIGNUP }class LoginInterface {//这里通过RequestType区分当前操作是登录操作还是注册操作logInOrSignUp(String userName, String passWord, RequestType requestType) {}}
然后来定义回调方法对应的接口:
class ILoginCallBack {//登录/注册成功logInOrSignUpSuccess(User user, String describe) {}//登录/注册失败logInOrSignUpFailed(String describe) {}}
然后来定义IView接口,因为View应该有登录/注册、回调两个功能,因此应该让IView接口实现、两个接口:
class ILoginPage implements LoginInterface,ILoginCallBack {showProsess(bool show) {}@overridelogInOrSignUp(String userName, String passWord, RequestType requestType) {// TODO: implement logInOrSignUpreturn null;}@overridelogInOrSignUpFailed(String describe) {// TODO: implement logInOrSignUpFailedreturn null;}@overridelogInOrSignUpSuccess(User user, String describe) {// TODO: implement logInOrSignUpSuccessreturn null;}}
注意,这里只是定义接口,所以方法不用实现 。
定义接口,由于应该有登录/注册、回调两个功能,因此应该让IView接口实现、两个接口:
class ILoginPagePresenter implements LoginInterface, ILoginCallBack {@overridelogInOrSignUp(String userName, String passWord, RequestType requestType) {// TODO: implement logInOrSignUpreturn null;}@overridelogInOrSignUpFailed(String describe) {// TODO: implement logInOrSignUpFailedreturn null;}@overridelogInOrSignUpSuccess(User user, String describe) {// TODO: implement logInOrSignUpSuccessreturn null;}}
最后定义接口,其只需要登录/注册一个功能即可,因此让接口实现这一个接口即可:
class ILoginModel implements LoginInterface {@overridelogInOrSignUp(String userName, String passWord, RequestType requestType) {// TODO: implement logInOrSignUpreturn null;}}
然后我们来实现View、、Model三个类:
View:
class _LoginState extends State implements ILoginPage{ILoginPagePresenter iLoginPagePresenter;@overridevoid initState() {iLoginPagePresenter = LogInPresenter(this);super.initState();}@overridelogInOrSignUp(String userName, String passWord, RequestType requestType) {iLoginPagePresenter.logInOrSignUp(userName, passWord, requestType);}@overridelogInOrSignUpFailed(String describe) {// TODO: 登录/注册失败,更新视图}@overridelogInOrSignUpSuccess(User user, String describe) {// TODO: 登录/注册成功,更新视图}}

class LogInPresenter implements ILoginPagePresenter {ILoginPage _iLoginPage;ILoginModel _iLoginModel;LogInPresenter(this._iLoginPage) {_iLoginModel = LoginModel(this);}@overridelogInOrSignUp(String userName, String passWord, RequestType requestType) {_iLoginModel.logInOrSignUp(userName, passWord, requestType);}@overridelogInOrSignUpFailed(String describe) {_iLoginPage.logInOrSignUpFailed(describe);}@overridelogInOrSignUpSuccess(User user, String describe) {_iLoginPage.logInOrSignUpSuccess(user, describe);}}
Model:
class LoginModel implements ILoginModel {ILoginCallBack _iLoginCallBack;LoginModel(this._iLoginCallBack);@overridelogInOrSignUp(String userName, String passWord, RequestType requestType) {// TODO: 发起网络操作进行登录/注册_iLoginCallBack.logInOrSignUpSuccess(user, describe);}}