2017-07-14 31 views
0

JavaScript(ES6)でアプリを構築しています。私はC#に精通しているので、もし私のやりとりが少しずれていたら、私はお詫びします。JavaScript/ES6でのインターフェイス/プラグインの実装

とにかく、私のアプリでは、他のサービスをサポートするサービスを作りたいと思っています。基本的には、私のサービスが作成されるときに、自分の「インターフェース」を実装するいくつかのサービスを動的にロードしたいのです。その "インターフェース"は "sendMessage"という名前の単一の関数を持っています。次に、私がMyService.sendMessage( 'someMessage')を呼び出すと、そのメッセージは自動的に登録されたサービスを介して送信されます。私はこのようなことを達成しようとしています:

const MyService { 
    initialize: function() { 
    this.services = []; 

    // Somehow load services here 

    // This function will send the message to the plugins 
    this.sendMessage = function(msg) { 
     for (let service in services) { 
     service.sendMessage(msg); 
     } 
    }; 
    } 
}; 

とにかくサービスが入力されていないため、上記は機能しません。 JavaScriptにはC#のようなキーワードinterfaceがないことがわかります。そのため、私はサービスを登録する方法が必要であることを知っています。私の質問しかし、私はこれを行う方法がわかりません。

サードパーティの開発者がサービスにプラグインできるようにサービスを作成するにはどうすればよいですか?

+1

どのような構文が 'const MyService {...'ですか? –

+0

デベロッパーはあなたのクラスで何を見たり/できたらよいですか? –

+0

そして、あなたはどのようなインターフェースが必要ですか?あなたは単にプロパティをチェックすることができ、もし存在しなければエラーを投げることができます –

答えて

0

インターフェイスにはhttp://www.typescriptlang.org/を使用できます。 ES6 'class'はインターフェイスをサポートしていないので、あなた自身でOOPインフラストラクチャを開発しない限り、typescriptはあなたの最良の方法です。

0

JavaScriptにはinterface本自体は含まれていませんが、もちろんクラスがあります。 (ES6)だから、

、何を行うことができますことは、このような基本クラスを作成します

class BaseService { 
    constructor(options) { 
     // Handle options here 
    } 

    // Methods 

    sendMessage(msg) { 
     throw new Error(`sendMessage is not implemented in the base class. 
         Please override this method in your extended class.`); 
    } 

    // Other Methods 

    get name() { 
     // 
    } 
} 

次に、誰もが、彼らは、SMSゲートウェイプロバイダのように、アプリのサービスを構築したい場合単にextendあなたのBaseServiceクラスを実装し、独自のsendMessageメソッドを実装することができます。

もちろん、その方法を実装するではなく、からそれらを停止することはできません。 ただし、そうでない場合は、エラーがスローされます。私が推測するところでは、JavaScriptの抽象化のようなインターフェイスを提供しています。

0

ダイナミック言語であり、C#のように強く型付けされていないため、Javascriptに実装されているインタフェースはありません。質問の回避方法を説明しているthisの回答を確認することができます。

これが役に立ちます。