タグ

ブックマーク / phpmentors.jp (18)

  • 「Lean Architecture / DCI Evening」参加レポート

    2017年10月18日、James Coplienさんとその奥様であるGertrud Bjørnvigさんをお招きして、「Lean Architecture / DCI Evening 」というイベントを開催しました。日ではソフトウェアパターンやアジャイルのリーダーとして知られるJames Coplienさんは、『 マルチパラダイムデザイン 』(1998年)でドメインとドメイン間の関係を中心に据えた設計パラダイムを提唱していました。Coplienさんは2009年、MVCアーキテクチャの考案者である Trygve Reenskaug さんと共に「DCIアーキテクチャ」を発表しました。2010年、CoplienさんはGertrudさんとともに書籍『 Lean Architecture 』を上梓、トヨタ生産方式をソフトウェアアーキテクチャに適用するリーンアーキテクチャについて、DCIアーキテク

    「Lean Architecture / DCI Evening」参加レポート
  • 状態ではなく、振る舞いをモックせよ

    TL;DR GOOS『実践テスト駆動開発』で触れられている「ロールをモックせよ」について、違った角度で解説ドメインモデルを豊かにすることでコードがシンプルになる例Mock Behaviors, Not Statesユニットテストを記述する際、テスト対象のオブジェクトが利用しているオブジェクト(依存オブジェクト、隣接オブジェクト)はモックオブジェクトにして、テストしたい状況をテストコード側からコントロールします。しかし、闇雲にモックを使ってテストを記述すれば良いわけではありません。今回は、モックが有効に機能するテストとはどういったものなのかを解説します。 サンプルコード簡単なサンプルで説明します。Extract Till You Dropのモデルと近いものを使います。グループ、メンバー、およびグループリポジトリがあります。グループオブジェクトはインメモリでは所属メンバーの情報を保持しておら

    状態ではなく、振る舞いをモックせよ
  • PHPメンターズ -> 第40回IT勉強宴会モデリング競演2でDDDのモデリングについて発表しました

    2018年1月10日に開催された DCI Tokyo 1 に続き、2018年3月27日に DCI Tokyo 2 が開催されました。今回も James Coplien @jcoplien さんをお招きしてのトークセッションとなりました。会場は 株式会社ヴァル研究所 様に提供していただきました。 セッションは、前回同様 @remore さんと @ganchiku さんによる同時通訳とともに進められました。 今回のテーマはマルチパラダイムデザイン(Multi-Paradigm Design: MPD)の中核を成し、DCI / リーンアーキテクチャ(Lean Architecture)とも深く関係する 共通性/可変性分析 でした。 レポートは @smori1983 が担当させていただきます。 当日の様子は Coplien さんの許可を得て YouTube の DCI Tokyo 公式アカウントに

    PHPメンターズ -> 第40回IT勉強宴会モデリング競演2でDDDのモデリングについて発表しました
  • DIとサービスロケータの違い

    DIとサービスロケータは、いずれもオブジェクトの構築と依存の解決という仕事を切り出すためのパターンです。ところで、この2つのパターンの違いを明確に説明できるでしょうか? Pimpleでシンプルに正しくDIを理解する のコードは以下のようになっていました。 <?php require_once '../vendor/pimple/pimple/lib/Pimple.php'; // インフラ interface MailerInterface { public function send($body); } class SendmailMailer implements MailerInterface { public function send($body) { } } // ドメイン class NewsletterTransfer { protected $mailer; public

    DIとサービスロケータの違い
    escape_artist
    escape_artist 2014/10/24
    取りにいくとSL、受け取るとDI、みたいな。
  • 「ドメイン駆動設計読書会@大阪」第8回感想

    概念的な同一と認識するもの 同一性は追跡できるようにしておくこと 同一性を間違えると、データ破損に繋がる

    「ドメイン駆動設計読書会@大阪」第8回感想
  • 「速く、簡単に、もっときれいに:DIコンテナとサービスロケータを区別する方法について」を翻訳しました

    PHPメンターズ道場生 kumamidori です。 PHPのエキスパートとして世界的に知られている方の1人に、Paul M. Jonesさんがいらっしゃいます。 フレームワーク「Aura for PHP」のリードであり、PHP-FIGの策定メンバーに入られている方です。 通称 pmjones さんのブログで、昨年末、DIに関する下記エントリがありました。 「Quicker, Easier, More Seductive: How To Tell A DI Container From A Service Locator」 興味深い内容のようだったので、翻訳しました。翻訳記事の公開について、著者ご人から快諾頂けたため、掲載させて頂きます。 文中にあるとおり、この記事に対する訂正として、「Quicker, Easier, More Seductive: Names, Usage, and

    「速く、簡単に、もっときれいに:DIコンテナとサービスロケータを区別する方法について」を翻訳しました
  • Pimpleでシンプルに正しくDIを理解する

    オブジェクト指向でソフトウェアを実装していると、オブジェクトの生成に一連の手続きが必要なものがでてきます。このような生成に関する手続きがあちこちのソースコードへ散在すると、望ましくない状況になることは想像に難くないでしょう。この問題に対処するために、Simple FactoryやFactory Methodといったデザインパターンがあり、オブジェクトの生成に関する手続きや関連オブジェクトも含めたオブジェクトの構成(オブジェクトコンストラクション)に関する知識は1箇所にまとめるということが定石となっています。 しかし、単にファクトリーを導入するだけだと、オブジェクトの構成処理は分離・隠蔽できても、利用オブジェクトがファクトリー自体に依存してしまうことになります。このような試行錯誤の歴史から登場したのがDependency Injection(依存性の注入)パターンです。Dependency

    Pimpleでシンプルに正しくDIを理解する
  • WEB+DB PRESS連載「巨人の肩からPHP」最終回

    2014年2月22日に発売となるWEB+DB PRESS vol.79をもちまして、11回にわたり連載した『巨人の肩からPHP - 先人たちに学ぶモダンプログラミング』が最終回となりました。 WEB+DB PRESS Vol.79|技術評論社最終回はSymfonyに新しく追加された式言語エンジンであるExpressionLanguageコンポーネントについて、基礎的な解説とフレームワークにどのようにインテグレーションされているのかを解説しています。インテグレーションの仕方を見ることで、拡張性の高いアーキテクチャーとはどういったものなのかも垣間見えるのではないかと思います。是非お手にとっていただけると幸いです。 式言語 | Symfony2日語ドキュメント連載を終えてこのように書くと気を悪くされる読者の方もいらっしゃるかもしれませんが、巨人の肩からPHPというテーマ、これは私自身にとっても

    WEB+DB PRESS連載「巨人の肩からPHP」最終回
  • PHPにおける宣言的集合操作入門:Ginq

    配列、連想配列といったデータの集まり - 集合に対する操作は、日々のプログラミングにおいて頻繁に記述するコードの1つです。その一方で、旧来の愚直なループを使った集合操作はコードを複雑にする大きな要因となります。これに対処するために、Microsoftは統合言語クエリ:LINQ(Language-Integrated Query)を開発しました。LINQ to Objectsのページには、LINQを使うメリットとして次のように説明があります。 質的に、LINQ to Objects は、コレクションを扱うための新しい方法です。 従来の方法では、複雑な foreach ループを記述して、コレクションからどのようにデータを取得するかを指定する必要がありました。 LINQ を使用する場合は、何を取得するかを表す宣言コードを記述します。 また、LINQ クエリには、従来の foreach ループと

    PHPにおける宣言的集合操作入門:Ginq
  • Beyond MVC

    PHP Advent Calendar 2013 - 6日目 昨日は@fivestrさんのComposerを使った簡単Travis CI設定でした。 TL;DR オブジェクト指向/MVCでうまく捉えきれていなかったものは何なのか?MVCから続くソフトウェアアーキテクチャーの「その先」は何なのか?Reenskaug博士を知っていますか? WikipediaによればReenskaug博士は1930年生まれ。MVCという概念が世の中に送り出された論文『MODELS - VIEWS - CONTROLLERS (pdf)』は1979年ですから、49歳の時ということになります。1960年からソフトウェアを書き始め、1973年からオブジェクト指向でソフトウェアを開発しており、現在でも現役でソフトウェアの世界にいらっしゃいます(ex 2009年の講演)。「プログラマ歴42年 (* Clean Coder

    Beyond MVC
    escape_artist
    escape_artist 2013/12/06
    これが師匠力…ッ!みたいな記事。あとでじっくり読みます
  • 「オブジェクト設計エクササイズ -チームモデリングで学ぶドメイン駆動設計-」に参加しました

    10月5日(土)にLearning Community Factory主催で開催された「オブジェクト設計エクササイズ -チームモデリングで学ぶドメイン駆動設計-」に参加しました。 オブジェクト設計エクササイズ -チームモデリングで学ぶドメイン駆動設計-講師は増田亨さん(@masuda220)です。これまでに第1回(オブジェクト設計エクササイズ -コードで覚えるオブジェクト設計-)、第2回(オブジェクト設計エクササイズ -モデルとコードで学ぶ責任駆動設計-)と開催されたオブジェクト設計エクササイズシリーズの3回目ということでした。私はこの回が初めての参加でした。 内容と感想最初に増田さんからドメイン駆動設計についての基的な考え方を簡単に説明いただいた後、モデリングのお題が発表され、そのお題のドメインモデリングを行うといったものでした。4名〜6名、ほぼその場で初めて出会う人がチームになって、

    「オブジェクト設計エクササイズ -チームモデリングで学ぶドメイン駆動設計-」に参加しました
  • 鈍器のような書籍から「何を」「どのようにして」学ぶか

    私たちがこのブログやカンファレンスの講演、勉強会で解説している内容の多くは、メンターズ推薦図書としても紹介している次のような書籍から学べる内容がベースになっています。 エリック・エヴァンスのドメイン駆動設計ジェネレーティブプログラミングアジャイルソフトウェア開発の奥義etc・・・これらソフトウェア関係での名著のほとんどが「鈍器」と揶揄されるほど分厚く、また分厚さもあって、なかなか読みこなせないという声も耳にします。私自身がこのような鈍器たちとどのように向き合っているのか、今も継続している方法を紹介します。 名著が名著と呼ばれる所以は、そこに学べる質がたくさん詰まっているからでしょう。しかし、その質というものは簡単に学び取れるものではありません。 同じというものでも、たとえば小説・物語などであれば、最初から順に読んでいき、どこかで盛り上がりがありストーリーが展開していくことで読み手が退

    鈍器のような書籍から「何を」「どのようにして」学ぶか
    escape_artist
    escape_artist 2013/09/09
    じわじわ読んでます!
  • WEB+DB PRESS PHP連載第8回「Go!ではじめるAOP」を執筆しました

    2018年1月10日に開催された DCI Tokyo 1 に続き、2018年3月27日に DCI Tokyo 2 が開催されました。今回も James Coplien @jcoplien さんをお招きしてのトークセッションとなりました。会場は 株式会社ヴァル研究所 様に提供していただきました。 セッションは、前回同様 @remore さんと @ganchiku さんによる同時通訳とともに進められました。 今回のテーマはマルチパラダイムデザイン(Multi-Paradigm Design: MPD)の中核を成し、DCI / リーンアーキテクチャ(Lean Architecture)とも深く関係する 共通性/可変性分析 でした。 レポートは @smori1983 が担当させていただきます。 当日の様子は Coplien さんの許可を得て YouTube の DCI Tokyo 公式アカウントに

    WEB+DB PRESS PHP連載第8回「Go!ではじめるAOP」を執筆しました
    escape_artist
    escape_artist 2013/09/04
    中身をまだ読んでない
  • BEAR.Sunday meetupに参加しました

    2018年1月10日に開催された DCI Tokyo 1 に続き、2018年3月27日に DCI Tokyo 2 が開催されました。今回も James Coplien @jcoplien さんをお招きしてのトークセッションとなりました。会場は 株式会社ヴァル研究所 様に提供していただきました。 セッションは、前回同様 @remore さんと @ganchiku さんによる同時通訳とともに進められました。 今回のテーマはマルチパラダイムデザイン(Multi-Paradigm Design: MPD)の中核を成し、DCI / リーンアーキテクチャ(Lean Architecture)とも深く関係する 共通性/可変性分析 でした。 レポートは @smori1983 が担当させていただきます。 当日の様子は Coplien さんの許可を得て YouTube の DCI Tokyo 公式アカウントに

    BEAR.Sunday meetupに参加しました
  • 第8回 Symfony勉強会参加&基礎知識セッションスライド等

    5月25日(土)に、日Symfonyユーザー会主催の8回目となるSymfony勉強会が、東京渋谷のVOYAGE GROUP様のAJITOにて開催されました。いつも会場の提供ありがとうございます。 Symfony 勉強会 #8 のお知らせ | 日Symfonyユーザー会勉強会にて、「これだけは押さえておこう!Symfonyの基礎」と題したセッションを担当しました。当日使ったスライドから一部修正したものを公開します。 参考書籍として挙げているものは、PHPメンターズ推薦書籍として紹介しているものでもあります。このブログ左下にリストアップしてあります。 また、参考書籍に挙げているうち「エリックエヴァンスのドメイン駆動設計」について、なかなか読むのが大変という意見を頂きました(よく聞く意見でもあります)。これについて、まずは章のタイトルと文で太字になっているところだけ拾い読みするところからス

    第8回 Symfony勉強会参加&基礎知識セッションスライド等
  • 時計オブジェクト(ドメインクロック)を導入してテスト容易性と意図性を高める

    現在の時刻を扱うロジックがアプリケーションコードに含まれるのは珍しいことではありませんが、これらのロジックのテストは簡単ではありません。以下のコードを見てみましょう。 <?php ... class OrderService { ... public function order(Order $order) { $currentHour = (integer) (new \DateTime())->format('H'); if ($currentHour >= 10 && $currentHour < 21) { ... } else { throw new OrderException('ご注文は午前10時から午後9時まで!'); } } ... 実際の現在の時刻に依存せずにif文の条件をテストする1つの方法は、DataTimeオブジェクトの生成部分をメソッドとして抽出し、そのメソッド

    時計オブジェクト(ドメインクロック)を導入してテスト容易性と意図性を高める
    escape_artist
    escape_artist 2013/04/03
    tumblrだったのか(今更
  • Zend\Diを使ったDIの自動ワイヤリング

    「Pimpleでシンプルに正しくDIを理解する」の記事では、シンプルなDIコンテナPimpleにオブジェクトの依存関係の知識を集約する方法について解説しました。Pimpleの場合はサービスオブジェクトのファクトリーとして機能する無名関数の中に依存オブジェクトを記述しました。このように、実際に利用する依存オブジェクトを決めることをワイヤリングと呼びます。 今回は、ほぼ同一のオブジェクトモデルに対して、Zend Framework 2.0のDIライブラリ(Zend\Di)を使うように置き換えてみます。一般的にDIを扱う場合、依存関係の定義とワイヤリングのために何らかのコード―これは何らかの設定言語だったりプログラミング言語だったりします―を記述しなければならず、ある程度の規模以上のモデルクラス群をDIコンテナで管理する場合、定義のコーディング量がばかにならくなってきます。しかし、型を持ったプロ

    Zend\Diを使ったDIの自動ワイヤリング
  • print_oで複雑な構成のオブジェクトグラフをビジュアライズする

    PHPにはvar_dump()という関数があり、階層構造を持つオブジェクト(オブジェクトグラフ)をテキスト表現にできます。この情報を、グラフィカルで直感的に分かりやすい形式で出力するためのユーティリティがprint_oです。@koriymさんが開発されています。 koriym/print_o An object graph visualizer for PHPprint_oのインストール方法print_oはPHPのライブラリとしては単独で利用可能です。Webブラウザへの描画用に外部のJavaScript/CSSを利用していますが、これらはGoogleGitHubホストされたファイルを読み込むようになっています。したがってインターネットに接続された環境であれば、print_o体のインストール以外に特別な手順は不要です。 たとえばcomposerを利用する場合は、composer.jso

    print_oで複雑な構成のオブジェクトグラフをビジュアライズする
  • 1