いっせいの!!細かなつぶやき

細かなことをぽつぽつと呟いてます

MV-VCモデル構想 002

なんか「オブジェクト」って名前で呼ぶとイメージが引きずられるな。
別の名前を考えないとな〜


ビューにせよ、コントロールにせよ、モデルにせよ、バックエンドに居る(仮想的な)サーバー群にせよ、当面これらをユニットと呼ぼう。
ユニットのザクッとしたイメージとしては、とりまこんな感じ

  • ユニット
    1. それ自体で完結している
    2. 他のユニットとは疎結合
    3. ある程度大きなくくりで出来ている
      • 数字ひとつでユニットとかじゃなくて
    4. 構成要素として下記のものを持つ
      • 内部状態を表すデータ構造群
      • 外部から受け付けるメッセージ群
      • メッセージに対応する処理群
      • 処理に必要な内部ユニット
      • 処理に必要な外部ユニットとのリレーション
    5. 外部からアクションを依頼するときはメッセージで要求する
      • メッセージに対するアクションは即時に行われる保証がない。(非同期)
    6. 原則、メッセージに対しては返事が来る。(非同期)
    7. 外部から要求可能なメッセージは公開されている
    8. その内部状態は隠蔽されている
      • 内部状態を知りたければそれ用のメッセージで依頼する
  • メッセージ
    1. 要求元ユニットに公開されている
    2. 要求先ユニットが一意に識別できる名前と、要求に必要なデータ群で構成される
      • 要求に必要なユニットも渡せるようにするというハイレベルなアイデアもアリだけど、絶対ややこしいバグの元になる。動的なユニットの受け渡しは禁止するのが吉。仕方ないので、データとして構造化データ(structure)+と使用方法(interfaceとかtraitか?)を渡す。出来ればイミュータブルな感じで
  • 戻り値
    1. 要求元ユニットに公開されている
    2. その使用方法(interfaceとかtraitか?)も公開されている
  • メッセージ送信・戻り値受信
    1. メッセージに対する受け取り側のアクションは非同期
    2. 戻り値が要求元に返されるタイミングは非同期
    3. 待ってるだけだとマヌケなので、要求側ユニットは送信後は別の処理をすべき


また思いついたら修正しよっとw

小さなデータとか頻繁に生成消滅するデータはユニットじゃない。便宜上、それはオブジェクトか構造体かプリミティブなデータってことでw

電子回路で言えば、ICが「ユニット」で、回線(データバス)を流れるシグナル群が「データ」。メッセージは制御信号と言うことでw
で、回路がユニット同士のリレーションってイメージ。
電子回路はクロックで同期されてるわけだけど、そこは遅延とかを想定して、処理が終わったらインタラプトで割り込み処理を起動するイメージかな。