PoEAA Introduction

PoEAAデザインパターン勉強メモ

Architecture

  • 多くの人が「Architecture」という言葉を定義する
  • 共通点

    • システムを細分化していく際の最上位の分類
    • 変えづらい
  • システムのアーキテクチャは一通りであらわされるものではない

    • 何がアーキテクチャに含まれるかは主観的なもの
    • システムの生涯にわたり変わっていく
  • アーキテクチャとは

    • 開発のエキスパートらによる、システム設計の共通理解
    • 主要なコンポーネントと、その相互作用
  • アーキテクチャに関する決め事

    • 変えづらいため、早期に正しく決めたい
    • 簡単に変えられないからこそ重要
  • ほとんどのシステムは「レイヤ分け」を大なり小なり行う
  • 本書ではパターンを「アーキテクチャ」「そうでないもの」と殊更に区別しない。主観が入るから

Enterprise Applications

  • S/Wにもいろいろあるよね、という話
  • エンタープライズアプリケーションでは、下記のようなものは不要

    • マルチスレッド
    • S/WとH/Wとの統合
  • 逆に、下記のような困難がある

    • 複雑なデータ
    • 非論理的なビジネスロジック
  • あらゆるS/Wで共通のことというのは、むしろ少ない
  • そもそもEnterprise Applicationとは

    • 永続性データをもつ

      • 年単位でデータ保持
      • H/W、OS、コンパイラ等よりも長生き
      • それを利用するプログラムが変わっていく
      • データ構造も変わっていく

        • 新しいデータも持てるように
      • S/Wを捨てて新しいものに変えても、データは移行される
    • データは大量
    • データは同時にアクセスされる
    • 大量のデータを扱うため、UIもたくさん

      • 何百画面もあることは珍しくない
    • 大量のデータを処理するため、大量のバッチ処理がある
  • Enterprise Applicationは、たいてい他システムと連携する

    • そもそもデータの概念が違ったりして、あまりうまくいかない
    • 例: 「customer」

      • リード客
      • 過去の客
      • 物の消費者は含めるが、サービスの消費者は含めない
  • ここにおいて、「ビジネスロジック」が出てくる
  • ビジネスロジック

    • 「ロジック」といいつつ、これほど論理的でないものはない
    • 実装の都合で変えられる代物ではない
    • しょっちゅう変わる
  • エンタープライズアプリケーションは、必ずしも大きなものではない

    • 小さくても大きな利益をもたらすことはできる
    • シンプルに小さく保て

Kinds of Enterprise Application

  • 「エンタープライズアプリケーション」にもいろいろあるよ、という話

    • 例1: B2Cの小売システム

      • 客がいっぱいいるのでH/Wスケーラビリティが必要
      • ビジネスロジックは比較的単純
      • サポートブラウザをなるべく広く
      • データソースはDB、在庫システム
    • 例2: B2Bのバックエンド賃貸システム

      • 客は少ない
      • ビジネスロジックは複雑怪奇

        • 契約ごとにルールが異なったりする
      • UIも複雑なので…

        • HTML多い
        • 画面多い
        • トランザクション多い
        • テーブル多い
    • 例3: 小さな企業向けのコスト管理システム

      • ユーザー少ない
      • ロジック単純
      • データソースはテーブル数個程度
      • 単純とはいえ、困難が一切ないわけではない

        • 仕様追加

          • 払戻
          • 給与に払戻を反映
          • 税計算
          • CFO向けレポート出力
          • 飛行機予約
        • 短納期

          • さっさと完成しないと損失になる

            • 焦って将来の拡張性を損なう設計にはしたくない
            • とはいえむやみに柔軟にするのもよくない

              • 複雑になる
              • 結果、追加開発が大変になる
              • 結果、開発が遅くなる
      • 小さなシステムとはいえ、不適切なアーキテクチャは看過できない

        • 小さなシステムをたくさんあると、影響が蓄積する
  • 「どんなエンタープライズアプリケーションにも適用できるパターン」はない

    • 複数のパターン候補があり、トレードオフがある
  • 採用パターンを決めたら、それをアプリケーション向けに調整する必要がある
  • 本書に限らず、設計に関する決め事の判断材料を提供するだけ
  • ツールやフレームワークについても同じ。適しているか考えよ

