Zerobase Dev Blog

コードネームYentry

ドメイン駆動設計(DDD)とモードレスUI

休暇は『実践テスト駆動開発 テストに導かれてオブジェクト指向ソフトウェアを育てる』 (GOOS) の勉強だなー。

エリック・エヴァンスのドメイン駆動設計』は去年読んだ

UI レイヤー、アプリレイヤー、ドメインレイヤー、インフラレイヤーからなる4層アーキテクチャ。 UI レイヤーのなかを、さらにプレゼンテーションとロジックの2層に分離したい。AngularJS は気になる。

UI 層の、 UI ロジック層は、アプリへのリモートプロキシーオブジェクトと、「UI のドメインモデル」としての UI オブジェクトになる。 UI プレゼンテーション層は jQuery でいい。その二つの層を AngularJS でマッピングする感じ?

オブジェクト指向でモードレスな UI の HTML アプリを作るなら、 JavaScript のなかでも「宣言的な UI ドメインモデル」と、「手続き的なイベントハンドラ」の峻別が有効だろうか。後者のコードは必ず3行以下にする規則とか。

AngularJS はオブジェクトを直接触っているような感じを実現するのに役立ちそう。オブジェクトの状態と UI プレゼンテーション層のあいだのマッピングを自動化して、宣言的に書けそうな感じが面白い。研究したい。

jQuery は UI プレゼンテーション層に特化したほうがよさそう。UI モデルは jQuery 上に書くのではなく、ピュア JS コードで書いた方がよさそう。

通信は JSON でいいけどオブジェクトのシリアライズの正逆変換は型宣言でなされるべきで、変換処理が書かれるべきではないと思う。解決策は JSON Schema ベースのデシリアライザーかな。

サーバーサイドのソースコードから、 JavaScript 用のリモートプロキシーインターフェイスコードを自動生成する。または、透過的アクセスを提供する ActiveResource 的なミドルウェア。どっちか欲しい。

HTML テンプレートは、オブジェクトの配列を定義する容れ物だ。 DOM はプレゼンテーションに過ぎない。オブジェクトは DOM 要素ではなく、サーバーサイドに存在するドメインオブジェクトか、または、ドメインオブジェクトへの透過的なアクセスを提供するインターフェイスだ。