【问题标题】:How should one abstract tracking code?应该如何抽象跟踪代码?
【发布时间】:2013-10-31 09:46:14
【问题描述】:

我正在开发一个大型电子商务应用程序。在此类应用程序中,跟踪是一个巨大的问题。了解用户是否使用功能 x 或单击按钮 y 等至关重要。

例如,假设您可以通过单击标题上的搜索按钮或通过应用程序宽键盘命令 CTRL + S 来调出搜索。

现在,如果我们想跟踪此类事情,最好的处理方法是什么。我在(这里使用伪JavaScript,但语言并不重要)之间思考和犹豫:

1.只需直接在动作发生的地方进行跟踪:

function searchButtonClicked{
    //this event will be raised anyway to be catched somewhere else to bring up the search
    raiseEvent('searchButtonClicked');
    //now directly track the stuff here
    trackingService.trackEvent('searchButtonClicked');
}

还有……

2。只需为操作引发事件,然后在 trackingService 中捕获这些事件

function searchButtonClicked{
    //this event will be raised anyway to be catched somewhere else to bring up the search
    raiseEvent('searchButtonClicked');
}

...在 trackingService 中的某个地方

onEvent('searchButtonClicked', function(){
   track('searchButtonClicked');
});

所以乍一看 2. 对我来说似乎更好一点,因为没有一个组件需要依赖于 trackingService。他们甚至不知道存在跟踪。此外,一些现有的事件可能可以重用。然而,这只适用于一小部分事件。大多数事件或多或少都是为了跟踪而引发的。所以我想知道那层抽象是否真的有必要?

这种跟踪似乎与记录没有太大区别,我认为直接在事件发生的地方记录是公认的做法,不是吗?

【问题讨论】:

    标签: javascript design-patterns logging architecture google-analytics


    【解决方案1】:

    与往常一样,这取决于您的具体情况。
    如果像您说的那样,应用程序中的大多数可跟踪操作都不会引发事件,那么使用事件的抽象不是最佳选择。
    你可以让你的代码直接调用跟踪,这不是最干净的事情,但它是最简单的,如果每个调用只是一行,如上所述,可能是可以接受的。

    我可以再建议一件小事——你可以试试AOP
    根据您使用的技术,您可以-
    1. 标记某些类/方法以进行跟踪(可能使用属性或其他)或
    2. 创建一个包含所有要跟踪的类/方法列表的类。

    【讨论】:

      【解决方案2】:

      如果您在 JavaScript 中执行此操作,使用 JQuery 之类的库可以让您的生活更轻松。否则你的代码中需要有事件注册和监听机制。

      检查 here 的 bind() 函数下的示例

      $( "#searchButton" ).bind( "click", function() {
        track('searchButtonClicked');
      })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-23
        • 2018-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多