1分钟掌握 ViaBus 架构的使用

作者: KunMinX | 来源:发表于2018-09-25 12:54 被阅读63次

    版权声明:本文为博主原创文章,转载请注明作者和链接。更多请继续关注 KunMinX
    https://www.jianshu.com/p/6545767d3e54

    viabus_flow.png

    ⭐ ViaBus 架构已在 Github 开源,欢迎 Star & Fork ~
    Github : KunMinX / android-viabus-architecture

    0. 在模块的 build.gradle 添加如下依赖

    implementation "com.kunminx.viabus:viabus-android:0.3.3"
    

    1. 定义接口,用于发送请求

    接口须继承于 IRequest,如:

    public interface INoteRequest extends IRequest{
    
        void queryList();
    
        void insert(NoteBean bean);
    
        ...
    }
    

    2. 定义 bus,用于支持请求接口的访问

    bus 须继承于BaseBus,如:

    public class NoteBus extends BaseBus {
    
        public static INoteRequest note() {
            return (INoteRequest) getRequest(INoteRequest.class);
        }
    
        ...
    }
    
    viabus_view_bus_business_1.png

    3. 将 ui 注册成为响应接收者

    在 ui 中,通过 bus 发送数据请求。并在 onResult 中,依据响应码实现 ui 逻辑的处理。

    public class NoteListFragment extends Fragment implements IResponse {
    
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            ...
            NoteBus.registerResponseObserver(this);
        }
    
        @Override
        public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
            ...
        NoteBus.note().queryList();
        }
    
        @Override 
        public void onResult(Result testResult) {
    
            String resultCode = (String) testResult.getResultCode();
    
            switch (resultCode) {
                case NoteResultCode.QUERY_LIST:
                    if (testResult.getResultObject() != null) {
                        mAdapter.setList((List<NoteBean>) testResult.getResultObject());
                        mAdapter.notifyDataSetChanged();
                    }
                    break;
                case NoteResultCode.INSERTED:
                ...
            }
        }
    
        @Override
        public void onDestroy() {
            ...
            NoteBus.unregisterResponseObserver(this);
        }
    }
    
    

    4. 在模块的管理类中,将 业务 注册成为请求处理者

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            NoteBusiness noteBusiness = new NoteBusiness();
            noteBusiness.init(getApplicationContext());
            NoteBus.registerRequestHandler(noteBusiness);
            ...
        }
    }
    

    5. 在业务中异步处理各种请求

    期间可发送进度消息,最后可返回结果数据。业务须继承于 BaseBusiness。

    public class NoteBusiness extends BaseBusiness<NoteBus> implements INoteRequest {
    
        @Override
        public void queryList() {
            handleRequest((e) -> {
                List<NoteBean> list = mDataBase.getList(null, null);
            ... 
            sendMessage(e, new Result(NoteResultCode.PROGRESS, bean.getId()));
            ... 
                return new Result(NoteResultCode.QUERY_LIST, list); 
            });
        }
    
        @Override
        public void insert(NoteBean bean) {
            handleRequest((e) -> { ... });
        }
        ...
    }
    

    更多文章

    Github : KunMinX / android-viabus-architecture
    Android 各类架构横向对比
    ViaBus - 年轻人的第一款 Android 架构

    相关文章

      网友评论

      • 魁爷的黑作坊:博主可以详细指教一下3楼的问题吗,同问,谢谢啦
        KunMinX:MVP违背了单一职责原则、最小知识原则、接口隔离原则。简单的说,形式上看似通过接口“解耦”了,但从职责分工的角度来看,还是耦合的。具体请参考https://juejin.im/post/5bcd58b6e51d45404c71d23f 一文的 “代码是如何剪不断理还乱的?” 章节。
      • 31adeeefff8a:大牛,能不能MVP说下都是哪些地方违背设计模式,我除了感觉写起来接口特别多,其他真的看不出来,希望能指点下,这对我帮助特别大
        KunMinX:MVP违背了单一职责原则、最小知识原则、接口隔离原则。简单的说,形式上看似通过接口“解耦”了,但从职责分工的角度来看,还是耦合的。具体可以参考https://juejin.im/post/5bcd58b6e51d45404c71d23f 一文的 “代码是如何剪不断理还乱的?” 章节。
      • cwwei:看了这文章再看demo,使用并不方便啊。还是mvp框架比较好理解
        cwwei:@KunMinX 我新建了一个FragmentBus,在activity注册:NoteBus.registerResponseObserver(this); 在该activity的fragment注册:FragmentBus.registerResponseObserver(this); 当我在activity或fragment发送一个请求,它们的onResult都能收到。不知道为什么,请教一下大神。
        31adeeefff8a:大牛,能不能MVP说下都是哪些地方违背设计模式,我除了感觉写起来接口特别多,其他真的看不出来,希望能指点下,这对我帮助特别大
        KunMinX:@cwwei mvp有3处违背设计模式原则,早在去年公司就已经弃用了

      本文标题:1分钟掌握 ViaBus 架构的使用

      本文链接:https://www.haomeiwen.com/subject/uqzkoftx.html