JavaScriptを深く理解するシリーズ(21):S.O.L.I.Dの5原則ISPのインターフェース分離原理を詳しく解説_基礎知識
はしがき
この章で説明するのは、S.O.L.I.D JavaScript 言語実装の 5 つの原則のうちの 4 つ目、Interface Segregation Principle ISP (The Interface Segregation Principle) です。
英語原文:http://freshbrewedcode.com/derekgreer/2012/01/08/solid-javascript-the-interface-segregation-principle/
注: この記事の著者は非常に複雑なので、理解するとおじさんはかなり落ち込んでいますが、あまり深入りしないでください。
インターフェース分離原理の説明は次のとおりです:
ユーザーが他のユーザーによってのみ使用され、自分自身では使用されないインターフェイス メソッドに依存する場合、ユーザーはこれらのインターフェイスを実装する必要があります。つまり、ユーザーは、他のユーザーによって使用されていないインターフェイスに依存することになります。他のユーザーがこのインターフェイスを変更すると、それに依存するすべてのユーザーが影響を受けます。これは明らかにオープンクローズの原則に違反しており、私たちが期待しているものではありません。
インターフェイス分離原則 ISP は単一責任に似ており、どちらも機能責任を集約するために使用されます。実際、ISP は単一責任を持つプログラムをパブリック インターフェイスを持つオブジェクトに変換するものとして理解できます。
JavaScript インターフェース
JavaScript でこの原則に準拠するにはどうすればよいでしょうか?結局のところ、JavaScript にはインターフェースの性質がありません。インターフェースが、特定の言語が提供する抽象型を介して契約を確立し、分離したいものである場合は、それは問題ありませんが、JavaScript には別の形式があります。インターフェースの。 『デザイン パターン – 再利用可能なオブジェクト指向ソフトウェアの要素』という本の中で、インターフェイスの定義が次のように記載されています。
http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612
オブジェクト内で宣言されたすべての操作は、オブジェクトのインターフェイスと呼ばれます。オブジェクトのインターフェイスには、このオブジェクトで発生するすべてのリクエスト情報が記述されます。
言語がインターフェイスを表す別の構造を提供するかどうかに関係なく、すべてのオブジェクトには、オブジェクトのすべてのプロパティとメソッドで構成される暗黙的なインターフェイスがあります。次のコードを参照してください:
exampleBinder.modelObserver = (function() {
/* プライベート変数 */
戻り値 {
観察: function(model) {
/* コード */
return newModel;
}、
onChange: 関数(コールバック) {
/* コード */
}
}
})();
exampleBinder.viewAdaptor = (function() {
/* プライベート変数 */
戻り値 {
binding: function(model) {
/* コード */
}
}
})();
/* プライベート変数 */
ExampleBinder.modelObserver.onChange(/* コールバック */);
var om = exampleBinder.modelObserver.observe(model);
ExampleBinder.viewAdaptor.bind(om);
返してください;
};
上記の exampleBinder クラス ライブラリによって実装された関数は双方向バインディングです。このクラス ライブラリによって公開されるパブリック インターフェイスは、bind メソッドです。bind で使用される変更通知とビュー インタラクションの機能は、それぞれ、modelObserver と viewAdaptor のパブリック インターフェイスの固有の実装です。その方法。
JavaScript はオブジェクトのコントラクトをサポートするインターフェイス タイプを提供していませんが、オブジェクトの暗黙的なインターフェイスをコントラクトとしてプログラム ユーザーに提供できます。
ISP と JavaScript
以下で説明するセクションの一部は、JavaScript のインターフェース分離原則に違反した場合の影響について説明しています。上で見たように、JavaScript プログラムにインターフェイス分離原則を実装するのは残念ですが、静的型付け言語ほど強力ではありません。JavaScript の言語特性により、いわゆるインターフェイスが少し粘着性のないものになることがあります。
秋の実感
静的型付け言語では、ISP 原則に違反する理由の 1 つは実装の失敗です。 Java および C# のインターフェイスで定義されたすべてのメソッドを実装する必要があります。そのうちのいくつかだけが必要な場合は、他のメソッドも実装する必要があります (空の実装または例外のスローによって)。 JavaScript では、オブジェクト内の特定のインターフェイスのみが必要な場合、上記のインターフェイスの実装を強制する必要はありませんが、実装の破損の問題は解決できません。しかし、この実装は依然としてリスコフ置換原則に違反しています。
var Rectangle = {
領域: function() {
/* コード */
}、
描画: function() {
/* コード */
}
};
var geometryApplication = {
GetLargestRectangle: function(rectangles) {
/* コード */
}
};
var drawingApplication = {
drawRectangles: function(rectangles) {
/* コード */
}
};
長方形の置換が新しいオブジェクト geometryApplication の getLargestRectangle を満たす場合、長方形の area() メソッドのみが必要ですが、LSP に違反します (drawRectangles メソッドで使用できる描画メソッドをまったく使用しないため) )。
静的結合
静的型付け言語における ISP 違反のもう 1 つの理由は、静的結合です。静的型付け言語では、インターフェイスが疎結合設計プログラムで重要な役割を果たします。動的言語であっても静的言語であっても、オブジェクトが複数のクライアント ユーザー間で通信する必要がある場合があります (共有状態など)。静的に型付けされた言語の場合、最良の解決策は、ユーザーとオブジェクトの相互作用を可能にするロール インターフェイスを使用することです。また、オブジェクトは複数の役割を持つ必要がある場合があります)。これは、その実装によってユーザーが無関係なアクションから切り離されるためです。 JavaScript ではそのような問題はありません。動的言語特有の利点によってオブジェクトが分離されているからです。
セマンティックカップリング
動的言語と静的型付け言語の両方で、ISP 違反につながる一般的な理由は、セマンティック結合です。いわゆるセマンティック結合は相互依存です。つまり、あるオブジェクトの動作が別のオブジェクトに依存します。これは、あるユーザーが行動の 1 つを変更すると、別のユーザーに影響を与える可能性があることを意味します。これは単一責任の原則にも違反します。この問題は、継承とオブジェクトの置換によって解決できます。
スケーラビリティ
問題のもう 1 つの理由は、スケーラビリティです。多くの人は、スケーラビリティを示すためにコールバックに関する例を挙げます (ajax で成功した後のコールバック設定など)。このようなインターフェースが実装を必要とし、実装されるオブジェクトに多くの使い慣れたメソッドが存在する場合、ISP は非常に重要になります。つまり、インターフェースが多くのメソッドを実装する必要があるインターフェースになると、その実装は非常に複雑になります。 、これらのインターフェイスが非スティッキーな役割を担う可能性があります。これは、私たちがよくファット インターフェイスと呼ぶものです。
概要
JavaScript の動的言語機能により、非スティッキー インターフェイスの実装は静的型付け言語よりも影響力が低くなりますが、インターフェイス分離の原則は依然として JavaScript プログラミング パターンに組み込まれています。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Vivo はまだ X100 後継機の名前を公表していませんが、公式 Weibo プロフィールのさまざまなティーザーではすでに次世代の主力カメラ、特に Sony IMX9 に代わるセンサー技術について話題になっています。

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。
