多くの開発者がオブジェクト指向言語で仕事をしてきた。そして今、多くの開発者がJavaScriptで仕事をしているが、ほとんどの人はオブジェクト指向の原則をJavaScriptで使っていない。JavaScriptを中心に本も書いている開発者のDerick Bailey氏がCodeMashでのプレゼンテーションでこのように語った。オブジェクト指向プログラミングの場合、私たちは基礎や原則を仕事の基本として話すが、クラスベースの静的言語から型付けのゆるいクラスベースでない言語に移ると、同じ原則を適用するのは難しいと思ってしまいがちだ。
優れた安定したJavaScriptコードを書くのに役立つ、素晴らしい原則、プラクティス、パターンがたくさんあると、Derick氏は言う。その1つの例が、2000年代前半にRobert C. Martin氏によって言及されたSOLID原則だ。
Derick氏はSOLID原則を、「組み合わせることでうまく機能する5つのパターン」だと説明した。そして、JavaやC#のような言語で使うのと比べて、適用を多少困難にするJavaScriptの特異性について調べながら、サンプルコードを使ってこれらの原則を説明した。
Derick氏は5つの原則を次のように定義する。
- 単一責務の原則。すべてのものは変更の理由が1つであるべきだ。この原則は、開発者が何を構築し、いつ変更を必要とするのか、そのコンテキストと責務を理解するのに役立つ。
- オープン・クローズドの原則。既存のコードを変更せずに、振る舞いを変更できるべきだ。拡張ポイントを使ったり、プラグイン可能なコードを作るなど。
- リスコフの置換原則。派生したオブジェクトや型はそのベースとなるオブジェクトや型と置換可能でなくてはならない。Derick氏によると、これはオープン・クローズドの原則のよりフォーカスしたバージョンだ。
- インターフェイス分離の原則。クライアントは使っていないインターフェイスに依存することを強いられるべきではない。問題はJavaScriptに明示的なインターフェイスがないことだが、これをうまく回避する方法がある。
- 依存関係逆転の原則。これは2つの概念から構成されている。1つは抽象化であり、具体的な実装ではなく抽象化したものに依存すべきだということだ。もう1つはオーナーシップで、低レベルの実装は高レベルの概念に依存すべきだということだ。
Derick氏は最後にこう言った。もしあなたのシステムに巨大な一枚岩のコードがあれば、それを部品に分割するのにSOLIDが役に立ちます。複雑さを軽減するわけではありませんが、抽象化をもたらし、詳細を論理的に考えることのできる大きな概念にまとめるのに役立つでしょう。