}
/**
* 向用户发送一封邮件
*/
function
sendEmail(
$userid
,
$title
,
$content
) {
//检查用户是否存在
if
( !checkUserExists(
$userid
) ) {
return
false;
}
//发送邮件操作
//略...
return
true;
}
/**
* 检查某个用户是否存在
*/
function
checkUserExists(
$userid
) {
$user
= getUserInfo(
$userid
);
return
!
empty
(
$user
);
}
/**
* 获取某个用户的数据
*/
function
getUserInfo(
$userid
) {
//假设我有一个 query 的函数,它用来查询数据库并返回数据
$user
= query( "SELECT * FROM `user` WHERE `uid`=" .
intval
(
$userid
) );
return
is_array
(
$user
) ?
$user
:
array
() ;
}
</span>
现在问题是,这三个函数都同时使用
checkUserExists 这个函数来检查用户不存在,数
据库查询了三次,这样带来了一些额外的开销。
如果要去掉三者之间任意一个
checkUserExists,看上去是可能的。但是如果之后有某些
功能要调用
resetPassword 或者 sendEmail,用户不存在时,系统可能会发生错误。
还有一个解决方法是,将
resetPassword 的逻辑写到 requestResetPassword 里,再过一
点,把
sendEmail 的逻辑也写进去。这样函数调用减少,数据库查询也变成一次了,性
能得到了提高。但是重置密码和发送邮件的功能将不能得到复用,并且违背了单一责