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

Where and how to extract repeated business logic?

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

// 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);
    }
}

我能做到的最简单的方法是创建一个新的 class,例如 TagManager 并为此逻辑添加方法,例如 createTagattachTagToCard 等。但是,我不确定是否已经有 "predefined" 方法可以做到这一点。

使用traits可以解决重码问题。 有关特征的更多信息,请转到 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;
}

现在controller将继承trait的所有功能,自由使用。