blog.fuktommy.com

テンプレートメソッドパターンのつもりで、こんなクラスを作っておいて class Foo { protected function doSomething() { // 複雑な処理 } publi...

テンプレートメソッドパターンのつもりで、こんなクラスを作っておいて

class Foo
{
  protected function doSomething()
  {
    // 複雑な処理
  }

  public function run()
  {
    // 略
    $this->doSomething();
    // 略
  }
}

基本的にはdoSomething()でいいんだけど、
子クラスによってはちょっと変わった動作をさせたい。
ただしdoSomething()は複雑な処理で、今後も変更がありそうだから、

class FooChild
{
  protected function doSomething()
  {
    // 前処理
    parent::doSomething();
    // 後処理
  }
}

みたいに必ず Foo#doSomething() を呼ぶというコーディング規約で縛っとこう。
と思ったが、現実にはコーディング規約は無視され、

class FooChild2
{
  protected function doSomething()
  {
    // Foo#doSomething()をコピペして改造した処理
  }
}

となるはず。
んで Foo#doSomething() を変更したときFooChild2も変更しなきゃとなって死ぬ。
そこで考えた。

abstract class Bar
{
  public function preSomething(Context $context) {}
  public function postSomething(Context $context) {}
}

関数の形式として前処理、後処理として縛ってしまう。

class Foo
{
  private function doSomething(Context $context)
  {
    // 略
    if ($context->todoHoge) {
      $this->doHoge();
    }
    // 略
  }

  public function run(Bar $bar, Context $context)
  {
    // 略
    $bar->preSomething($context);
    $this->doSomething($context);
    $bar->postSomething($context);
    // 略
  }
}

必要があれば$contextの中にフラグを用意して、
Foo#doSomething()の中でif文なりで動作を切り替える。

ただし Foo#doSomething() の中をすっきりさせておくのは
コーディング規約に頼ることになってしまい、まだ心配の種は残る。

福知山動物園のタヌキさん。

福知山動物園のタヌキさん。

福知山動物園行ってきたお THE 銀麗(仮)

落葉とタヌキさん。 動物園 | Fairy’s kitchen フェアリーズ キッチン - hohoa-mama.jugem.jp

落葉とタヌキさん。

動物園 | Fairy’s kitchen フェアリーズ キッチン - hohoa-mama.jugem.jp

ズーラシアのタヌキさん。

ズーラシアのタヌキさん。

★初めての動物園★|Queen's Style~ママは芸能プロダクション社長~

野毛山動物園のタヌキさん。

野毛山動物園のタヌキさん。

野毛山動物園|良Hey伝 ~バングラ通りへの道~

アラ還オヤジの何気ない日々 足慣らし - たぬき OR タヌキ OR 狸 - Google ブログ検索

アラ還オヤジの何気ない日々 足慣らし - たぬき OR タヌキ OR 狸 - Google ブログ検索

匿名と無垢 - eigokunの手記

匿名と無垢 - eigokunの手記

GoogleTV出るのを待とうかと思ったんだけど、あっちはブルーレイがついて3万円なわけで、ブルーレイ要らないから8800円の方がいい。よし買おうと思ったんだけど、うちのテレビは3色のケーブル(...

GoogleTV出るのを待とうかと思ったんだけど、あっちはブルーレイがついて3万円なわけで、ブルーレイ要らないから8800円の方がいい。よし買おうと思ったんだけど、うちのテレビは3色のケーブル(コンポジットケーブルっていうの?)しか対応してないという罠。変換ツールもあるけど http://fuktommy.com/am/B001UFTOP6 こっちが4万円とかする罠その2。逆変換は安いんだけどねえ。http://fuktommy.com/am/B00367Z7UC

Going My Way: iTune で映画のレンタルや購入が始まったのでさっそく Apple TV を購入 - 新・P2P today ダブルスラッシュ(速報版)

日本版ゴースト観てきた。 パスワード教えてーーーーーーーーーーーーー(^−^)

日本版ゴースト観てきた。

パスワード教えてーーーーーーーーーーーーー(^−^)

新尾道も大概だと思う。こないだ尾道駅から新尾道までタクシーで移動したんだけど、運ちゃんにもっと手前の福山から在来線で来た方が尾道駅周辺には近いよって言われた。 新幹線を降りたのに、何もなくてビッ...

新尾道も大概だと思う。こないだ尾道駅から新尾道までタクシーで移動したんだけど、運ちゃんにもっと手前の福山から在来線で来た方が尾道駅周辺には近いよって言われた。

新幹線を降りたのに、何もなくてビックリする駅 | ぴろり速報2ちゃんねる - はてなブックマーク - 新着エントリー

休日は気分が落ち込むので、プログラミングのことを考えて気分を高揚させる作戦。 仕事中毒なのかな。やばいやばい。

休日は気分が落ち込むので、プログラミングのことを考えて気分を高揚させる作戦。
仕事中毒なのかな。やばいやばい。

Buzz by 福冨諭 from Posted from the web

うーむ。 いくつかの処理を連続してやろうとすると、 PHPの文法の範疇ではコールバックの型を縛るのがしんどいなあ。 なんか変な気もするけど、洗練させていけば何かのデザインパターンに落ち着くのかな...

うーむ。
いくつかの処理を連続してやろうとすると、
PHPの文法の範疇ではコールバックの型を縛るのがしんどいなあ。
なんか変な気もするけど、洗練させていけば何かのデザインパターンに落ち着くのかな。


class Hoge1
{
  public function execute()
  {
    $foo = new Foo();
    $foo->askSomething(array($this, 'afterFoo'));
  }

  public function afterFoo(Response $res)
  {
    // $resに応じて何かの処理があって…
    $bar = new Bar();
    $bar->askSomething(array($this, 'afterBar'));
  }

  public function afterBar(Response $res)
  {
    // $resに応じて何かの処理があって…
    $baz = new Baz();
    $baz->askSomething(array($this, 'afterBaz'));
  }

  public function afterBaz(Response $res)
  {
    // $resに応じて何かの処理
  }
}


class Hoge2
{
  public function execute()
  {
    $foo = new Foo();
    $res = $foo->askSomething();
    // $resに応じて何かの処理があって…

    $bar = new Bar();
    $res = $bar->askSomething();
    // $resに応じて何かの処理があって…

    $buz = new Baz();
    $res = $buz->askSomething();
    // $resに応じて何かの処理
  }
}

Buzz by 福冨諭 from Posted from the web

野毛山動物園探検隊 ホンドタヌキ Raccoon dog - mirabeau.quu.cc

野毛山動物園探検隊 ホンドタヌキ Raccoon dog - mirabeau.quu.cc

ズーラシア探検隊 ホンドタヌキ - mirabeau.quu.cc

ズーラシア探検隊 ホンドタヌキ - mirabeau.quu.cc

タヌキの話もいろいろ載ってる。この本で初めて知ったことも。タヌキの分類とか、尿でマーキングするとか。

タヌキの話もいろいろ載ってる。この本で初めて知ったことも。タヌキの分類とか、尿でマーキングするとか。

Fuktommyはこんな本を読んでいます。 - 野生イヌの百科 (動物百科)

mtgto: RT @nicomobachan: |・▲・|<ニコニコモバモバ 生放送、見放題!! http://twitpic.com/3635v6 - Twitter / mtgto

mtgto: RT @nicomobachan: |・▲・|<ニコニコモバモバ 生放送、見放題!! http://twitpic.com/3635v6 - Twitter / mtgto

休日のおでかけ 和歌山 白崎海洋公園 たぬきを見た - はじめまして ... - たぬき OR タヌキ OR 狸 - Google ブログ検索

休日のおでかけ 和歌山 白崎海洋公園 たぬきを見た - はじめまして ... - たぬき OR タヌキ OR 狸 - Google ブログ検索

北本自然観察公園 - 鳥見日記 - たぬき OR タヌキ OR 狸 - Google ブログ検索

北本自然観察公園 - 鳥見日記 - たぬき OR タヌキ OR 狸 - Google ブログ検索

たぬきケーキ@東京都板橋区(下赤塚)フランス製菓 - ゾンビ畑 zombiebatake » たぬきケーキ

たぬきケーキ@東京都板橋区(下赤塚)フランス製菓 - ゾンビ畑 zombiebatake » たぬきケーキ

というわけで結果を * 戻値で受け取る場合(execute1) * コールバックで受け取る場合(execute2) のコード片を書いてみた。 どっちも微妙っちゃあ微妙だなあ。 class Res...

というわけで結果を
* 戻値で受け取る場合(execute1)
* コールバックで受け取る場合(execute2)
のコード片を書いてみた。
どっちも微妙っちゃあ微妙だなあ。


class Response
{
  // 略
}


interface Responder
{
  public function whenAccepted(Response $res);
  public function whenRejected(Response $res);
}


class Hoge implements Responder
{
  public function whenAccepted(Response $res)
  {
    // 依頼が受け付けられたとき
    // $resに入っている受け付け番号とかの処理
  }

  public function whenRejected(Response $res)
  {
    // 依頼が拒否されたとき
    // $resに入っている拒否理由とかの処理
  }

  public function execute1()
  {
    $foo = new Foo();
    try {
      $res = $foo->askSomething();
    } catch (Exception $e) {
      // エラー処理
    }
    if ($res->accepted) {
      $this->whenAccepted($res);
    } elseif ($res->rejected) {
      $this->whenRejected($res);
    }
    // 共通の後片付け
  }

  public function execute2()
  {
    $foo = new Foo();
    try {
      $foo->askSomething($this);
    } catch (Exception $e) {
      // エラー処理
    }
    // 共通の後片付け
  }
}

業者を規制しても、当座のお金がなくて困る人はいるわけで、そういう人はどうすればいいんだろう。 カード現金化…残ったのはおもちゃの指輪 新手の“ヤミ金”跋扈 (1/2ページ) - MSN産経ニュー...

業者を規制しても、当座のお金がなくて困る人はいるわけで、そういう人はどうすればいいんだろう。

カード現金化…残ったのはおもちゃの指輪 新手の“ヤミ金”跋扈 (1/2ページ) - MSN産経ニュース - heis101 のブックマーク

いろいろフラッシュ保管庫 - tomoの「日々好き勝手帖」

いろいろフラッシュ保管庫 - tomoの「日々好き勝手帖」

「この先、手品は亡くなります」未来奇術論 大久保康平インタビュー(1/3) - 手品いんたびゅー! - カナかな団首領のブックマーク

「この先、手品は亡くなります」未来奇術論 大久保康平インタビュー(1/3) - 手品いんたびゅー! - カナかな団首領のブックマーク

歴史の授業でSUGEEEEEEと思った事書いてけ : マテマチカ - はてなブックマーク - 新着エントリー

歴史の授業でSUGEEEEEEと思った事書いてけ : マテマチカ - はてなブックマーク - 新着エントリー

「Free」「Public」などの名前が付いている不審な無線LANに接続してはいけない - スラッシュドット・ジャパン

「Free」「Public」などの名前が付いている不審な無線LANに接続してはいけない - スラッシュドット・ジャパン

SNS Browser ガジェットって画面のほとんどを占有するからガジェットの意味ないし、画面全てを使うわけではないので周辺部が無駄。素直にアプリにすればいいのに。

SNS Browser ガジェットって画面のほとんどを占有するからガジェットの意味ないし、画面全てを使うわけではないので周辺部が無駄。素直にアプリにすればいいのに。

あなたが、考えてるキャラクターは、ジダンですか メトポン. あなたも、携帯で魔人と対戦してみましょう http://www.akinator.mobi/share.php?l=ja メトポン当た...

あなたが、考えてるキャラクターは、ジダンですか メトポン. あなたも、携帯で魔人と対戦してみましょう http://www.akinator.mobi/share.php?l=ja

メトポン当たるようになった。
そしてポンタに負けてる。
サーバーの応答も早くなったみたい。

たぬきフォント - Google アラート - タヌキ OR たぬき OR 狸

たぬきフォント - Google アラート - タヌキ OR たぬき OR 狸

銃・病原菌・鉄にこんな話題あったかな。ここで関連するとは思わなかった。 やる夫がタヒチの楽園で過ごすようです その32 - 泳ぐやる夫シアター

銃・病原菌・鉄にこんな話題あったかな。ここで関連するとは思わなかった。

やる夫がタヒチの楽園で過ごすようです その32 - 泳ぐやる夫シアター

Northern Asagaya Style.: 相模湖の野性!!?? - たぬき OR タヌキ OR 狸 - Google ブログ検索

Northern Asagaya Style.: 相模湖の野性!!?? - たぬき OR タヌキ OR 狸 - Google ブログ検索

新しいページ | 昔のページ |ページの先頭へ

Copyright© 1998-2014 Fuktommy. All Rights Reserved.
webmaster@fuktommy.com (Legal Notices)