我创建了一个简单的jQuery函数,用于开发人员事件和错误记录...它调用一个Web服务函数,它只是将几个传递的参数记录到一个名为 EventLog 的日志表中。
其中一个参数( logEventStr )只是一个符合日志事件的字符串...例如' debug',' error',&# 39;用户','信息' ...等等。我将所有这些事件类型放在另一个表中,称之为 EventTypes ,索引(即1 = debug,2 = info,3 = user ...),并通过外键约束链接到eventId列日志表。
因此,在代码审查期间,建议/认为应该使用对此日志事件字符串的一些初始检查,因为"开发人员可能错误地键入 logEventStr 参数中的事件类型& #34 ;.我解释说我在Web服务中有代码检查有效的事件字符串并抛出在Ajax调用的失败事件中处理的异常...它甚至会将拼写错误的事件名称错误输出到控制台,所以开发人员会立即知道他搞砸了并且会纠正它。进一步的讨论'声明 EventTypes 中的索引应该在javascript中进行硬编码(可能是JSON对象),并在进行Web服务调用之前进行检查。这对我来说似乎很愚蠢,因为现在开发人员必须跟上 EventTypes 表中的更改并保持它们与硬编码的JSON对象手动同步。我终于有点意识到用另一个Web服务调用来填充JSON对象,该调用返回EventTypes表的内容并缓存它,因此它将是第一次调用时的一次性调用。然而,我仍然认为,即使这是不必要的......日志记录功能仅供开发人员使用, logEventStr 永远不会由最终用户决定。
我的问题是......哪种技术是对的?对于像记录功能一样直接和简单的东西,应该需要多少检查才能由开发人员专门使用?
我在周末对此进行了仔细研究,但仍然困扰着我。当然,也许这些都不是正确的方法,所以欢迎另类的想法。
答案 0 :(得分:1)
为什么不为每个日志事件类型创建包装函数?
如果您的原始功能是log
,并且使用如下:
log("user", "is a zombie");
这可以改写为:
logUser("is a zombie");
其中logUser
只需使用参数log
调用user
。
要走的另一条路线是让log
成为具有各种功能的对象,所以你会像这样使用它:
log.user("is a zombie");
等
使用您的日志记录机制的开发人员不应该对其内部因素感到困扰,因为我们在这里处理日志记录系统,所以有一定数量的日志记录类型,所以如果您提前列出一个经过深思熟虑的日志列表数据库中存在的日志记录类型,不需要修改,那么将来不应该担心会出现问题。
修改(根据评论):
根据您的问题,我看到有两个表格EventLog
和EventTypes
。我认为EventLog
有两列:
虽然EventTypes
也有两列:
这些信息让我感到困惑,我引用:
现在开发者必须保持 更新EventLog表中的更改
根据我的理解,此表的目的是存储有关各种事件及其类型的信息。此表将在每次记录事件时添加行的意义上更改。这里没有结构变化。
EventTypes
表是可以更改的表,也是添加新事件类型的表。这也意味着可以添加一行。
不会以添加或删除列的方式修改这两个表。
EventTypes
或多或少“固定”,每个事件类型都与一个数字相关联。这个数字应该是您的数据库和Javascript之间的“协议”。
所以,如果你有这样的三行:
那么你还应该有三个这样的函数:
每个人都应拨打适当号码的网络服务。这是你的同意。
如果添加了新的事件类型,那么现在您的表有一个新的行:
然后你应该为你的开发者添加一个新功能:
这样,就没有“重大变化”,因为添加了新功能,并且在此过程中没有任何旧功能被破坏。假设您的编号方案没有改变。
您只需告诉您的开发人员“从现在起您将拥有一项新功能,其他所有功能都将像以前一样发挥作用”,您将继续开展业务。