パターンについて - 「ソフトウェアアーキテクチャ ソフトウェア開発のためのパターン体系」

前回の日記にも書いた通り設計強化月間としてまずはこの本を読んでいます。

ソフトウェアアーキテクチャ―ソフトウェア開発のためのパターン体系

ソフトウェアアーキテクチャ―ソフトウェア開発のためのパターン体系

それでちょうと1章分読み終わりましたし内容的にも1章ごとにまとめやすそうなので、この本は1章ずつちゃんとアウトプットしていってみようかなとw
で、早速本題といきたいところなのですが設計についてオススメの本を聞く時に「アーキテクチャ」という言葉を使って聞いたのですが、正直に曖昧な理解のまま使っていたのでしっかりとツッコミが入り、そりゃダメですよねーと調べたので「アーキテクチャ」についても簡単にまとめたいと思います。と言っても僕が調べたのは下記の3つだけで実際にはもっと色々あるようです。

コンピュータ・アーキテクチャ
コンピュータ(ハードウェア)に関する基本設計や設計思想。
ソフトウェアアーキテクチャ
ソフトウェアに関する基本設計や設計思想。これが今回知りたかった部分。
システムアーキテクチャ
ハードウェアとソフトウェアを合わせた構成などの設計に関するもの


かなり大雑把ですがこんな感じ。
ただシステムアーキテクチャという言葉はかなり昔から存在していたのですがソフトウェアアーキテクチャは比較的新しいものらしく、またシステムアーキテクチャの定義も人によってバラバラらしいのでソフトウェアアーキテクチャの意味としてシステムアーキテクチャが使われる事が多々あるらしいです。まぁデスクトップアプリならともかくWebシステムはソフトウェアとハードウェアが密接に絡み合いますもんね。


で、本題の本について。
第1章はパターンについてでパターンはどういうものなのか、どのように利用するのかなどについての簡単な説明がされていました。
というわけで以下まとめ。

パターンとは

  • パターンはある状況の設計課題を明確にし、それに対する解答または解答への道しるべを熟練された知識によって定義されたもの
    • 経験も大事だけどその経験によっていずれたどり着くであろう答えを早く学べる!
  • パターンは具体的なものに捕らわれずに抽象的に、しかし明確で簡潔にし、それを説明できるもの
    • 例えばMVCパターンを使えば詳細にこういったクラスが必要でーと考えたり説明したりしなくてもView、見た目を担当する部品!と抽象的かつ簡潔に考えたり説明できる!
  • パターンは設計に対する共通の名前を使用することによりコミュニケーションを円滑にするもの
    • いちいちこれはこう考えたからこう設計してーなどと説明しなくても「〜パターンだよ」と言ったり設計書に書けばOK!
  • パターンはソフトウェアに付加させたい特性、またはなければならない特性の実現を支援するもの
    • 変更容易性・信頼性・テスト容易性・再利用性などがパターンを利用することによって楽に実現できる!
  • パターンは複雑な設計を一定のまとまりに分離し、管理・設計しやすくするもの
    • あくまで支援するものなので具体的な問題は自身の力で!

パターンの構成要素

前提
課題が生じる状況。ソフトウェアで実現したいことなど。
課題
前提によって発生する解決しなければならない問題と解決する為に考慮しなければならないものなど。
解決策
課題に対する解決策。構造とそれらが実行時に行わなければならない振る舞いを定義する。

パターンのカテゴリ

アーキテクチャパターン
ソフトウェアな基礎的な構造やその関係を定義したもの。例:MVCパターンによってソフトウェア全体の構造を表現する。
デザインパターン
アーキテクチャパターン内のより小さい単位の構造やその関係を定義するもの。例:FacadeパターンによってMVCパターンのView内の複数のクラスのインターフェイスをまとめるなど。
イディオム
1つのプログラミング言語に特化した構造やその関係を定義したもの。例:配列の全要素にアクセスする方法が言語によってインデックス使うかfor in(for eachなどなど)を使うかなど。

パターン間の関係

あるパターンが複数のパターンにより構成されたり、あるパターンを特定の状況に対応させた派生パターンがあったり、問題を解決する為に複数のパターンを連携させることもある。

パターンの記述

パターンの書き方について。省略w

パターンとソフトウェアアーキテクチャ

  • パターンは特性が明確に定義されたソフトウェアアーキテクチャを構築する手助けや、既存の凡庸的なアーキテクチャテクニックを効果的に補完したりする。
  • 複雑な問題に効果的に対応できるようにパターンの知識・分類・組み合わせをパターン体系として組織立てる。

要約

パターンはソフトウェア開発に役立つアプローチを提供したり、既存のテクニックを補ったりするどのような言語・パラダイムにも使用できる「知的ツールボックス」である。


以上です!
なんか書き始めに思っていた簡単な内容と全然違うものになってしまった…。ひとまずまだ1章ですが十分にパターンの有用性が理解できるいい本だと思いますので設計について悩んでる方は購入してみてはいかがでしょうか?