Smalltalkを使って何も配信したことはありませんが、Smalltalkで遊んだ短い時間は間違いなくその価値を残しました。エクスペリエンスを記述する唯一の方法は、本来の方法であるMVCです。基本的に、アプリケーションのすべての面倒な作業は、ビジネスオブジェクト(または、その傾向がある場合はドメインモデル)で行われます。標準コントロールは、何らかの方法でビジネスオブジェクトにバインドされます。たとえば、テキストボックスはオブジェクトのフィールドにマップされます(フィールド自体はオブジェクトなので、簡単に実行できます)。ボタンはメソッドにマップされます。これはすべて非常にシンプルで自然なAPIで行われます。オブジェクトのバインドなどについて考える必要はありません。それは機能します。
しかし、多くの新しい言語とAPIでは、外部から考えることを余儀なくされています。最初はC ++とMFCで、そして今はC#とWPFで、Microsoftはイベントハンドラーを実装してアプリケーションを構築するGUIビルダーに夢中になりました。Java Swingの開発もそれほど変わっていません。自分でフォームのコントロールをインスタンス化するコードを書いているのはあなただけです。一部のプロジェクトでは、ドメインモデルさえ存在しない場合があります-イベントハンドラーだけです。私はほとんどのキャリアのためにこのモデルの中とその周りにいました。
それぞれの方法で、あなたは違った考え方を強いられます。Smalltalkアプローチでは、GUIが愚かである間、ドメインはスマートです。デフォルトのVisualStudioアプローチでは、GUIはスマートですが、ドメインモデル(存在する場合)はかなり貧弱です。
私が仕事をしている多くの開発者は、Smalltalkアプローチに価値を見出し、そのアプローチをVisualStudio環境に押し付けようとします。WPFには、それを可能にするいくつかの動的バインディング機能があります。しかし、制限があります。ドメインモデルに属するコードの一部は、必然的にGUIクラスになります。
では、どのようにコードを設計/開発しますか?どうして?
- 最初にGUI。ユーザーとの対話が最も重要です。
- 最初にドメイン。UIを配置する前に、システムが正しいことを確認する必要があります。
どちらのアプローチにも長所と短所があります。ドメインモデルは、クリスタルの大聖堂と空のパイでそこに収まります。GUIは迅速かつ汚い(時には本当に汚い)状態で収まります。
さらにボーナスがあります:コードが保守可能であることをどのように確認しますか?