LoginSignup
0
0

More than 3 years have passed since last update.

【備忘録】Laravelで学ぶ、依存性

Posted at

どうもこんにちは!
先日プログラミングスクールを卒業し、11月からの入社に向けて、Laravelをやり始めた者です。
スクールでrailsを使用していた際は、依存性とか全く気にせず全ての処理をコントローラーに書き込んでいたのですが、Laravelをビジネスで使う上では、依存性の注入(DI)という概念が大事になってくるぽいので、
まとめてみようかなと思います。

依存度を下げる=機能分割する→変化に強い

ある値が処理の中で何度も登場するときは変数にしておきましょうという話は聞いたことがあると思います。

Hello.rb
def hello
  puts "こんにちは!田中くん!"
  puts "こんにちは!山田くん!"
  puts "こんにちは!野口くん!"
end

ってやるより

Hello.rb
def hello
  hello= "こんにちは!"
  puts "#{hello}田中くん!"
  puts "#{hello}山田くん!"
  puts "#{hello}野口くん!"
end

ってしておいた方が例えば「こんにちは」から「こんばんわ」にしたい時、変更点は一箇所だけだし、修正ミスが起こる可能性も一箇所だけだから低いですよね。あと今回は3つしかputsがないので、あれですけども、例えば100近く同じ記述があったら、、、って考えるとよく利便性がわかると思います。
変数として処理の外から値を注入することで、値が1つ1つの処理に左右されていない、依存度が低い状態になっています。

Controllerとかでの話

スクール時代に書いていたContoroller(railsの例)

rails_controller.rb
class UsersController < ApplicationController

  def index
    if params[:keyword]==""
      @users=[]
    else
      @users = User.where('name LIKE ?', "#{params[:keyword]}%").where.not(name: "#{current_user[:name]}").limit(15)
    end
    respond_to do |format|
      format.json
    end
  end

indexの所にどっさり処理が書かれていますよね。

違う言語になるのであれですけど、
Laravelで依存度を低く意識した記述がこんな感じ

TweetController.php
    public function store(TweetRequest $request)
    {
        TweetService::CreateTweet($request['content']);
        return redirect('/tweet');
    }

TweetService::CreateTweetはLaravelのクラスメソッドの書き方で、
別途用意したServiceClassに処理を書いて、それをコントローラー内で呼び出してます。

TweetService.php
  public static function  CreateTweet($request)
  {
    $content= $request;
    $tweet = new Tweet($content, Auth::id());
    $tweet->save(); //TweetController@storeへ
  }

まぁ今はとりあえずはこんな感じで。
11月からの実務を経験して知識補完し次第追記か、別途人にお見せできるレベルの文を書いてみたいと思います。

0
0
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
0
0