タグ

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

  • Stagehand_FSM - 有限状態マシン、そしてドメイン特化言語

    先日、Piece FrameworkのプロダクトStagehand_FSMのバージョン2.0.0を2条項BSDライセンスでリリースしました。Stagehand_FSMのリリースは2008年7月27日のバージョン1.10.0以来5年ぶりとなります。 Stagehand_FSMは有限状態マシン(FSM: Finite State Machine)の定義・実行を行うためのPHPコンポーネントです。PHP 5.3.2以降で動作します。記事ではStagehand_FSMがどのようなものなのか簡単に説明します。 有限状態マシンの例:有料ゲート以下のようなお金を入れると通過できるゲートを考えます。 Stagehand_FSMを使った実装は以下のようになります。 <?php use Stagehand\FSM\StateMachine\StateMachineBuilder; $stateMachine

    Stagehand_FSM - 有限状態マシン、そしてドメイン特化言語
    s_mori
    s_mori 2016/06/05
  • 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のモデリングについて発表しました
    s_mori
    s_mori 2015/12/08
    問題のドメイン-問題を解決するシステムのドメイン-システムの作り方のドメイン
  • 関数・定数のラッパーオブジェクト(レガシープロキシー)を導入してテスト容易性を高める

    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)

    関数・定数のラッパーオブジェクト(レガシープロキシー)を導入してテスト容易性を高める
    s_mori
    s_mori 2015/10/25
    LegacyProxy
  • DDD アンチパターン:賢すぎるエンティティ

    Symfony Advent Calendar JP 2012 - Day 3 ドメイン駆動設計にしたがってドメインモデルをソフトウェアとして表現するのにエンティティが使われます。エンティティは、ドメイン駆動設計におけるモデル駆動設計パターンの1つに分類されます。 賢すぎるエンティティはアンチパターンRuby on Rails由来のアクティブレコードと直結したMVCフレームワークでは、来エンティティとして扱われるべきクラスを「モデルクラス」と呼び、そこにビジネスロジック等を実装することが推奨されていました。これらのフレームワークでは、自らモデルレイヤー部分もカバーしておきながら、すべてをエンティティとして実装することを強いるため、ドメインモデルの実装にはほとんど自由度がありませんでした。 このスタイルに慣れてしまうと、ピュアなクラスでドメインレイヤーを実装できる状況においても、誤った設計

    DDD アンチパターン:賢すぎるエンティティ
    s_mori
    s_mori 2015/10/17
  • 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とサービスロケータの違い
  • 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
  • Practical DDD #2: 責務のレイヤーとPolicy-Control-Operation

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

    Practical DDD #2: 責務のレイヤーとPolicy-Control-Operation
    s_mori
    s_mori 2014/08/24
  • Eclipseで快適にPHPアプリケーション開発を行うためのプラグイン5選

    Warning 記事はEclipseの過去のバージョンを対象としたものです。今から環境を構築される場合は、Eclipse Kepler (4.3)向けに書きなおした記事「Eclipse Kepler (4.3)で作るPHPアプリケーション開発環境」をご覧ください。 2009年の秋にMakeGoodの開発を始めた頃、私の開発環境は大きく変わりました。GNU EmacsからEclipseへ、すなわちテキストエディターから統合開発環境(IDE: Integrated Development Environments)への変更です。統合開発環境には多くの利点がありますが、型やメソッドの定義・参照へのアクセスの容易さはさまざまなソフトウェアを読み解く上で大いに役立っています。 EclipseはOSGiという優れたモジュールシステムを採用しており、OSGiバンドルであるEclipseプラグインだけで

    Eclipseで快適にPHPアプリケーション開発を行うためのプラグイン5選
  • Stagehand_TestRunner v3, 何が変わったのか?

    昨日Piece ProjectからStagehand_TestRunner 3.0.0(以後Stagehand_TestRunner v3)をリリースいたしました。バージョン2.0.0のリリースからおよそ4年3ヶ月ぶりというメジャーアップデートとなった今回のリリースでは一体今までと何が変わったのか、リリースノートを補足する形でご紹介したいと思います。 Stagehand_TestRunnerとは?Stagehand_TestRunner は CLI でユニットテストを実行するための継続的テストランナーです。 Stagehand_TestRunner はローカル環境におけるユニットテストをとても簡単で快適なものにします。加えて Jenkins のような継続的インテグレーションサーバと簡単に統合することもできます。統合開発環境 (IDE) との統合を考慮して設計されているため、開発者が Mak

    Stagehand_TestRunner v3, 何が変わったのか?
    s_mori
    s_mori 2012/04/13
    Stagehand_TestRunner
  • 1