如何抽象跟踪代码?

时间:2013-10-31 09:46:15

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

我正在开发一个沉重的电子商务应用。在此类应用中,跟踪是一个巨大的问题。了解用户是否使用功能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。只需为操作引发事件,然后在跟踪服务

中捕获这些事件
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。他们甚至不知道跟踪存在。此外,一些现有事件可能可以重复使用。然而,这只适用于一小部分事件。为了跟踪,大多数事件都会或多或少地被提出。所以我想知道这个抽象层是否真的有必要吗?

这样的跟踪似乎与日志记录有很大的不同,我认为直接登录事件发生的地方是不可接受的做法,不是吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

如果你在JavaScript中这样做,使用像JQuery这样的库可以让你的生活更轻松。否则,您需要在代码中使用事件注册和侦听器机制。

检查bind()函数

下的here个示例
$( "#searchButton" ).bind( "click", function() {
  track('searchButtonClicked');
})