Hatena::ブログ(Diary)

winplusの日記 このページをアンテナに追加 RSSフィード

2012-08-24

サービスデザインパターン

縁あって、翻訳をご担当された角征典さんより、『サービスデザインパターン』をいただきました。ありがとうございます。

サービスデザインパターン SOAP/WSDLとRESTful Webサービスの基本的な設計ソリューション

あるサービスやツール、フレームワークなどの使い方を解説した書籍とは違って、本書は設計手法の解説なので内容はなかなかむづかしいのですが、文章が読みやすいので(文意がくみ取りにくいところがないので)、つらくなることがありません。ただ、書名にデザインパターンとあるようにパターン集なので、いたるところで『オブジェクト指向における再利用のためのデザインパターン』[GoF]や『エンタープライズ アプリケーションアーキテクチャパターン』[POEAA]といった古典が参照されており、いかに自分が不勉強であるかを思い知らされました...[POEAA]を角さんが訳してくだされば...。

RailsからRESTに興味をもつようになったという経緯からか、分散システムについてRESTというメガネをかけて見ていたことに、いまさら気付きました。たとえば、時間のかかる処理をサービスで実行するときに、処理毎にURIを発行してこれをポーリングしてもらうという手法をとる。これをRESTfulなシステムを実現するためのテクニックというふうに理解していました。本書では「クライアントとサービスの通信」というカテゴリに属する「リクエスト/ACK」というパターンを変形した「リクエスト/ACK/ポール」というパターンとされています。「クライアントとサービスの通信」というカテゴリには「リクエスト/レスポンス」パターンも並べてあり、そうかそのレベルで対応するのかと、目から鱗でした。ほかにも、「リンクトサービス」パターン(HATEOASというか接続性)はRPCでもSOAPでも使えるよ、などなど指摘されると当たり前のことかもしれませんが、でもそんな風に考えたことがなかったことがたくさん。なんか視野が広くなった気がします。「トランザクションスクリプト」はいいとして、「データソースアダプタ」までパターンとして(アンチパターンではなく)検討していますし。

本書のふたつめのまえがき(イアン・ロビンソンによるもの)にあるように「いまどきのアプリケーションがそれ単体で動くことはめったにな」く、いまどきの分散環境は「何らかの形でWebを利用している」のですから、「Webサービスの設計手法と、パターン」(表紙)を整理して理解しておくことは、開発者のたしなみになるでしょう。勉強不足のわたしがいうのもおかしいのですが。

以下は「イアン・ロビンソンによるまえがき」の冒頭です。

分散アプリケーションの開発は、たいていの場合は順調に始まる。そして、たいていの場合は残念な結果に終わる。選択、[Web参照の追加]、そしてクリック。読み込んだクライアントをあなたが手塩にかけて作り上げたサービスのインターフェイスに割り当てている様子だ。設計をおろそかにしてツールに頼ってしまい、疎結合にすべきところを、単なる無責任な混乱状態にしてしまった。リリースのときが来たら、みんなで一緒に「せーの」で逃げ出さなきゃならいけない。

で、このまえがきは「本書を読めば、真夜中に「せーの」でデプロイするなんてことは避けられるだろう。」と終わっています。ということで、「せーの」でデプロイしたくない人は、ぜひ手に取ってみてください。

また、イアン・ロビンソンは「7.6 コンシューマ駆動契約」の節を執筆していています。この節は『ThoughtWorksアンソロジー ―アジャイルとオブジェクト指向によるソフトウェアイノベーション』の8章「コンシューマ駆動契約―サービス進化パターン」を本書のパターン形式にまとめたもの。ちなみに、『Rest in Practice』の著者のひとりです。本書のまえがきでも、Webサービスを3種類(behind the Web / on the Web / of the Web)に分けていて、らしいなあ、と思いました。

トラックバック - http://d.hatena.ne.jp/winplus/20120824/1345819105
リンク元