我可以用我的核心逻辑来更新 Aspect 中的对象状态吗

Can I have my core logic to update object status in Aspect


我有一个要求,我将通过调用公共方法 action() 在链模式 ClassA->ClassB->ClassC 中执行一组操作。 理想情况下,ClassA、ClassB 和 ClassC 实现具有方法 action() 的接口 IClass。

在 action() 方法结束时,它的状态 (failed/success) 应该在数据库中更新。
所以我的疑问是,
- 利用 Aspect 对方法 "action" 的环绕建议并在执行操作后更新 Aspect class 中的状态是否是一个好的设计。
- 我们既然更新动作状态是核心逻辑,它不应该像方面一样成为横切框架的一部分?

我认为方面不是实现上述行为的正确选择。 方面是跨多个 classes / 模块使用的通用代码。

典型例子有transaction management, logging

更好的选择可能是像下面这样编写一个接口和实现 -

public interface StatusUpdater{
    updateActionStatus();
} 

让一个 class 实现此接口。

public class StatusUpdaterImpl implements StatusUpdater{
    updateActionStatus();
}

将此 class 注入 Class A , B and C 并将数据库更新委托给此 class。

如果需要,您可以灵活地更改 Db 更新行为。

多了一个class植入StatusUpdater界面,注入目标