我可以用我的核心逻辑来更新 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
界面,注入目标
我有一个要求,我将通过调用公共方法 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
界面,注入目标