Zerobase Dev Blog

コードネームYentry

IA DSLとしての抽象化CSSとドメイン駆動設計

CSS PreprocessorとIAの親和性【その仕事、蠍は留守です】

コンポーネント定義はIAが行うのが理想。かつ、それをデザイナーやフロントエンドエンジニアに伝達し、実装後にそれが維持されているかを確認するところまでが仕事。

CSS Preprocessor の利点を活かせばコンポーネントの構造を定義しやすいし、それ自体が共通言語となるために伝達が容易になります。

CSS Preprocessor そのものを共通ドキュメントにしてしまうとか

CSS Preprocessor を導入してモックアップを作ってみるとか (...) モックを作る時には紙やツールの上で行う時よりもきちんとしたコンポーネント設計・管理ができていないと破綻しますから、早い時点で綻びに気付くことができます(すくなくとも、フロントエンドエンジニアに「これ無理でしょ」と指摘される前に)。

プリプロセッサーの利用により抽象化されたCSSおよびHTMLは、情報要素の論理構造と視覚構造を定義する宣言的なDSLである。いわば情報アーキテクチャのドメインモデリングを駆動するIA DSLとしてCSSプリプロセッサーを活用できるかもしれない。

今後学習していきたい。というかこれちょっとすごい気付きかも。下記のような問題意識につながってる:

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

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

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

TDDでUIデザインするタイミング

UI設計と要件定義は一体のものであって、どちらかが先ということはない、という思想でプロトタイピングするとき、テスト駆動開発はどのように実践できるか。

システムをUIサブシステムとアプリケーションサブシステムに分離して同時に開発することで共進化させる?

BDUF(Big Design Up Front)は避けたいが、ある程度のインタラクションデザイン/UIデザインが進捗してからシステム設計したほうがよい。というのは、フィーチャーやユースケースが定義できなければ、受け入れテストは書けないからだ。モードレスUIにしたいので、フィーチャーやユースケースはインタラクションデザインから決めたい(逆にするとタスク指向のモーダルUIになりやすいはずだから)。メンタルモデルに照らして素性のいいシステムモデルを設計しないといけない。次はDCIを学ぼう。

ここで「ある程度のインタラクションデザイン/UIデザインが進捗してからシステム設計したほうがよい」というのは、疑わしくなってきた。

「インタラクション」あるいは「ユースケース」も、ドメインの知識に深く関わるという考え方で提唱されているのがDCIアーキテクチャだ。その批判を通じて「ユースケースDSL」というものが必要なのではないか、という考えに至ったところ:

DCIアーキテクチャへの違和感から見えてくるユースケースDSL

IA DSLとしての抽象化されたCSSを使いこなせれば、UI設計とドメインモデリングは同時に進められるのではないだろうか。これが現時点の仮説。未知の世界を探求していきたい。

続き:OOCSS + Sass (OOSaSS) について調べた

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)