ゆーたんのつぶやき

株式会社ノークリサーチにてIT関連のシニアアナリストとして活動しています。

「振る舞い」と「横断的関心事」



以前に書いたエントリ「データと振る舞いの分離」
http://d.hatena.ne.jp/dufresne/20050628
について、コメントをいただきました。
http://d.hatena.ne.jp/fivefourty/20060127
(fivefourtyさん、ありがとうございます ^^)


自分自身でも書いた内容を忘れてしまっていたので、
あらためて読み直してみました。元々はarclampさん
のところで話題になっていた「データと振る舞いの
分離」というトピックについて整理してみたものです。


DAOパターンのようにオブジェクトのデータと永続化処理
とが分離されて実装された状態を 「オブジェクト指向
崩したスタイル」と見なすのではなく 「横断的関心事の
一つ」と見なすことでスッキリするのではないか? とい
ったことを以前のエントリでは書きました。


ここで「横断的関心事」とはそもそも何かと考えてみると
「振る舞い」の一種とボクは捉えています。オブジェクト
が持つ様々な振る舞いのうち、「継承関係とは独立して、
複数のクラスに渡って実装されることになる振る舞い」が
つまりは「横断的関心事」ではないでしょうか。そして、
それらはロギングやトランザクションなどの非機能要件で
あることが多いということではないかと考えています。


DAOパターンの場合には「永続化」という「振る舞い」が
・振る舞いの実装という観点で見てみると...
  「委譲」を使って別のクラスに存在している
・振る舞いの分類という観点で見てみると...
  ビジネスロジックのような機能要件(オブジェクトが
  持つ本質的な「振る舞い」)というよりは、ロギング
  などの非機能要件であり継承関係とは独立して複数の
  クラスに存在し得るものに近いので「横断的関心事」
  と捉えることができる
ということではないかと考えています。


とは言っても、ある一つの「振る舞い」があった時、それを
「横断的関心事」と捉えるのか、個別のオブジェクトに固有
の「本質的な振る舞い」と捉えるのかはその時々によって違
ってくると思います。


DAOパターンの例においても、「永続化」という処理そのもの
が何らかのビジネス的な意味をもっているという場合であれば
固有の「本質的な振る舞い」と捉える方が適切かも知れません。
そして、その時にその「振る舞い」をオブジェクト自身に実装
するのか、それとも「委譲」するのか、あるいは「注入」する
のかという点は「振る舞い」をどう分類するかという観点とは
また別の実装上の観点からの検討事項のような気がします。


結局のところ、


 「本質的な振る舞い」も「横断的関心事」もいずれも広義には
 「振る舞い」であり、それらをどう捉えてどう分類するかは
  ケースバイケースになるのではないか


 「委譲」も「注入」も「振る舞い」を実装する変形パターンの
  一種であり、上記の振る舞いの分類との対応についても
  ケースバイケースになるのではないか


  つまり、「委譲」の対象となる「振る舞い」は「本質的な振る
  舞い」のこともあれば、「横断的関心事」であることもあり、
  「実装の形態が委譲であるから、これは本質的な振る舞いで
  ある(あるいはその逆)」というようには必ずしも決められない


ということではないかと捉えています。


こうした話題は「振る舞い」とか「横断的関心事」といった
用語に対する定義が人によって微妙に違っていたりするので
難しいところですが、こうした意見交換を通じて自身の理解
が少しずつ深まっていくことは嬉しいですね(^^)