2017−10−06 log

EPISODE 29 Session Handling and Flash Messaging
session()->flash('message', 'hello world');
$request->session('message', 'default message here');
$request->session(['message', 'set value to message key']);
EPISODE 30 Tags and Pivot Tables

posts + tags => belongsToMany

class Post extends Model {

    public function tags() {
        return $this->belongsToMany(\App\Model\Tag::class);
    }
}

$post = \App\Model\Post::find(1);
$tag = \App\Model\Tag::find(1);

$post->tags()->attach($tag);
$post->tags()->detach($tag);
効率的なWebアプリケーションの作り方 1章~4章
  • 2章
    • 抽象と実装

役割を持たせたいメソッドを定義。この時点でどんな中身かは気にしない。その役割をプラグラミングに落とし込んだものを実装。役割を持たせるものを定義するのを抽象。

  • 抽象とインターフェース

抽象が定義されていることを保証するために用意されている仕組みがインターフェース

2-2-1の説明が重要 分かりやすい!

メソッドの実装は何も考慮しなくてよい。中でどのようなフィールドを持って、外部にリクエストしてデータを取ってくるようなどのような処理をしようが、何の役割を担ってくれるかだけを気にすれば良い。プラグラミング的に考えると、何を引数にとって、何を返してくれるかという抽象的な点についてのみを気にすれば良い。役割を担ってくれた側の状態や振る舞いなどを隠蔽することを(その結果を?)カプセル化と言う。

  • アクセサのメリット、カプセル化のメリット 説明が分かりやすい!

変更する箇所が狭められる

ドメインにどのようなオブジェクトが存在し、どのようにオブジェクトが作用するかを考えてアプリケーションを設計するか

  • インターフェースを中心に設計する

実装と抽象を分離することがオブジェクト指向で開発するコツ。

  • 継承

継承を使った際に注意することは、継承基の親クラスの振る舞いを維持しているかどうか。親に対してできる処理は子でも行える必要がある。この決まりを守らないと、メソッド呼び出しに失敗したり、おかしな条件分岐があちこちに記述されているなどの問題につながる

  • 委譲

抽象を再利用したい場合は継承を、実装を再利用したい場合は委譲を

  • オブジェクト指向設計原則
    • オープン・クローズドの原則 説明分かりやすい!
    • 実装に依存しないで、抽象に依存する