JavaScriptで大規模開発をするには?

大規模なシステムを作るというのは、多くの概念を管理することです。これには、各概念を効果的に区別(分類)すること、各概念に早くアクセスできること、各概念を簡単に操作できることが必要です。これは所謂、名前空間の必要性を意味して、局所性と大きさで言及しているようにソフトウェアに関わらず生物などにも当てはまる本質的な要請だと考えられます。


ソフトウェアにおいて、Javaではpackageでこれが可能となり、.NETでも名前空間の構文で利用可能です。JavaScriptはというと、このような仕組みはサポートされていないのですが、局所的に変数を閉じ込めるクロージャとオブジェクトの参照treeを使ってこれらに近いものを実現することができます。

var all = {};

(function(){

	//name space
	all.animal = {};
	all.animal.Cat = Cat;
	all.animal.Dog = Dog;

	function Cat(){}
	function Dog(){}
	function Animal(){}
	
	//継承先の親はクロージャ内なので、そのままアクセス可能。
	Cat.prototype = new Animal();
	Dog.prototype = new Animal();

})();

//外からは name spaceでアクセス。
var cat = new all.animal.Cat();
var dog = new all.animal.Dog();


こんな感じで名前空間のようにオブジェクトを構成していくことができます。実際に開発するときは、namespace生成の関数や、特定namespace以下のオブジェクトのimport関数を作ると便利かなと思います。