Android业务中间层该如何设计?

如果一个产品需要有多个业务线,各业务线之间如何协作才是最高效的?

上图是比较常见的业务组装方式,如果需要添加某个业务,把相应的View直接写在Layout里,然后处理业务逻辑。但是如果业务模块多达几十个,散落的逻辑有几千行,这时该如何设计才能保证各业务的稳定和可扩展性?

公共业务应该是各个业务积木堆积组成,各个积木之间是黑盒状态,只能通过“窗口”向外提供服务,以及发布需求。中间层委托、代理信息的传递。

中间层在Android平台该如何设计?

  • Android平台起点及终点都是和界面的生命周期息息相关,中间层作为业务/界面的承载模型,所以应该继承自View。
  • 各个业务积木之间是独立、隔离、和动态的,业务积木通过中间承载模型加载/卸载也应该是动态的。
  • 中间层作为界面承载模型,所以也是有生命周期的,且依赖于外部。
  • 中间层除了承载、通信职责,也应该随着外部环境变化,去影响业务积木的改变。

对外协议

/**
 * 委托协议
 *
 * @author jacky
 * @version v1.0
 * @description 对外暴露的协议
 * @since 2017/9/14
 */

public interface IBusinessDelegate {

    IBusinessDelegate setup();

    IBusinessDelegate setupBusiness1();

    IBusinessDelegate setupBusiness2();

    IBusinessDelegate setupBusiness3();

    IBusinessDelegate setupBusiness4();

    void event1();

    void event2();

    void onCreate();

    void onResume();

    void onPause();

    void onDestroy();
}

中间层实现

/**
 * 委托
 *
 * @author jacky
 * @version v1.0
 * @description 委托,隔离各业务间的耦合
 * @since 2017/9/14
 */

public class BusinessDelegate extends RelativeLayout implements IBusinessDelegate {

    private WeakReference<Context> mContextReference;
    private TimingChestContract.Presenter mTimingChestPresenter;

    public BusinessDelegate(Context context) {
        super(context);
    }

    public BusinessDelegate(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public BusinessDelegate(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public IBusinessDelegate setup() {
        mContextReference = new WeakReference<>(getContext());
        removeAllViews();
        return this;
    }

    // ---- 动态加载挂件 Start ----
    @Override
    public IBusinessDelegate setupBusiness1() {
        TimingChestView chestView = new TimingChestView(mContextReference.get());
        mTimingChestPresenter = new TimingChestPresenter(chestView, new TimingChestModel());
        chestView.setPresenter(mTimingChestPresenter);
        LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        addView(chestView, params);
        return this;
    }

    @Override
    public IBusinessDelegate setupBusiness2() {
        return this;
    }

    @Override
    public IBusinessDelegate setupBusiness3() {
        return this;
    }

    @Override
    public IBusinessDelegate setupBusiness4() {
        return this;
    }
    // ---- 动态加载挂件 End ----

    // ---- 接收事件 Start ----
    @Override
    public void event1() {
        if (mTimingChestPresenter != null) {
            mTimingChestPresenter.notify();
        }
    }

    @Override
    public void event2() {

    }
    // ---- 接收事件 End ----

    // ---- 生命周期 Start ----
    @Override
    public void onCreate() {
        if (!EventBus.getDefault().isRegistered(this)) {
            EventBus.getDefault().register(this);
        }
        if (mTimingChestPresenter != null) {
            mTimingChestPresenter.onCreate();
        }
    }

    @Override
    public void onResume() {
        if (mTimingChestPresenter != null) {
            mTimingChestPresenter.onResume();
        }
    }

    @Override
    public void onPause() {
        if (mTimingChestPresenter != null) {
            mTimingChestPresenter.onPause();
        }
    }

    @Override
    public void onDestroy() {
        EventBus.getDefault().unregister(this);
        if (mTimingChestPresenter != null) {
            mTimingChestPresenter.onDestroy();
        }
    }
    // ---- 生命周期 End ----
}

委托作为中间层的呈现方式,动态加载业务积木,并感应外部环境变化反应到业务积木。通过这种方式,业务积木就有了很好的稳定性和扩展性。并辅以辅助手段,使委托变得异常强大。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值