多種多様な Web 開発フレームワークが利用可能であるため、常に「何か新しいことを試す」という永続的なインセンティブがあるようです。そのため、あるフレームワークを別のフレームワークに交換し、最終結果に完全に満足することは決してないことに気付く人もいます。確かに、特定の Web フレームワークが完全に機能するニッチが常に存在します。しかし、たとえばデスクトップ アプリケーションの構築に C++、Java、または C# を使用することに決めた人はたくさんいます。Web 開発アプリケーションに関しては、同じことはまったく当てはまりません。Joel Spolsky はリンク テキストでこれに触れています。
そのようなフレームワークを構築するとしたら、機能要件はどうなるでしょうか? ここでの目標は、具体的な機能上の期待を列挙することです (もちろん、stackoverflow の投稿のために簡潔に定義されています)。その投票数に基づいてベストアンサーが選ばれます。
誰もが始められるように、以下は要件の部分的なリストです。これらの項目は、人々がそれらからより具体的な項目を導き出すことができるように、意図的にやや抽象的に残されていることに注意してください。
OOP の一貫性: サーバー側モジュールとクライアント側モジュールの間のシームレスなデータ交換とネイティブ オブジェクト表現: つまり、クライアント側
clientFoo()
の関数: とサーバー側の関数:のオブジェクトをserverFoo()
渡すことができる必要があります。マーシャリングを必要としないobj
任意の型:T
define clientFoo() { T obj = createObject() serverFoo(obj) } OR define serverFoo() { T obj = createObject() clientFoo(obj) }
これにより、すべての構成、クラス間結合、およびカプセル化セマンティクスを含め、ネイティブ オブジェクト表現がクライアント側とサーバー側の両方で同じでなければならないという要件が追加されます。基本的に、特定のクラスまたは特定のインスタンスがクライアント側に存在するかサーバー側に存在するかはまったく関係ありません。
機能の一貫性: 機能とスレッドのシームレスな実行: クライアント/サーバー側で関数を作成し、実行のために境界を越えて渡すことができる必要があります。これには、マルチスレッドの統一サポート (クライアント側とサーバー側の両方で一貫して動作する必要があります) が含まれます。
複数のアプリケーション セッションの相互運用性: ここでの完璧な例は、アプリケーション間の「カット アンド ペースト」です (上記の記事で説明したように)。ブラウザ内のテキストを別のブラウザ インスタンス (またはタブ) に簡単にコピーすることについて話しているのではありません。たとえば、MySocialApp の連絡先オブジェクトを YetAnotherSocialApp に貼り付けたい場合はどうすればよいでしょうか? この種のアプリケーション間データ交換は重要です。
一貫性のあるクロス ブラウザ互換の UI : AJAX の「ダイアログ ボックス」、進行状況インジケーター、タブなどの作成はすべて、上記のクライアント/サーバー統合と同様に、フレームワークの残りの部分とシームレスな API を使用して実現できる必要があります。ああ、はい、すべてのブラウザーで同じように動作する必要があります (ブラウザーの違いは開発者にはまったく見えません)。