gpt4 book ai didi

java - 如何分离业务逻辑和指标日志?

转载 作者:搜寻专家 更新时间:2023-10-31 20:16:40 25 4
gpt4 key购买 nike

在很多应用程序中,我们需要记录统计指标,例如 hist、guage 等。这会污染业务逻辑。例如:

boolean buy(int id) {
metrics.increament(); // for qps maybe..
int remain = checkRemain();
metrics.hist(remain); // log remain amount..
if (remain > 0)
return true;
else
return false;
}

我希望,我只能写下业务逻辑,例如:

boolean buy(int id) {
int remain = checkRemain();
if (remain > 0)
return true;
else
return false;
}

但我也可以获得指标。

我的问题是:分离业务逻辑和指标日志的最佳做法是什么?

我知道面向方面的编程可以解决这个问题,我还有其他选择吗?

最佳答案

如果你不想使用 AOP,你可以实现一个观察者

https://en.wikipedia.org/wiki/Observer_pattern

定义一个观察者接口(interface)

public interface Observer {
void buyed(int id, int remain);
}

然后在业务逻辑类中使用:

 private List<Observer> observers = new ArrayList<>();
public void addObserver(Observer observer) {
this.observers.add(observer);
}

boolean buy(int id){
int remain = checkRemain();
for (Observer observer : this.observers) {
observer.buyed(id, remain);
}
if (remain > 0){
return true;
} else
return false;
}

Metrics类实现观察者接口(interface)

class Metrics implements Observer {
void buyed(int id, int remain){
metrics.increment();
metrics.hist(remain);
}
....

关于java - 如何分离业务逻辑和指标日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55888589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com