Thinking About Performance

  • まず動くものを作り、実測し、それをもとに最適化せよ

    • ただし、アーキテクチャに関しては後から変えづらいことがある
    • 後から簡単に変えられるのに、早期から心配する人もいる
  • パフォーマンスは実測しないとわからない

    • 遅そうでも、実測したら問題ないことはままある
  • 本書でも、可読性のためにパフォーマンスを犠牲にしているサンプルコード多数
  • 実測なしに「早いはずの」コードを書くと、コードが読みづらくなるだけ
  • 環境や設定が変われば再測定が必要

    • 仮想マシン
    • H/W
    • DB
    • etc.
  • 旧環境で有利に働いた最適化が、新しい環境では逆に遅くなることもある

    • 【補】SQLの高速化

      • MySQL 8で、INをNOT EXISTSで置き換えたら逆に遅くなったりした

        • EXPLAINによると、INがたぶんINNER JOINに置き換わり暗黙裡に最適化されていた
  • 言葉の混乱。詳しい言葉を使おうね

    • 例1: 速度・時間に関する言葉

      • response time

        • 要求を受け取って、処理して、結果を応答するまでの時間
      • responsibility

        • 要求を受け取り、「これから処理するよ」と応答するまでの時間
        • プログレスパーを表示するまでの時間とか

          • 分母の計算があるのでlatencyよりは長時間かかるはず
      • latency

        • 要求を受け取り、何もせず応答するまでの時間
        • ローカルだと早い
        • リモートだと遅い
        • アプリケーションのコードレベルでは高速化できない
      • throughput

        • 時間当たりどれだけ仕事できる
        • ファイルコピーならbpsとか
        • エンタープライズアプリケーションなら
          tps (transactions per seconds)とか

          • もちろんトランザクションの複雑性に依存する
          • ので、普遍的なトランザクションで測定する
    • 例2: 負荷に関する言葉

      • Load

        • 何人同時接続しているか、とか
      • Load sensitivity

        • 負荷によりresponse time等がどれほど変化するか
        • 負荷増による劣化をとくに degradation とも
      • efficiency

        • リソースあたりの値
        • 「CPU2つで30tps」
        • 「CPU4つで40tps」
        • 前者のほうが高効率
      • capacity

        • 最大のthroughputやload
      • scalability

        • リソースの投入がパフォーマンスにどう影響するか
        • vertical scalability / scaling up

          • 単一サーバーにリソース投入
        • horizontal scalability / scale out

          • サーバーそのもの投入
  • 「throughputは向上するがresponse timeは遅くなる」ということもあるので、安易に「パフォーマンス」という言葉を使わない
  • エンタープライズアプリケーションでは、capacityやefficiencyよりもscalabilityを優先したほうがうまくいくこと多し

    • 複雑な設計をしてcapacityを上げるより、H/Wを投入したほうが安上がりなことがままある

      • プログラマの人件費とか

Patterns

  • パターンは「半生」

    • プロジェクトごとに「ちゃんと焼いて」完成する必要がある

      • 調整
      • 全く同じプロジェクトなどない
  • パターン同士は非依存だが、孤立はしていない

    • あるパターンを理解するために本書を全部読まないといけない、とならないよう
    • 複数のパターンは併用される
  • 本書には新しいことはない

    • 新しく「開発した」パターンはない
    • 「発見した」ものが載っている
  • 普遍的な解決策を記述し、その核心をとらえ、パターンとして書き下している
  • 「そんなの知ってるよ」という設計者にとっても、他者とのコミュニケーションに有用

    • 語彙の提供
  • エンタープライズアプリケーション向けパターンが大多数だが、一般のS/Wに利用できるパターンも掲載した

