SCOPE A LA CARTE

conversation scopeというのがコンテキストの生存期間としてあると便利かな? と思った昨日ですが、これを、より長い期間の方へ延長するとどうなるだろうと考えた場合、workflow scopeみたいなのもありかなと…*1
つまり長期間→短期間の順でいくと…

  • Environment Scope (依存する外部システムなどの存続期間*2 )
  • Enterprise Scope (会社が存続する期間/データベースが存在する期間)
  • Workflow Scope (数時間〜数ヶ月程度以上のGOALを持つ業務タスクの遂行期間)
  • Application Scope (サービス提供期間/アプリケーションが稼動している期間)
  • Session Scope (利用者の作業期間/ログイン〜ログアウトの期間)
  • Conversation Scope (数分〜数十分程度のGOALを持つ短い業務タスクの遂行期間)
  • Request Scope (利用者の指示を遂行する期間*3 )
  • Action Scope (指示を細分化した粒度の細かい処理/ActionChain*4の1Action?)

ApplicatoinとSessionは、微妙に毛色が違うような気のせいもしますが…
…それで? と言われるとそれまでです…^^;;;

最近*5、自分の中でContextという言葉が1つのキーワードになっています。Context-Drivenあるいは、Context-Centricな開発やフレームワークってできないかなぁと*6
Contextという言葉は、まさに文脈によっていろいろなイメージがあると思いますが*7、自分としては Chain of Responsibility パターンにおける主体となるもの*8という捉え方が1つ。これをActive-Contextと呼ぶとします。一方、
先ほど出た7つのScopeに対応するContextがもう1つの捉え方です。これをPassive-Contextと呼ぶとします。
そうすると、Active-Contextがシステム利用者とシステムの間、あるいはシステム間をぐるぐる回りながら、Active-ContextとPassive−Contextの間でデータをやり取りするというイメージが湧いてきたわけです。
これを踏まえ(?) … もう少し具体的に、現在のWebシステムに当てはめて考えると、

  • Active-Contextが、ユーザの入力データを受け取ります。(これもResponsibility Chainで)
  • Responsibility Chain のトンネルの中に放り込みます。
  • 各Chainは以下のような処理を行います
    • Passive-Contextに特定スコープのPassive-Contextのデータをコピーしたり
    • Active-Contextのデータを処理してActive-Contextに書き戻したり
    • Active-Contextから、特定スコープのPassive Contextにデータを書き戻したり
    • …などなど
  • Active-Contextからユーザ用のビューを作ります。
  • 繰り返し

配管作業の要領でビジュアル・コンポーネント指向でアプリケーションが作れたらいいなぁ〜なんて…
DOAのフレーバーが若干…? 現在のWEBシステムをContextで言い換えただけ…? でも、名前重要! イメージ重要! (個人的な)しっくり感重要! なので… なんとなく書いてしまいました…
こんなの100年前からあるよ! とか、このパターンはこんな問題を含みます、みたいな情報があれば、"優しく"コメントしてください ^^;;;

っていうか、文章まとまってなさ杉… 頭の中も整理されていなさ杉…orz

*1:S2Buriのワークステートまわりのドキュメント、というか羽生さんブログを見ていて思ったり…

*2:短い場合もあるかも…

*3:アプリケーションへの1つの指示、画面のボタンを押して結果が返るまでの期間

*4:内部処理を Chain of Responsibility パターンで役割分担/分割統治している場合

*5:といっても去年あたりからですが

*6:特にクッキリとしたイメージがあるわけではないのですが…

*7:うまい! 座布団2枚! ⇒ 自分 … はぁ… 一瞬、虚しさを感じたような…

*8:あるいは、現在関心のあるデータを集めたカプセルのようなイメージ