在哪里以及如何提取重复的业务逻辑?
Where and how to extract repeated business logic?
我有某些业务逻辑在我的代码中重复出现。对于 4.2 版,是否有一种标准化的方法将其分离出来?我知道在较新的版本中,Command
s 用于此类事情。重复逻辑示例:
// 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
并为此逻辑添加方法,例如 createTag
、attachTagToCard
等。但是,我不确定是否已经有 "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的所有功能,自由使用。
我有某些业务逻辑在我的代码中重复出现。对于 4.2 版,是否有一种标准化的方法将其分离出来?我知道在较新的版本中,Command
s 用于此类事情。重复逻辑示例:
// 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
并为此逻辑添加方法,例如 createTag
、attachTagToCard
等。但是,我不确定是否已经有 "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的所有功能,自由使用。