在何处以及如何提取重复的业务逻辑?

时间:2016-08-16 20:54:31

标签: laravel laravel-4 dry

我有一些在我的代码中重复的业务逻辑。是否有标准化的方法将版本4.2分离出来?我知道在较新的版本中,Command用于此类事情。重复逻辑的例子:

// detach tags
$card->tags()->detach();

foreach (Input::get('tags', []) as $tag)
{
    // existing tag
    if (is_numeric($tag) && Tag::whereId($tag)->exists())
    {
        $card->tags()->attach($tag);
    }

    // new tag
    else
    {
        $new_tag = new Tag();
        $new_tag->market()->associate($market);
        $new_tag->name = $tag;
        $new_tag->save();

        $card->tags()->attach($new_tag->id);
    }
}

我能做到这一点的最简单方法是创建一个新类,例如TagManager并为此逻辑添加方法,例如createTagattachTagToCard等。但是,我不是确定是否已经采用“预定义”方式进行此操作。

1 个答案:

答案 0 :(得分:1)

重复的代码问题可以通过使用特征来解决。 有关特质的更多信息,请转到here

app / traits

文件夹中创建一个名为 TagManagerTrait.php 的文件

文件内容

<?php
namespace App\Traits;

trait TagManagerTrait {

public function createTag()
{
    // your create tag logic
}


public function updateTag()
{
      //your update tag logic
} 

}

更新您的composer.json以自动加载此

{
    "autoload" : {
        "classmap" : [
           "app/traits"
        ]
    }
}

在要使用重复代码的控制器中

<?php
use App\Traits\TagManagerTrait;

class XyzController extends Controller{

    use TagManagerTrait;
}

现在控制器将继承该特征的所有功能并可以自由使用。