web-dev-qa-db-ja.com

SOLID

JavaScriptの開発中に、誰かがSOLIDプログラミング原理(またはその一部)を使用しましたか?

読み始めたばかりですが、JSで使用した人を見つけることができません。実装/使用が簡単だと思うのは「単一責任の原則」だけです。

私が探しているのは、これらの原則が使用されている記事または例です。そして、いくつかの部分を使用すべきではない理由があるのでしょうか?

たとえば、「インターフェース分離の原則」は、「多くのクライアント固有のインターフェースは、1つの汎用インターフェースよりも優れているという考え」を示しています。

しかし、私の知る限りでは、JSにはインターフェースなどはありません(そうなるといいのですが)。

41
fredrik
63
Ryan Ransford

JavaScriptは、実際には非常に強力な関数型プログラミング言語であり、オブジェクト指向の機能も備えているにもかかわらず(実際にはオブジェクト指向として分類されていませんが)、C++、C#、Javaなどよりも劣る場合があります。

おそらく、多くの開発者はそれを軽視しています。なぜなら、開発者の多くは、貧弱なプログラミングプラクティス、そしてその結果、JavaScriptのバグのある振る舞いに慣れているからです。何らかの未知の理由により、クライアント側でずさんな方が受け入れられやすいようです。これは変更したいものです。

これらのSOLID原則は堅実です。(しゃれは意図されていません)。これらの規則に従えば、ずさんなコード、ショートカット、およびアーキテクチャーなしで作成された技術的負債を蓄積する可能性が低くなります。コードは、保守性、再利用性、モジュール性が高まり、密結合性が低下し、スケーラビリティと拡張性が向上します。製品を設計する際に、無謀にぶつかるだけでなく、JavaScriptの能力を最大限に発揮できるようになります。

このドキュメントでは、SOLIDの基本について説明します。 C++、Java、JavaScript、またはその他のオブジェクト指向言語を参照する場合でも、同じ規則が適用されます。

コードプロジェクト-SOLIDオブジェクト指向プログラミングの原則

colourcoding.netのJavaScriptの概念 に関する詳細情報を次に示します。

13
jmort253

この受け入れられた答えは欠陥があります。以下のRyan Rensfordがリンクしている5つの記事を読むことをお勧めします。 最後の記事 は、私が伝えられなかった次の結論に達しました(強調は私):

調査の過程で、SOLIDの設計原則がJavaScriptに他の言語よりも適用される方法にバリエーションが見られましたが、それぞれの原則は JavaScript開発内での適用範囲

SOLIDはオブジェクト指向プログラミング用です。 JavaScriptはプロトタイプベースの言語ですが、OOP方式でプログラミングすることができます(実際にそうする場合)。多くの人は、あなたが学んだ言語(C++/C#/ Javaなど)のパラダイムを他の(JavaScript)に強制しようとするべきではないと信じています。これが JSのOOP に関する記事で、これもその結論に至ります。

OOP、 CoffeeScript 、および John Resigs Simple JavaScript Inheritance (それぞれに独自のトラップがある)にはいくつかのアプローチがあります。

しかし、SOLID)の用語(インターフェース、抽象化)を適切な方法でバニラJavaScriptに適用することは困難です。「S」、そしておそらく「L」(ただし、これをさらに進めるには、インターフェイスなどの構成体(動的言語ではとにかく見つけにくいため、コントラクトが機能する可能性があります)と継承/変更を制限する機能が必要になります。

4

このプレゼンテーション: SOLID JavaScript In a Wobbly(World Wide Web) by Derick Baileyは、JavaScriptの開発中にSOLIDプログラミング原理を使用する方法を示します。

彼はJavaScriptのインターフェースの問題に数回明示的に取り組んでいます。 JavaScriptでは、インターフェースは慣例に近いため、どのように定義するかはユーザー次第です。空のオブジェクト定義を書くことができます(抽象クラ​​スやインターフェースのようなものと考えてください)。または、プロトコル/契約についてdocumentationを利用できます。

より概念的なレベルでは、オブジェクトのメソッドシグネチャはそのインターフェイスを暗黙的に定義します。そのため、JavaScriptでは、「ダックタイピング」を使用して、SOLIDに準拠することがよくあります。 (!)これは、これを実証するプレゼンテーションからの「インターフェース分離原理」の例です。

// Copyright 2014 Muted Solutions, LLC, and freely distributable and re-usable under the MIT License

// JavaScript has no interface construct ...
// sooooooo..... use inheritance instead? o_O

// Rectangle
// ---------

function Rectangle(){}

Rectangle.prototype.area = function(){
  return this.height * this.width;
};

Rectangle.prototype.setHeight = function(height){
  this.height = height;
};

Rectangle.prototype.setWidth = function(width){
  this.width = width;
};

// Square
// ------

function Square(){}

Square.prototype.area = function(){
  return this.size * this.size;
};

Square.prototype.setSize = function(size){
  this.height = size;
  this.width = size;
};

このコードとトークの残りのサンプルコードはすべてGitHubに投稿されています: https://github.com/derickbailey/solid-javascript

2
wxactly

ほとんどのSOLIDプリンシパルは抽象化に依存します。Javaなどの他の言語では、インターフェイスを使用して抽象化を行うことができます。また、JavaScriptにはインターフェイスがありません。つまり、これは達成できません= SOLID Javascriptの原則?答えは「いいえ」です。これは、物事を明確にする優れた記事です。

http://www.yusufaytas.com/achieving-abstraction-in-javascript/

その結果、JavaScriptは弱く型付けされた言語であり、抽象化に対する古典的なサポートがありません。インターフェイスを定義して使用することで、JavaScriptで抽象化を実現しようとしました。それにもかかわらず、インターフェイスはコードにまったく影響を与えません。それらは人間のコードを文書化する方法に過ぎません。上に示した例はすべて、インターフェースを完全に削除してもまったく同じように機能します。ただし、それは役割を明示的にすることです。これにより、コードの可読性、理解性、保守性が向上します。

一般的に、SOLIDの原則の主な目的は、コードを読みやすく、簡単に変更できるようにすることです。コードにSOLIDを適用することは、繰り返さないようにすることです自分でコードをより美しく、よりクリーンにしてください。

0
Maysara Alhindi