duandan9680 2017-04-03 17:09
浏览 42
已采纳

在Laravel中实现与Cache :: disk('x')类似的功能

This is just a general question around a solution I'm trying to find.

I have potentially many providers of the same type of service and I need a way to be able to have a default, but then also manually call a switcher method to change them.

Currently, I've bound an Interface to an Implementation via configuration settings and this works well - but it means I can only support one active provider per type of service.

I noticed the Cache::disk() method is really what I'm looking for, but I'm not sure where this type of switch method should be defined.

Current:

interface IProvider {

    public function getServiceInfo($args);

    public function setServiceInfo($args);

}

class GoldService implements IProvider {
    // implementation of the two interface methods

}

class SilverService implements IProvider {

}


// ProviderServiceProvider

public function register()
{
    $this->app->bind(
        App/IProvider,
        App/GoldService
    );
}


// Controller

public function getServiceInfo(Service $serviceId) 
{
    $provider = $app->make('App/IProvider');
    $provider->getServiceInfo($serviceId);
}

Want to have.

// What I want to be able to do
public function getServiceInfo(Service $serviceId)
{
    // Using a facade

    if ($serviceId > 100)
    {
        Provider::getServiceInfo($serviceId);       
    }
    else 
    {
        Provider::switch('SilverService')
            ->getServiceInfo($serviceId);
    }
}

I know I've thrown in an additional requirement there of the Facade - not sure if I've confused Contracts/Facades here - but essentially I want the interface to enforce the instance methods, but Facade for easy access to the instances.

Not really looking for code here - that'll be the easy part. I'm just not sure I've really grok'd this and looking for a nudge in the right direction..

展开全部

  • 写回答

1条回答 默认 最新

  • dpz1983 2017-04-03 17:20
    关注

    Using an interface to ensure a service implements the methods you require makes sense.

    But with regard to using a different service based on the properties of an object instance; that sounds more like the Factory pattern to me.

    http://www.phptherightway.com/pages/Design-Patterns.html

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部