我构建了一个只有静态方法的类。该类基本上是一个URL构建器,包含2个公共静态方法。这些方法在同一个类中调用私有方法。
我的问题是:
是否可以重写此类以应用设计模式?在我看来它接近门面或装饰!我的方法是否正确?
class UrlBuilder{
/**
* @param Model $model
* @return string
*/
private static function jsonFyModelAttribute(Model $model){
return json_encode($model->attributes);
}
private static function objectFy(array $json){
return json_decode($json['payload']);
}
/**
* @param $str
* @return string
*/
private static function buildFormUrl($str){
$slug = self::encodeUrl($str);
return $url = Yii::$app->params['formsUrl'].'pay?pay=' . $slug;
}
/**
* @param Model $model
* @return string
*/
public static function sign(Model $model){
$jws = new SimpleJWS([ 'alg' => 'RS256']);
$payLoad = self::jsonFyModelAttribute($model);
$jws->setPayload([
'payload' => $payLoad
]);
$privateKey = openssl_pkey_get_private("file:///var/pems/mykey.pem");
$jws->sign($privateKey);
return self::buildFormUrl($jws->getTokenString());
}
/**
* @param $str
* @return array
*/
public static function unSign($str){
$data = self::decodeUrl($str);
$jws= SimpleJWS::load($data);
$publicKey = openssl_pkey_get_public("file:///var/pems/pubkey.pem");
if ($jws->isValid($publicKey, 'RS256')) {
return self::objectFy($jws->getPayload());
}
}
/**
* @param $str
* @return string
*/
private static function encodeUrl($str){
return urlencode($str);
}
/**
* @param $str
* @return string
*/
private static function decodeUrl($str){
return urldecode($str);
}
}
答案 0 :(得分:10)
问题是,为什么要使用设计模式?设计模式不是一切的解决方案,您的代码不能包含尽可能多的设计模式。顺便说一下:设计模式从不关注单个类。它始终是不同类之间的交互和通信以及如何处理它。
以您的例子为例,我的建议是遵循KISS原则。当你真的需要它们时,模式可以来得更晚(而且真的很难, 即使是有经验的程序员,也要确定这种情况)
答案 1 :(得分:3)