[go: up one dir, main page]
More Web Proxy on the site http://driver.im/ PHP Mentors (Posts tagged aop)
1.5M ratings
277k ratings

See, that’s what the app is perfect for.

Sounds perfect Wahhhh, I don’t wanna

BEAR.Sundayチュートリアル・スクリーンキャスト

プログラミング道場生 kumamidori です。

5月31日に、Nagoya.php vol.5 に参加しました。

vol.5 のテーマは、「PHPフレームワークの1つであるBEAR.Sundayを触ってみよう」でした。 参加者全員で、BEAR.SundayワークショップWiki(チュートリアル)の内容に取り組みました。 私が見つけられた範囲だと、@kenji_sさん、@qckanemoto さんがブログにまとめられていますので、そちらをご覧頂ければと思います。記事の文末にそのリンクを貼ります。

BEAR.Sundayチュートリアル・スクリーンキャスト

この記事では、スクリーンキャストで、BEAR.Sundayチュートリアルのデモを、初心者なりの解説をまじえつつ紹介します。(見る人、誰もいないかもしれませんけれど・・・。)

※今回動画を掲載することについて、フレームワーク作者に事前に許可を頂いております。

PHPカンファレンス関西について

BEAR.Sundayの作者である郡山さんは、6月28日(土)に開催されるPHPカンファレンス関西2014の基調講演をされる予定です。関西方面でご興味のある方は、懇親会の方にも申し込みされると良いかと思います。@hidenorigotoさんも遠方から来訪、参加されるそうです。

参考リンク

BEAR.Sundayに関するリンク
スクリーンキャスト内で引用した書籍

PHPメンターズブログにおける関連記事
Nagoya.php vol.5 に関するリンク

※6月29日追記:

名古屋の方から、「写真、撮っていましたよね?」とリマインドを頂いたので、貼っておきます。

image
dojo bear.sunday dependency.injection aop

BEAR.Sunday meetup #3 in Osaka 参加レポート

プログラミング道場生kumamidoriです。

PHPフレームワークの1つに、「BEAR.Sunday」があるのをご存知でしょうか。

リソース指向のOSSフレームワークで、郡山さん(@koriym)によって開発されています。

去年イギリスで行われたカンファレンス、「PHPNW2013」では、BEAR.Sundayのアーキテクチャを紹介するセッションがありました。

私は以前、旧バージョンにあたる「BEAR.Saturday」の方を仕事で使っていました。新しいBEAR.Sundayついては、初学者の状態で、さわる機会もあまりなかったのですが、気になっていました。2013年7月には、BEAR.Sunday meetup #2の主催をさせて頂いたこともありました。

そのようないきさつがあり、4月7日、BEAR.Sunday meetup #3 in Osakaを開催することになりました。 郡山さんに、PHPNW2013でのセッションをアップデートした内容で再演して頂きました。

参加者を引き込む素敵なセッションをして下さり、ありがとうございました。

また、会場提供を引き受けて下さった1x1株式会社新原さん(@shin1x1)に、お礼申し上げます。

この記事では、セッション内容の抜粋と、個人的感想を書きます。

1. セッション内容の抜粋

1-1. なぜ新しいフレームワークを作るのか

- Quality と Agility の時代

Webアプリケーションは、長期的に改善し続けていく必要のあるものである。Quality と Agility の時代と言える。 Agilityとは、「すぐに変更することが可能である」ということ。

PHP5.3以降のPHPフレームワークには、単に「動くものを速く作る」のとは、少し違った流れがあった。 多くのPHPフレームワークが揃ってDIを採用したことは、その一例と言える。

- フレームワーク、アーキテクチャ

大事なのは、あなたは何をしたいのか?ということ。 「自分たちのドメインの問題」を解決するためのフレームワークを持つことに意味がある。

PHPNW2013の来場者が興味を持っていたのは、「次のアーキテクチャは何か?」ということだった。 たとえば、Symfony1 から 2 へ、Zend1 から 2 へ、成功したフレームワークはどれも、ユーザが「バージョンアップのための、大幅な書き直し」を経験してきた。 Symfony2 から 3 で、またあれをやらなければならないのか?!という問題がある。そういった問題を、どのような技術で解決できるのかという視点、アーキテクチャの選定、という意味で、新しいものを探そうという動機から、BEARのセッションを聞きに来てくれた。


