UIの設計とその他のターキテクチャを完全に切り離すのは不可能で、何らかの影響を受けてしまうものだ。
カーディナリティとは、ひとつのリレーションに含まれるエンティティの数(性別なら2、都道府県なら47など)。カーディナリティが増えれば増えるほど、その見せ方やインタラクションが難しくなる。
たとえばプログレスバーを出すことを考える。処理する要素が有限で、ひとつあたりの所要時間がわかっているのなら話は簡単だ。でも、所要時間が予測できない場合は、プログレスバーの表示はとても難しくなる。
もうひとつの例として、入力データのバリデーション。数値項目の入力フィールドには数値だけしか入力できないようにするとか、前のフィールドの入力内容に応じてその後のフィールドの有効/無効を切り替えるとか。これは、Webベースのシステムでは実現が難しい(※2003年の話)。HTMLにはそんな機能がないし、ブラウザもそれをサポートしていないから。
ユーザーのメンタルモデルをシステム上でうまく表現できるとメリットがある。ワープロのオートコレクト機能や、オンライン書店での過去の購買履歴に基づくリコメンドなど。
シンプルなウィザード形式からスクリプトによるワークフローエンジンまで、さまざまな形式でサポートできる。
トランザクションはUIに影響を及ぼすし、逆にUIもトランザクションに影響を及ぼす。 たとえばウェブサイトなら、ひとつの画面に大量の入力フィールドを置いた巨大なトランザクションを作ることができる。 でも、音声ベースのインターフェイスではそれは不可能。
私のお気に入りのC++コンパイラは、エラーの一覧をハイパーリンクつきのウィンドウで表示する。リンクをクリックすると、エラーが発生した行に移動できる。 eコマースのウェブサイトではこうはいかなくて、たとえば入力欄を赤くしたりして対応することになるだろう。 このように、エラーをどのように見せるかはターキテクチャに依存する。
国際化や地域化の対象となる部分は多い。ユーザーに見せるあらゆるものが対象となる。 開発チームがよくやりがちな間違いには以下のようなものがある。
国際化や地域化のインパクトは大きい。 マーケテクトは、対象とする言語を開発の初期段階で絞っておくべきだろう。極東地域の言語とか、右から左に書く言語とか、まじめに対応しようとすると大変だ。
シングルユーザーのデスクトップアプリなら、要求をキャンセルできるようにするのはいとも簡単。 でも、他のシステムやユーザーと状態を共有したり複数のコンポーネントを用いたりするシステムでは、難しい。