LoginSignup
2
1

More than 1 year has passed since last update.

単一責任の原則@Laravel

Last updated at Posted at 2021-09-15

単一責任の原則について調べていると「クラスとメソッドは1つの責任だけを持つべき」など諸々調べると出てくるが、概念的にはわかるもののいまいちコードに反映することができていなかったので、モヤっとしていた。
そんな時に、いい感じのサイトに出会えたので勉強がてらまとめておく。

いい感じのサイト↓
Laravelベストプラクティス

実際にコードを見てみる

以下に登場するコードは上記のサイトから転記したものです。

単一責任の原則に反するコード

public function getFullNameAttribute()
{
    if (auth()->user() && auth()->user()->hasRole('client') && auth()->user()->isVerified()) {
        return 'Mr. ' . $this->first_name . ' ' . $this->middle_name . ' ' . $this->last_name;
    } else {
        return $this->first_name[0] . '. ' . $this->last_name;
    }
}

あー。ifの条件がちょっと複雑だけどこうやって書いちゃうな..ってのが正直な感想です。
名前の作成の部分が、複雑でちょっと何しているかわかりにくいなとは思います。

「〜〜〜の修正お願い!」と頼まれても「えーと。ここのifの中身は〜〜〜」「なんか文字列結合しまくってるけどなんやろこれ?」ってなりそうな感じがします。

単一責任の法則に則ったコード

// これがメイン
public function getFullNameAttribute()
{
    return $this->isVerifiedClient() ? $this->getFullNameLong() : $this->getFullNameShort();
}

// 認証認可関連
// ここもうちょいどうにかならんのか?と少し感じる
public function isVerifiedClient()
{
    return auth()->user() && auth()->user()->hasRole('client') && auth()->user()->isVerified();
}

// 名前の取得①
public function getFullNameLong()
{
    return 'Mr. ' . $this->first_name . ' ' . $this->middle_name . ' ' . $this->last_name;
}

// 名前の取得②
public function getFullNameShort()
{
    return $this->first_name[0] . '. ' . $this->last_name;
}

感想としてすごいわかりやすいなーと思いました。

getFullNameAttribute()だけ読めば「ああなるほど」となります。

修正を加える際にも、「ここを修正すればいいな」「ここは今回は関係ないな」というのが明確にわかのではないかと思います。

まとめ

綺麗なコードが書きたい。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1