2016-09-30 12 views
0

私はJavaScriptには比較的新しいので、このタイプの質問が明らかな場合は謝ります。疎結合オブジェクトのJavaScriptにはパターンがありますか?

私たちは、データを格納する方法としてetcdを使用するアプリを持っています。私がやろうとしているのは、異なるバックエンドデータストア間で交換または交換する方法を実装することです(私はdynamodbを使いたい)。

私はC#の背景から来たので、私はasp.netアプリケーションでこの動作を実装する場合、私はインターフェイスと依存性注入を使用します。

私が考えることができる最良の解決策は、いくつかの構成設定に基づいてデータストアオブジェクトを返すファクトリを持つことです。私はTypeScriptにインターフェイスがあることを知っていますが、可能であれば、バニラjsに固執したいと考えています。

ご協力いただければ幸いです。ありがとう。

+0

異なるバックエンドデータストアを交換または交換する方法を具体化してください_ – brk

+1

バニラJavascriptには正式な仕様やインターフェイスはありません。あなたが望むことをやり遂げることはできますが、静的な型チェック機能はありません。あなたがそれを望むなら、あなたはそれと同様のものが必要です。 – deceze

答えて

0

インターフェイスは、ポリモフィズムを実装するための静的な型指定の手段です。 Javascriptには静的型システムがないため、インタフェースもありません。しかし、それ自体は非常に多態的な言語です。あなたがしたいことは簡単です。単にプロセスの一環として、任意のインタフェースを書かない:活字体と実際のinterface Sを使用して

function StorageBackend1() { } 
StorageBackend1.prototype.store = function (data) { 
    // here be dragons 
}; 

function StorageBackend2() { } 
StorageBackend2.prototype.store = function (data) { 
    // here be other dragons 
}; 

function SomeModel(storage) { 
    this.storage = storage; 
    this.data = {}; 
} 
SomeModel.prototype.saveData = function() { 
    this.storage.store(this.data); 
}; 

var m1 = new SomeModel(new StorageBackend1), 
    m2 = new SomeModel(new StorageBackend2); 

m1.saveData(); 
m2.saveData(); 

はあなたに、実行時に少ない可能驚きと静的型チェック言語の健全性を与えるが、あなたはそれを必要としません多型のために。

0

私はDelphi/C#などから来ています。インターフェイスはただの痛みです。 Javascriptはとても良いです。

javascriptインターフェイスは必要ありません。メソッドを追加するだけです。

例えば、

function MyBackend1() { 
    this.ver = 'myBackEnd1'; 
} 

function MyBackend2() { 
    this.ver = 'myBackEnd2'; 
    this.somefunc = function() { console.log('something'); } 
} 

function run(backend) { 
    console.log(backend.ver); 
    //below is like an interface supports 
    if (backend.somefunc) backend.somefunc(); 
} 

run(new MyBackend2()); 
//lets now use backend1 
run(new MyBackend1()); 
+0

インターフェイスは、適切な状況で適用される場合、非常に便利です。あなたが必要でないときに独断でそれらを過度に使うならば、彼らはPITAだけです。 – deceze

+0

@deceze:個人的な意見ですが、現実のアプリケーションでは、インタフェースが単純なJavaScript(ifjmethod)よりも優先されることは決してありませんでした。私が最初にjavascriptに来たとき、私はTypescriptルートに行きました、そして、すべての正直なところで、それは助けたよりむしろ挫折しました。また、あなたのアプリが成長しても私に私を惹きつけないという主張。私は最近Typescriptをもう一度やり直してみました。そしてもう一度欲求不満とIDEを遅らせてしまいました。 – Keith

+0

一般的な静的型システムは、インタフェースの一部ですが、実行時*の前に特定の種類のエラーを避けるのに非常に強力です。はい、これらのタイプのシステムを使用するより多くの作業があり、コンパイルプロセスが必要ですが、正しく適用されると、開発に非常に役立ちます。確かに、それの一部は意見に基づいているので、私は議論に入りたいとは思わない。しかし、あなたの意見に基づいて**静的なタイピング/インターフェースを外して**私が反対しているものです。 – deceze

関連する問題