タグ

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

  • 「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」参加レポート
    brtRiver
    brtRiver 2018/01/10
  • Practical Symfony #28: Workflowerを使ったビジネスプロセスの管理

    この記事はSymfony Advent Calendar 2015 25日目の記事です。前日の記事はqcmatsuokaさんの「SpBowerBundleのキャッシュエラーを解決する | QUARTETCOM TECH BLOG」でした。 WorkflowerはBPMN 2.0に準拠するPHP向けのワークフローエンジンであり、2条項BSDライセンスの下でリリースされているオープンソース製品です。Workflowerの主な用途としては、人間を中心としたビジネスプロセスをPHPアプリケーションで管理することが挙げられます。 この記事では、Workflowerを使ったビジネスプロセスの管理をSymfonyアプリケーション上で行うために必要な作業について示します。 PHPMentorsWorkflowerBundleによるSymfonyインテグレーションPHPMentorsWorkflowerBu

    Practical Symfony #28: Workflowerを使ったビジネスプロセスの管理
    brtRiver
    brtRiver 2015/12/26
  • Symfonyの本「基本からしっかり学ぶSymfony2入門」を執筆しました

    この記事は、Symfonyアドベントカレンダー2015の6日目の記事です。昨日は@okapon_ponさんの「Symfonyでdebug環境を最適化しコードを追いやすくする」でした。 12月16日付けで、技術評論社様より『基からしっかり学ぶSymfony2入門』が出版されます。最初に企画書を書いたのが2014年の3月で、そこから出版まで2年近く時間がかかりました。このではSymfony 2.7を対象としていますが、書き始めた頃はまだSymfony 2.3の時代でした。今ではすでに2.8と3.0もリリースされているので、バージョンの進み具合だけとっても執筆に結構長くかかってしまったと感じます(苦労させられた点でもありますが)。執筆は、私(後藤)とカルテットコミュニケーションズの金さんとの共著になっています。 技術評論社 書籍紹介ページすでにAmazonでご予約頂いている方も多数いらっし

    Symfonyの本「基本からしっかり学ぶSymfony2入門」を執筆しました
    brtRiver
    brtRiver 2015/12/06
  • Practical Symfony #26: PHPMentorsPageflowerBundleを使ったページフロー定義と対話の管理

    Symfony Advent Calendar 2014 (Qiita) 10日目 前(12月9日)次(12月11日)PHPMentorsPageflowerBundleは筆者が開発したSymfonyアプリケーション向けのページフローエンジンです。特徴としては、以下のものが挙げられます。 アノテーションによるページフロー定義対話の管理アクセス制御されたアクション対話スコープのプロパティ対話開始直後に実行されるユーザー定義メソッド複数のブラウザーウィンドウまたはタブのサポートPHPMentorsPageflowerBundleを使うと、コントローラーに断片的に埋め込まれたページフローに関するコードを明示的な定義で置き換えることができます。また、対話と対話スコープのプロパティの導入によってコントローラーの状態管理コードを大幅を削減することができます。 では、早速コードを見てみましょう。以下はS

    Practical Symfony #26: PHPMentorsPageflowerBundleを使ったページフロー定義と対話の管理
    brtRiver
    brtRiver 2014/12/10
  • Practical Symfony #25: Routerを拡張してURLのサブディレクトリを横断的に処理する

    Symfony Advent Calendar 2014 (Qiita) 4日目 前(12月3日 ) 次(12月5日) Webサービスで、ユーザーのアカウントごとにサブディレクトリを割り当てたいとします(最近はユーザーアカウントごとにサブドメインを割り当てる方が主流かもしれませんが)。例えば次のような形です。 トップページ http://example.com/ユーザー hidenorigoto のコンテンツ http://example.com/hidenorigoto/profilehttp://example.com/hidenorigoto/report/20141124ユーザー someone のコンテンツ http://example.com/someone/profilehttp://example.com/someone/report/20141124このような形をとるシス

    Practical Symfony #25: Routerを拡張してURLのサブディレクトリを横断的に処理する
    brtRiver
    brtRiver 2014/12/04
  • 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: ドメインの知識を使ったフォームバリデーション
    brtRiver
    brtRiver 2014/02/17
    "バリデーションにサービスのメソッドを使う"ための方法
  • PHPにおける宣言的集合操作入門:Ginq

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

    PHPにおける宣言的集合操作入門:Ginq
    brtRiver
    brtRiver 2014/01/17
  • 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
    brtRiver
    brtRiver 2013/12/06
  • 状態ではなく、振る舞いをモックせよ

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

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

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

    12月4日(水) PHPメンターズトレーニングセミナー「PHPによるドメイン駆動設計入門 1日コース」開催のご案内
    brtRiver
    brtRiver 2013/10/31
  • PHPカンファレンス2013で「モデルとの向き合い方:ドメイン駆動設計体験ワークショップ」を行いました

    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カンファレンス2013で「モデルとの向き合い方:ドメイン駆動設計体験ワークショップ」を行いました
    brtRiver
    brtRiver 2013/09/16
  • 関数・定数のラッパーオブジェクト(レガシープロキシー)を導入してテスト容易性を高める

    PHPユーザーであれば、PHPが標準で持つ多くの内部(ビルトイン)関数や定数には日常的にお世話になっていることでしょう。これらの内部関数・定数はPHPの便利さの象徴といえます。しかし、内部関数や定数の使用はテストのしやすさを低下させる原因となります。以下のコードを見てみましょう。 <?php ... class CollectingType { protected $type; protected $expectedSuperTypes = array(); ... public function isTest() { if (in_array($this->type, $this->expectedSuperTypes)) { return false; } else { foreach ($this->expectedSuperTypes as $expectedSuperType)

    関数・定数のラッパーオブジェクト(レガシープロキシー)を導入してテスト容易性を高める
  • Kata #1 - サービス(SERVICES)

    DDDを適用した開発スタイル「PHPメンターズ流 設計と実装の型」の解説シリーズ 其の壱:サービス 概要ドメインのユースケース(ビジネスユースケース/シナリオ)をソフトウェアとして表現する際、サービス(ドメインサービス)としてモデリングします。 型の派生元DDD p.103「サービス(SERVICES)」 詳細ドメインモデルをユースケース分析した場合、そのユースケースのシナリオが直接的にあらわれる場がサービスになります。これとは対照的に、ドメインモデルのデータ構造があらわれるのがエンティティやバリューオブジェクトになります。エンティティやバリューオブジェクトには、それ自身が持つ振舞のみを持たせ自己完結するようにしておき、そこにおさまらないシナリオ/手順はサービスにします。エンティティはオブジェクト来の役割に近く状態を持つのに対して、サービスは手順なので状態を持ちません。 ユビキタス言語で

    Kata #1 - サービス(SERVICES)
    brtRiver
    brtRiver 2013/02/12
  • 11月30日(金)、12月1日(土) PHPメンターズトレーニングセミナー「Symfony2によるWebアプリケーション開発入門 2日間コース」開催のご案内

    Alert こちらのご案内分は受付終了いたしました この度PHPメンターズは、2012年11月30日(金)と12月1日(土)に東京でPHPアプリケーションフレームワークSymfonyのトレーニングセミナー Symfony2によるWebアプリケーション開発入門 2日間コース を開催いたします。 Symfonyとは、MVCアーキテクチャーによって複数のレイヤーを関係付けるPHPアプリケーションフレームワークであり、Webアプリケーション開発における複雑な問題を解決するものです。 私たちは、開発対象となる事業や技術の分野(ドメイン)に関する問題を解決することがソフトウェアの中心的な目標であり、開発者はその目標の達成に注力しなければならないと考えています。しかしながら、現実のソフトウェア開発においては様々な技術的課題が山積しており、開発者の能力はややもすればそのような課題に向けられがちですが、先人

    11月30日(金)、12月1日(土) PHPメンターズトレーニングセミナー「Symfony2によるWebアプリケーション開発入門 2日間コース」開催のご案内
    brtRiver
    brtRiver 2012/10/11
  • Zend\Diを使ったDIの自動ワイヤリング

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

    Zend\Diを使ったDIの自動ワイヤリング
  • Pimpleでシンプルに正しくDIを理解する

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

    Pimpleでシンプルに正しくDIを理解する
    brtRiver
    brtRiver 2012/08/02
    "オブジェクトの構成処理は分離・隠蔽できても、利用オブジェクトがファクトリー自体に依存してしまうことになります" あいたたた。
  • Symfony勉強会#6でSymfonyとドメイン駆動の話、モックによるオブジェクト指向の話をしてきました

    2012年6月30日に株式会社VOYAGE GROUP様にて開催されたSymfony勉強会 #6にスピーカーとして参加し、次の2つの講演をさせていただきました。 一歩先ゆくエンジニアから見たSymfonyオブジェクトの振舞を明確化するためのモックについて一歩先ゆくエンジニアから見たSymfonySymfony勉強会の最初の講演として、一歩引いた目線でSymfonyというフレームワークの良さと、ドメインモデルを大切にすることの重要性などについて講演しました。 Symfony勉強会#6 一歩先ゆくエンジニアから見たSymfonyオブジェクトの振舞を明確化するためのモックについて勉強会の午後のバラエティセッションの1つとして、オブジェクト指向設計、オブジェクトの責務とコラボレーションに着目するためのツールとしてのモックオブジェクトの紹介と、Symfonyのテストコードでモックオブジェクトが使われ

    Symfony勉強会#6でSymfonyとドメイン駆動の話、モックによるオブジェクト指向の話をしてきました
  • 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コンポーネント
    brtRiver
    brtRiver 2012/04/20
    Yamlコンポーネントと同じぐらいお世話になってる
  • 第3回関西PHP勉強会にて、実践的なSymfonyのトレーニングを開催しました

    2012年4月7日(土)、大阪町にある「オオサカンスペース」様にて、Symfonyを使った実践的なアプリケーション開発を題材とする第3回関西PHP勉強会が開催され、PHPメンターズの久保、後藤が講師を務めました。多くの方にご参加いただいた上、ハードな内容にも関わらず最後まで集中して取り組んでいただき、当にありがとうございました。また、主催していただきました関西PHPユーザーズグループのスタッフの皆様、特に最初にお声がけ頂いた大村さん、コーディング役を名乗りでていただいたnano_eightさん、当にありがとうございました。 2012年4月7日「第3回 関西PHP勉強会」を開催します。- Kansai PHP Users Group第3回 関西PHP勉強会 : ATNDphpmentors-jp/kphpug-questionnaire - GitHub実施した内容勉強会では「実際

    第3回関西PHP勉強会にて、実践的なSymfonyのトレーニングを開催しました
    brtRiver
    brtRiver 2012/04/09
    奥が深いし、そこには理由がある
  • Practical Symfony #4: SymfonyのテストコードをPhakeで書き換えてみる : Symfony Advent Calender 2011 JP - 16日目

    PHPメンターズの後藤です。クリスマスまでの24日間をSymfonyの記事で楽しもう!というSymfony Advent Calendar JP 2011の16日目の記事です。前回はSymfony2のテストコードを読むにてSymfonyのHttpKernelコンポーネントにあるKernelクラスのテストコードを紹介し、PHPUnitのモックオブジェクトを使っている例を説明しました。 今回は、前回紹介したテストコードを、PHPのモッキングフレームワークであるPhakeを使って書き換えてみましょう。 mlively/Phake - GitHubPhake - PHP Mocking FrameworkSymfonyのテストでPhakeを使うための準備については、こちらの記事を参照してください。 まず、前回取り上げたテストコードを最初に再掲します。 tests/Symfony/Tests/Com

    Practical Symfony #4: SymfonyのテストコードをPhakeで書き換えてみる : Symfony Advent Calender 2011 JP - 16日目
    brtRiver
    brtRiver 2011/12/16
    Phake を使わないと
  • 1