SproutCore クラスは、SC.Object.extend({...}) のように簡単に作成できます。また、任意のオブジェクトの予約されていないプロパティは、名前空間として扱うことができます。SC.Object (SC.Object.create) をドロップするだけです。hvg の回答に従って、アプリケーションがインスタンス化されたとき、または後で別のファイルで宣言できます。
MyApp.SubNamespace = SC.Object.create({
ClassName: SC.Object.extend({...}),
OtherClassName: SC.Object.extend({...})
});
これは Joosie の例よりも多くのコードではありません。名前空間が自動的に作成されないというあなたの観察は正しいですが、それには意味上の利点があります。名前空間のすべてのコンテンツを作成と同時に定義できるため、コードの集中化が促進されます。また、タイプミスした名前空間を誤って自動定義するバグを防ぎます。
ここでの重要な洞察は、アプリケーション オブジェクトが単なる名前空間ではなく、アプリケーションの機能を提供するクラスのアクティブで動的なインスタンスであるということです。アプリケーションのすべてのコードをアプリケーション オブジェクトに入れる必要があるという事実は、一種の自然な名前空間を作成し、ほとんどの場合、サブ名前空間は同じように機能することがわかります (myApp.mainPage、myApp.contentController、myApp.remoteDataSource、 myApp.statechart)。SC.Object の専用インスタンスを介してコードを専用の名前空間に編成することはもちろん大歓迎です。私もよくそうしますが、SC アプリケーションは高度に自己編成する傾向があります。