タグ

phpmentorsに関するinnx_hidenoriのブックマーク (87)

  • Practical Symfony #24: ダイナミックなコンフィギュレーショングラマー

    Symfonyフレームワークの動作を設定するコンフィギュレーションとその背後の仕組みは、Symfonyのアーキテクチャを支える強力な屋台骨となっています。この仕組みの応用例の1つとして、コンフィギュレーションエントリをダイナミックに定義する仕掛けを見てみます。 通常のコンフィギュレーション通常の静的なコンフィギュレーションは、バンドル内のDependencyInjectionディレクトリ以下にConfigurationクラスを用意し、そこで定義されたツリー構造に従って読み込まれます。コンフィギュレーションクラスの例は設定の仕様とは等を参照してください。この場合、あらかじめ固定のコンフィギュレーショングラマーがあり、それにもとづいてコンフィギュレーションファイルに設定を記述し、そのファイルの設定を読み込んでサービスコンテナが動作します。 アプリケーション開発の多くの場面ではこのような静的な定

    Practical Symfony #24: ダイナミックなコンフィギュレーショングラマー
  • DevLOVE名古屋「オブジェクト設計とリーン開発、その実践」に参加しました

    2014年5月17日に名古屋で開催されたDevLOVE名古屋「オブジェクト設計とリーン開発、その実践」に参加してきました。その個人的な感想です。 向かい続けることが理想市谷さんのリーン開発のお話後半で、『リーン開発の現場 カンバンによる大規模プロジェクトの運営』に出てくる次の言葉を紹介されていました。 理想とはたどりつくべき場所のことではなく、 ありたい姿に向かい続けることなんだ! Henrik Kniberg著『リーン開発の現場 カンバンによる大規模プロジェクトの運営』オーム社 2013年 p. 109 私個人もこの種の言葉は大好きです。そして、この種の言葉の背後にある価値観こそ、私がソフトウェアエンジニアとして、プロフェッショナルとして、持っていたいと常々感じているものでもあります。こういった価値観は、少なくともソフトウェアエンジニアとしての仕事の様々な局面で必要となる判断に、大きく影

    DevLOVE名古屋「オブジェクト設計とリーン開発、その実践」に参加しました
  • Practical DDD #3: モデルの深さ

    ドメイン駆動設計の「モデルの深さ」などについての考察、前回の続きです。 Practical DDD #2: 責務のレイヤーとPolicy-Control-Operation前回の記事では、エリック・エヴァンスのドメイン駆動設計で書かれているモデルの深さというのは分かりづらいので、別の尺度としてモデルに表れる概念群の凝集度を考えてみてはどうか、ということに触れました。また、ユビキタス言語にあらわれる概念と概念が互いに関連しあい、述語でつながっていれば、パターンランゲージのようにドメインの知識を豊かに伝えることができるでしょう。 今回はドメイン駆動設計第1章の最後のストーリーで到達した「船荷証券(ふなにしょうけん)」というものから、モデルの深さについて考えてみます。 そもそも海運ドメインについて私には海運ドメインについての知識がありません。エヴァンス氏自身がそうだったのかはさておき、ドメイン駆

    Practical DDD #3: モデルの深さ
  • 設定の仕様とは

    設定の仕様をどう表現するのか、という趣旨の記事がありました。 設定の仕様をドキュメントに書くのではなく、テストにしてしまう - $shibayu36->blog;設定のクラスを作るとすっきりしそう - hitode909の日記 設定はDSLであるこのブログの過去記事(Pieceの中のSymfony #4: Configコンポーネント)やWEB+DB PRESS vol.75でも書いていますが、設定とはDSLです。ですから、設定の仕様というのはDSLの言語仕様として表現するのが適切です。DSLという抽象によって、内部でどのように問題が解決されるのかということと、設定の記述とが切り離されます。 PHPでの実装例(Symfony/Config利用)以降はPHPでの例になりますが、過去記事と同じくSymfony/Configコンポーネントを利用して、同じ設定ファイルを読み込むDSLを実装してみまし

    設定の仕様とは
  • Practical DDD #2: 責務のレイヤーとPolicy-Control-Operation

    2014年4月6日に大阪で開催された第4回ドメイン駆動設計読書会@大阪に参加しました。読書会の内容のまとめなどはWikiの方をご参照ください。今回は第1章の知識のかみ砕き、深いモデルと第2章ユビキタス言語の前半を読み、ディスカッションしました。ディスカッションで得られた気付きとこれまでに私が考えていたこと、ドメイン駆動設計の後半に出てくる「責務のレイヤー」などとのつながりについて、考察してみます。 モデルの「深さ」とは何かモデルに対して深いのか浅いのかについて、ドメイン駆動設計で何か客観的な指標が示されているわけではありません。あくまでエヴァンス氏の主観でしかないと言えますし、開発者が取り組んでいるドメインやコンテキストに依存するものでもあります。ドメイン駆動設計においては、モデルの深さを探求していくことが大きな目標の1つとされており、「深いモデル」という言葉が開発者同士の共通語になっては

    Practical DDD #2: 責務のレイヤーとPolicy-Control-Operation
  • 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」最終回
  • Practical Symfony #23: ドメインの知識を使ったフォームバリデーション

    フォームは、PHPメンターズの設計と実装の型で述べているように、アプリケーションレイヤーにて実装されます。今回はフォームのバリデーションの拡張についてとりあげます。 バリデーションの仕組みの基ユーザーが入力した値を受け取り、アプリケーションのフォームでその入力を表すオブジェクト(フォームのデータを格納する入れ物、フォームDTO: Data Transfer Objectと名づけます)が組み立てられます。このフォームDTOの持つデータが妥当かどうかをチェックするのがバリデーションの役割です。 バリデーションはフォームDTOに対して行われるため、SymfonyではフォームDTOクラスにバリデーションの定義を記述します。 class Author { /** * @Assert\NotBlank() * @Assert\Length(min = "3") */ private $firstNa

    Practical Symfony #23: ドメインの知識を使ったフォームバリデーション
  • Pieceの中のSymfony #1: Finderコンポーネント

    Piece FrameworkのプロダクトのひとつStagehand_TestRunnerは、CLIでユニットテストを実行するための継続的テストランナーです。Stagehand_TestRunner v3の実装には多くのSymfonyコンポーネントが使われています。コンポーネントはソフトウェアにおける部品を指す用語です。SymfonyコンポーネントはPEARパッケージと同様単体で使えるライブラリパッケージであり、多くのものは簡単に導入することができます。 Symfony FinderコンポーネントFinderコンポーネントはファイルとディレクトリを検索するためのパッケージであり、簡潔かつ強力な検索式や、流れるようなインターフェース(Fluent Interface) によるDSLを使った検索式の組み立てなどが特徴です。Stagehand_TestRunnerではテストファイルの収集や、ディ

    Pieceの中のSymfony #1: Finderコンポーネント
  • 私がジェネレーティブプログラミングを学ぶ理由

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

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

    PHPにおける宣言的集合操作入門:Ginq
    innx_hidenori
    innx_hidenori 2014/01/17
    id:hnw 引用部はループ処理と比較したメリットという意図でした。ネイティブにクエリやリスト内包表記で記述できることのメリットは同意します。
  • 第28回関西IT勉強宴会で『ドメイン駆動設計について知ろう』の講師を担当しました

    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 公式アカウントに

    第28回関西IT勉強宴会で『ドメイン駆動設計について知ろう』の講師を担当しました
  • 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
  • CodeIQへ現在時刻を扱うプログラムについて解答例と解説記事を寄稿しました

    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 公式アカウントに

    CodeIQへ現在時刻を扱うプログラムについて解答例と解説記事を寄稿しました
  • 状態ではなく、振る舞いをモックせよ

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

    状態ではなく、振る舞いをモックせよ
  • 12月4日(水) PHPメンターズトレーニングセミナー「PHPによるドメイン駆動設計入門 1日コース」開催のご案内

    Alert こちらのご案内分は受付終了いたしました この度PHPメンターズは、2013年12月4日(水)に東京でPHPプログラマー向けのトレーニングセミナー「PHPによるドメイン駆動設計入門 1日コース」を開催いたします。 私たちは、開発対象となる事業や技術の分野(ドメイン)に関する問題を解決することがソフトウェアの中心的な目標であると考えています。また、ソフトウェア開発者にとって最も重要なのは、ドメインの知識をドメインモデルとして体系化し、それをソフトウェアで表現することであると考えています。Eric Evans氏によって提唱されたソフトウェア設計手法であるドメイン駆動設計(DDD: Domain-Driven Design)は、ソフトウェア開発者にとってこの目標を達成するための確かな基盤となるでしょう。 トレーニングセミナーは、基礎編・実践編の二部構成となっています。基礎編では開発・

    12月4日(水) PHPメンターズトレーニングセミナー「PHPによるドメイン駆動設計入門 1日コース」開催のご案内
  • Symfony Meetup Tokyo での Extract Till You Drop の写経

    PHPメンターズ道場生の @ganchiku です。よろしくお願いします。 はじめに10月4日 Engine Yard 東京オフィスにて、Symfony Meetup が開催され、14人ほどの参加者がありました。そこでのテーマは、Symfony Live London 2013 のセッションのうち Mathias Verraes さんの Extract Till You Drop(極限まで抽出せよ)のコードを真似てみよう、というものでした。Extract Till You Drop という言葉は、Uncle Bob ことロバート・マーチン氏の引用になります。 さて、Mathias さんのライブコーディングは、 YouTube にアップロードされており、その過程を PHP メンターズの後藤さんが説明しながら、一緒に写経を行いました。 http://verraes.net/2013/09/ex

    Symfony Meetup Tokyo での Extract Till You Drop の写経
  • 「オブジェクト設計エクササイズ -チームモデリングで学ぶドメイン駆動設計-」に参加しました

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

    「オブジェクト設計エクササイズ -チームモデリングで学ぶドメイン駆動設計-」に参加しました
    innx_hidenori
    innx_hidenori 2013/10/07
    id:k-holy 単に現場に合わせて言い換えるということではなくて、業務意図を反映した良い言葉・概念の発見ですね。しなやかな表現、モデルのブレイクスルーなどにつながると思います。
  • DDD体験ワークショップに参加してきました - かまずにまるのみ。

    PHPカンファレンス2013 で PHPメンターズ さんの『モデルとの向き合い方:ドメイン駆動設計体験ワークショップ』に参加してきました。 PHP メンターズさんの記事と資料はこちらに掲載されています。 http://phpmentors.jp/post/61286646859/phpcon2013-ddd-workshop ドメイン駆動設計って? そもそもドメイン駆動設計とは何なのか。 ドメイン駆動設計(DDD)はビジネスドメインの概念をソフトウェアという人工物にマッピングすることです。 ドメイン駆動設計・開発の実践 上記引用元にも出ている Eric Evans 氏の書籍は 「エリック・エヴァンスのドメイン駆動設計」というタイトルで日語版が出版されています。(この書籍については以降 DDD と表記) 500ページ超とそこそこボリュームはありますが、読みやすいだと思います。 気になっ

    DDD体験ワークショップに参加してきました - かまずにまるのみ。
  • この先生きのこるには

    ちょっとずつ複雑なことをやっていっているのですが、正直まだ自分で作っていくイメージがついていません。 加速と減速=イージングタイムラインパネルのフレーム数がでてるとこの下のスライダーでワークエリアの幅を操作できるグラフエディターというのが存在する。値グラフと速度グラフ。グラフを編集するときに触るのはハンドルだけイージングの速度が早くてコマが見える時はモーションブラーをかける(13:40)モーションブラーは色々ごまかせてしまうので最後につけたほうがいい。処理が重いから最初のほうでつけるとプレビューのときにしんどいとかもある(ただプレビューのときだけオフにするとかもできる)

    この先生きのこるには
  • ドメイン駆動開発/DDD体験ワークショップに参加しました(PHPカンファレンス2013) - アークウェブシステム開発SandBox

    前提:良いソフトウェアとは (P.6) † メンテ、テスト、コードが読みやすい 読みづらいコード (P.9のコード参照) 規約、長い、設計悪い 某WPなるメイン処理 処理関数が 7つくらいあるので一見シンプル! …でも、register_globals()とか一目見て何を処理するか分かるかというと分かりづらい →読んでて気持ち悪い なんとなくなイメージとメソッド記述にズレがある …これが読んでて気持ち悪い ズレ=メンタルモデル ”メンタルモデルとの乖離がないソフトウェア=良いソフトウェア” どうしたらいいの? 業務に関わる複数の人がどう理解してるか →メンタルモデルの共通化的な感じかな? モデルを忠実に再現する メンタルモデルとの乖離・相違に気づく ↑ DDDってなんぞ? (P.14) † DDD概要 実装方法、プロセス、OOPのテクニックじゃないよ 良いソフトウェアを作るための ガイドラ

    ドメイン駆動開発/DDD体験ワークショップに参加しました(PHPカンファレンス2013) - アークウェブシステム開発SandBox