なるべくtraitを使っていってファットモデルをなくしていきたい
traitを作るべきタイミング
- 異なるモデルに同じ処理を書くことになったとき
traitの例
例)データを登録するメソッド
<?php
namespace App;
use Illuminate\Support\Facades\DB;
trait Register
{
/**
* DB登録処理
*
* @param array $attributes
* @return bool
*/
public function register(array $attributes)
{
DB::beginTransaction();
try {
$this->create($attributes);
DB::commit();
return true;
} catch (\PDOException $e) {
DB::rollBack();
return false;
} catch (\Exception $e) {
return false;
}
}
}
traitの使い方
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Example extends Model
{
use \App\Register; // このクラス内で使うtraitをuseする
public function store($attributes)
{
return $this->register($attributes); // あたかもこのクラスにあるメソッドのように扱える
}
// 以下略
}
traitのテスト
例)traitを使うことができるかのテスト(PHPUnit)
<?php
use App\Register;
class RegisterTest extends TestCase
{
public function test_Registerのtraitを使うことができる()
{
$mock = $this->getMockForTrait(Register::class);
$this->assertInternalType('object', $mock);
}
}
おわり
- traitのテストって↑以外のテストしなくていいんですかねぇ・・・?
- traitを作るべきタイミングって他にもあるんですかね?
- むやみやたらに作るもんでもないので厳選していきたい