The Structure of the Patterns

  • name

    • 「語彙の提供」のために重要
  • intent

    • 1~2文
  • sketch

    • UMLとか
  • motivation

    • パターンが解決する問題の例
  • how it works

    • implementation-issueとか
    • platform-specificなこととか
  • when to use it

    • トレードオフについてもここに書かれている
    • 「どういうときにこれを使わないか?」の判断材料
  • further reading

    • ここまでに書いた内容の理解を深めるためのsection
    • 包括的な内容ではない
  • examples

    • 半生のパターンを完成させたやつ
    • そのまま使わないでね
    • 核心をとらえやすくするために、あえて簡略化している
    • そのまま使える代物じゃないから、ダウンロード可能にはしてないよ

Limitations of These Patterns

  • 本書のパターン集は包括的なものではない

    • 完璧を目指すよりも有用なものをまず出版
  • 執筆時点での著者の理解を反映したものである

    • まだ確立されていない
  • パターンの使用は出発地点にすぎない

    • 先人たちの地検や試行錯誤に、自分自身のを加えよ
    • パターンはそのまま使わず、調整せよ

英語

  • In case you haven’t realized it, …

    • [決まり文句] 一応言っておくと
  • underpin

    • Support, justify, or form the basis for.
  • myriad

    • A countless or extremely great number of people or things.
  • pragmatic

    • Dealing with things sensibly and realistically in a way that is based on practical rather than theoretical considerations.
  • cynicism

    • An inclination to believe that people are motivated purely by self-interest; scepticism.
  • inclination

    • A person’s natural tendency or urge to act or feel in a particular way; a disposition.
  • scepticism

    • A sceptical attitude; doubt as to the truth of something.
  • sceptical

    • Not easily convinced; having doubts or reservations.
  • reservation

    • An expression of doubt qualifying overall approval of a plan or statement.
  • qualify

    • [with object] Make (a statement or assertion) less absolute; add reservations to.
  • outlast

    • Live or last longer than.
  • stress

    • Give particular emphasis or importance to (a point, statement, or idea) made in speech or writing.
  • dissonance

    • Lack of agreement or harmony between people or things.
  • mung

    • [with object] Manipulate (data)
  • haphazard

    • Lacking any obvious principle of organization.
    • 行き当たりばったり
  • retail

    • A person or business that sells goods to the public in relatively small quantities for use or consumption rather than for resale.

      • 逆に、large quantities で for resale なのは「卸」(wholesale)でしょう
  • valuation

    • An estimation of the worth of something, especially one carried out by a professional valuer.
  • devoid of

    • Entirely lacking or free from.
  • payroll

    • A list of a company’s employees and the amount of money they are to be paid.
  • reimbursement

    • The action of repaying a person who has spent or lost money.
    • 払戻、償還等
  • hamper

    • Hinder or impede the movement or progress of.
  • hinder

    • Make it difficult for (someone) to do something or for (something) to happen.
  • impede

    • Delay or prevent (someone or something) by obstructing them; hinder.
    • 「インピーダンス」 (交流回路の抵抗みたいなやつ)
  • instrument

    • [verb] Equip (something) with measuring instruments.
    • [noun] A tool or implement, especially one for precision work.
  • bogus

    • Not genuine or true (used in a disapproving manner when deception has been attempted)
  • commensurate

    • Corresponding in size or degree; in proportion.
  • choir (kwάɪɚ(米国英語), kwάɪə(英国英語))

    • An organized group of singers, especially one that takes part in church services or performs in public.
  • regurgitate

    • Bring (swallowed food) up again to the mouth.
    • Repeat (information) without analysing or comprehending it.

      • 比喩的
  • scaffolding

    • A temporary structure on the outside of a building, made of wooden planks and metal poles, used by workmen while building, repairing, or cleaning the building.
  • ramifications

    • A complex or unwelcome consequence of an action or event.
  • stand

    • Remain valid or unaltered.