如何在Laravel中有效地构建此代码?

时间:2016-05-21 10:31:57

标签: php laravel laravel-5 eloquent

我有一个名为Sharer的类,它在构造方法中接受Service接口。 Service可以是FacebookServiceTwitterService,依此类推。每个Service类都有一个post方法,它使用自己的连接(在本例中为facebook,twitter)发布传递给该方法的任何数组数据。

现在将Sharernormalizes数据发送到service的post方法之前。通过规范化,它会检查我们发送给post方法的内容是仅仅是一个简单数组还是Model类。 Model可以是Project模型,也可以是Image模型,或Video模型等等。

如果是模型类,则调用该特定模型的变换器。 Transformers只是辅助类,接受模型实例,在这种情况下它们有两种方法 - facebooktwitter。每个方法都返回一个特定于连接的格式化数组。

因此,例如,facebook方法从模型中获取必需的字段(在facebook上发布所需的字段)并将该数组发回。而twitter方法对twitter的必填字段也是如此。

现在我有点困惑的是,在变换器类上调用该特定方法。我想做这样的事情:

if(we are sharing on facebook) {
   then call the facebook method
}

if(we are sharing on twitter) {
   then call the twitter method
}

但显然我想以某种方式让它变得动态而没有这些if语句。对此更好的方法是什么?

1 个答案:

答案 0 :(得分:0)

我解决了这个问题:

$method = $this->resolveMethodToCall();

protected function resolveMethodToCall() 
{
    $reflection = new ReflectionClass($this->service); // service being either a FacebookService class or TwitterService

    $shortName = $reflection->getShortName();

    return strtolower(str_replace('Service', '', $shortName));
}

可能不是最好的解决方案,但效果很好,在此之后,我正在检查解析方法是否确实存在于变换器类中,如果它没有,则抛出异常。