我正在构建一个使用事件观察器模式的应用程序,以允许希望添加自己的功能的第三方供应商轻松扩展系统中的点。
这很好用,但它依赖于一件事:
供应商可能希望扩展我未触发事件的系统的不同部分,这是完全合理的。
这里有哪些替代方案,允许供应商从他们选择的系统中的任何一点扩展系统 - 或尽可能接近该目标 - 使用类似于事件观察者的东西,即可以简单地挂钩到系统中选择?
答案 0 :(得分:0)
好的,所以你需要做两件事。首先是走出去找一些真正的客户,并与他们交谈。他们在哪里需要扩展?他们比你知道的要好得多。第二件事是在不提供挂钩的情况下犯错误。你可以随时添加它们,但是你必须支持你发布的任何内容,即使它没有被使用。
正如@Holger所说,没有办法为系统中的任何一点提供任意钩子,而且你真的不希望这样做。这是一场维护噩梦。
答案 1 :(得分:0)
@Data
public class Records {
@Saving
public void add(Record rec) {
// your code
}
}
稍后,您的客户可能会说“我希望每次有人保存某些数据时都会触发”。他将不得不用这个自定义的“快捷方式”(伪代码)来定义自己的“方面”:
@Aspect
public class OnSaving {
@Before("execution(* @Data @Saving(..))")
public void shortcut(JoinPoint pnt) {
// your customer's code
}
}
您的源代码不会被更改,只需重新编译即可。我假设使用AspectJ。