PHP之AOP面向切面编程原理(高级2)

本文探讨了PHP中面向切面编程(AOP)的概念,通过一个留言板的例子展示了如何将主业务逻辑和次业务逻辑分离,提高代码可读性和可维护性。文章介绍了如何使用接口和扩展类来实现插件式的可扩展性,并引入工厂类以实现动态添加和移除扩展,从而达到不修改主业务逻辑就能应对需求变化的目标。整个过程中体现了面向切面编程的多态特性。
摘要由CSDN通过智能技术生成

AOP面向切面编程

让我们把注意力集中到中间服务层上来。中间服务层代码比较简单,只是调用数据访问层代码将留言保存到数据库。如代码1所示:

复制代码
    
    
    
// 代码 1
// 中间服务层

class LWordServiceCore implements ILWordService {
// 添加留言
public function append( $newLWord ) {
// 调用数据访问层
$dbTask = new LWordDBTask();
$dbTask -> append( $newLWord );
}
};
复制代码

 

在看到留言板的演示之后,公司的产品部和市场部或许会提出各种各样的想法和需求。比如他们希望在添加留言之前判断用户的权限!只有注册用户才能留言!我们需要修改代码,如代码2所示:

 

复制代码
    
    
    
// 代码 2, 增加登录验证
// 中间服务层

class LWordServiceCore implements ILWordService {
// 添加留言
public function append( $newLWord ) {
if (!($userLogin)) {
// 提示用户登录
}

// 调用数据访问层
$dbTask = new LWordDBTask();
$dbTask -> append( $newLWord );
}
};
复制代码

 

市场部又希望在添加留言之前,对留言内容进行检查,如果留言中含有脏话就不保存。我们继续修改代码,如代码3所示:

 

复制代码
    
    
    
// 代码 3, 增加脏话过滤
// 中间服务层

class LWordServiceCore implements ILWordService {
// 添加留言
public function append( $newLWord ) {
if ( ! ( $userLogin )) {
// 提示用户登录
}

if (stristr($newLWord, "SB")) {
// 含有脏话, 提示留言发送失败
}

// 调用数据访问层
$dbTask = new LWordDBTask();
$dbTask -> append( $newLWord );
}
};
复制代码

 

产品部也提出了新需求,他们希望加入积分机制。具体来讲就是在用户每次留言成功以后给用户+5分。我们继续修改代码,如代码4所示:

 

复制代码
    
    
    
// 代码 4, 加入留言积分机制
// 中间服务层

class LWordServiceCore implements ILWordService {
// 添加留言
public function append( $newLWord ) {
if ( ! ( $userLogin )) {
// 提示用户登录
}

if ( stristr ( $newLWord , " SB " )) {
// 含有脏话, 提示留言发送失败
}

// 调用数据访问层
$dbTask = new LWordDBTask();
$dbTask -> append( $newLWord );

// 给用户加分
$score = getUserScore($userName);
$score = $score +
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值