imweb / Ques

An new architecture which deal with how to implement and use a component
http://miniflycn.github.io/Ques/
62 stars 14 forks source link

准备利用AOP做上报分离,为之后产品自定义配置上报做准备 #28

Open miniflycn opened 9 years ago

miniflycn commented 9 years ago

上报的核心问题

  1. 如何非侵入式数据上报
  2. 如何避免上报与逻辑耦合
  3. 更进一步如何将上报配置和业务代码分离
  4. 当上报配置可完全分离,产品自定义配置上报便成为可能。

    基本设计实现方案

基于Q.js的事件机制,对事件机制可专门切成上报切面:

1

线下完成几个事情

  1. 节点产生事件,例如
  2. aspect声明:AOP('#componet-1', 'click', function (data) { doreport(); });
  3. 更具申明将上报函数粘到dosth上,在dosth前或后自动执行上报
miniflycn commented 9 years ago

针对Q.js的AOP语言设计

// 选择#my-q
AOP('#my-q');
// 选择#my-q1和#my-q2
AOP(['#my-q1', '#my-q2']);
// 选择所有页面包含的q实例,包含异步可能出现的
AOP()
// 对该q实例的hello方法前置绑定advice
aop.method('hello').before(advice);
// 对该q实例的hello方法后置绑定advice
aop.method('hello').after(advice);
// 对该q实例的dosth名字的filter方法前置绑定advice
aop.filter('dosth').before(advice);
// 对该q实例的第一个a标签click前置绑定advice,实现上是template声明顺序问题
aop.on('click', 'a:eq(0)').before(advice);
// 匹配方法名前面全为action的方法
aop.method(/^action/).before(advice);