假设我有多个具有相同事件的活动,并且这些事件在每个活动中具有不同的参数。问题是“有没有专门涵盖这个问题的设计模式?”
如果我使用
interfaces
,那么我必须在事件函数中具有相同的参数。我需要的只是确保每个活动中的所有事件函数都具有任何参数。
示例:
class FirstCampaign{
public function onFirstPurchase($arg1,$arg2, User $user){
//
}
public function onFirstTrade($price,$something, User $user,Model $model){
//
}
}
class SecondCampaign{
public function onFirstPurchase(User $user){
//
}
public function onFirstTrade(Model $model){
//
}
}
class ThirdCampaign{
public function onFirstPurchase(User $user, Model $model, int $abc){
//
}
public function onFirstTrade(){
//
}
}
PS。我已经尝试过
onFirstPurchase(...$arguments)
,但这并不完全是我所需要的,而且使用起来太复杂了。
PS。我在应用程序的不同部分调用事件,但它们不是在相同的情况下运行。
您可以为您的活动定义一个接口,并定义另一个接口,它是您的参数的包装器。
public interface CampaignInterface {
public function onFirstPurchase(User $user, PurchaseContextInterface $context);
public function onFirstTrade(TradeContextInterface $context);
}
public class FirstCampaign implements CampaignInterface {
public function onFirstPurchase(User $user, PurchaseContextInterface $context) {
// Implementation here
}
public function onFirstTrade(TradeContextInterface $context) {
// Implementation here
}
}
public class FirstCampaignPurchaseContext implements PurchaseContextInterface {
// Implementation here
}
public class FirstCampaignTradeContext implements TradeContextInterface {
// Implementation here
}