规则校验适合什么设计模式_巧用设计模式,打造通用规则模块

本文探讨如何利用设计模式,特别是策略模式,来构建一个适用于多种场景的通用规则模块。在活动业务中,规则如登录天数、充值金额和角色等级等经常被不同功能调用,组合成复杂的活动规则。通过避免过度使用if-else语句,采用策略模式能够提高代码的可读性和可维护性。此外,文中推荐了两本书籍帮助读者深入理解设计模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

巧用设计模式,

打造通用规则模块

    在活动业务需求中我们常有一些需求规则如:登录游戏x天、活动期间累计充值x元、角色等级达到x级等等,而这些规则会被不同的功能模块调用如:领取礼包功能、抽奖功能、虚拟积分功能等。组合后就可以实现如下活动规则:登录游戏1天且累计充值1元可领取礼包A、角色等级达到10级可抽奖1次等等。

01

e8cccb79ce73be7539a244e0918bd40e.png

  何为通用规则模块?

    传统的实现方式如下,每个模块都有自己的规则组合,如(图1)所示:

fb52ffcc731523a4995a66b8869cd201.png

图1

    但缺点也比较明显,会有大量重复的规则代码,功能模块与规则逻辑之间有着较强的耦合。因此我们可以做一个通用的规则模块,供不同的功能组件调用,既可减少重复逻辑代码,方便维护,亦可一次开发,多模块共用,方便拓展。通用规则模块如(图2)所示:

4c21d6f059e9c93497d598ffc460a54a.png

图2

     下面我们来逐步实现通用规则模块的开发,本文虽以PHP代码为例说明,但设计思想是相通的。

02

e8cccb79ce73be7539a244e0918bd40e.png

  if-else工程师?

    有人说在编程领域,没有什么是if-else不能解决的,如果有,那就多来几个if-else。在项目初期,往往以快速实现功能为目标,不要跟我说什么架构什么设计模式,拿起键盘就是敲。如(图3)所示,有3项规则需要实现,代码如下:

3f94fb979b406572a21ddd9233d97eba.png

class Client {
        /**     * 检查规则     * @param  [string] $rule_type 规则类型     * @return [bool]     */    public function rule_check($rule_type) {
            if ($rule_type == 'FREE') {
                //处理免费规则逻辑        } elseif ($rule_type == 'PAY') {
                //处理充值规则逻辑        } elseif ($rule_type == 'LOGIN') {
                //处理登录规则逻辑        } else {
                //默认处理        }        return true;    }}
    如果只有简单的两三项逻辑,确实可以用以上的if-else轻松解决。而当业务场景逐渐丰富,规则也慢慢增多,如(图4)所示:从原有的3项规则变成5项。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值