1-2. PHPNW2013「A resource orientated framework using the DI /AOP/REST Triangle」再演


(※NW2013当時の、作者ご本人のプレゼンテーション内容紹介エントリーを見て頂く方がエッセンスが伝わると思うので、そちらをご参照頂ければと思います。 私の記事では、背景、前提となる知識の部分に話題を絞ってメモします)。

BEARはアプリケーションフレームワークだけれども、ライブラリを持たない。良いライブラリは既存でたくさんあるから、再発明の必要が無い。

そもそも、フレームワークとは何か?

広義の意味:

imposes a set of design constraints on end-user code.

エンドユーザのコードに対して、設計上の全体的な制約を与える。 (by Nate Abele)

狭義の意味:

「呼ぶ」側-「呼ばれる」側の関係が逆転して、「呼ぶ」側をフレームワークが最初からお膳立てし、「呼ばれる」側だけをユーザが書く。

BEARの場合は?:呼ぶ側もユーザが書く。


BEAR.Sundayは、3つのオブジェクトフレームワークを持つ。

(1) DI Framework

前提知識となる Dependency Inversion Principle (依存関係逆転の原則、DIP)についての話があったのですが、文末の参考リンクに詳しい解説があるので、ここでは省きます。

(2) AOP

  • たとえばあらゆるモジュールに散在してしまうロギングのような、 横断的関心事(Cross-Cutting Concerns)を分離することで、 モジュール間を疎結合とするプログラミングパラダイムのこと。
  • アプリケーションロジック(ログ、キャッシュ、etc…)とドメインロジック(コアの関心事)を分離する。

(3) REST(Hypermedia Framework)

オブジェクトをWebサービスのように扱う。

RESTとは:クライアントとサーバにWebは分かれている。決まったメソッドしか使えない。リクエストは1回だけで、ステートレスである。

このアーキテクチャを、OOPアプリケーションの内部に適用している。リソースとリソースをハイパーリンクによってつなぐことができる。

情報に真の意味での価値を与えるのはそのつながりである。

実装を直接書くのではなく、まず、抽象化された意図を記述する。次に、その意図に役割を与えて動かす(実装を結合する)。

セッション内容については以上となります。

2. 個人的感想

下記が分からなかったので、今後調べていきたいと思いました。

  • 他の言語、たとえばRubyでは、変更の安全性(ある1箇所を直したら、あちこちに影響が出たり、予想もしないところに作用が出たり、といったことを防ぐ)を、どう担保しようとしているのか?
  • 複雑なロジックでも、DIのランタイムとコンパイルの分離で表現できるのか?
  • セッションの中で出てきた、「staticコールだとAOPはうまくいかない。インターフェイスでないとうまくいかない。」という話のくだりのところが理解できなかった。自動生成の仕組みを調べておきたい。

やはり、熟練者でないと、実際に使ってみないとよくわからないので、小さなモノを作ってみるところから始めてみたいと思います。

image

(今回一緒に主催をしてくれた @atakig さんが直立不動の写真を載せておきます)。

関連リンク

過去に開催されたイベント

参考

BEAR.Sundayの紹介記事です。

Dependency Inversion Principle (依存関係逆転の原則)、DIに関するリンクです。

dojo bear.sunday aop rest dependency.injection

WEB+DB PRESS PHP連載第8回「Go!ではじめるAOP」を執筆しました

image

notice プログラミング言語Goの話ではありません。

技術評論社WEB+DB PRESSのPHP連載「巨人の肩からPHP - 先人たちに学ぶモダンプログラミング」の連載第8回「Go!ではじめるAOP 横断的関心事の分離とその実装」を収録したvol.76が発売されました。

第8回では、AOPの用語や特徴などの解説と、Go!というAOPライブラリを使ってアスペクトを自作して適用するサンプルの解説を行っています。小さなコードでアスペクトの作成とポイントカットの指定等行っているので、実際に書いて動かしてAOPを理解したい方におすすめです。

webdbpress aop