活动设计模式

问题描述 投票:0回答:1

假设我有多个具有相同事件的活动,并且这些事件在每个活动中具有不同的参数。问题是“有没有专门涵盖这个问题的设计模式?”

如果我使用

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。我在应用程序的不同部分调用事件,但它们不是在相同的情况下运行。

php design-patterns
1个回答
0
投票

您可以为您的活动定义一个接口,并定义另一个接口,它是您的参数的包装器。

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
}
© www.soinside.com 2019 - 2024. All rights reserved.