私は外部APIを使用してデータを表示しています。要約外部API
柔軟性を持たせるため、私はAPIを自分のコードから完全に切り離したいと思っています。自分で定義したデータ構造を使いたいと思っています。ここで
ここに例をタスクもう少しconcretを作るために:
はのデータが人々についてであると仮定しましょう:
API v1.0のは{"name": "John"}
を吐きますAPI v1.1は{"pName": "John"}
を吐き出します。 (APIレスポンスを解析し)、パーサー用とデータ自体の構造などのために1:
interface IPersonDataStructure {
name : string;
}
interface IPersonDataParser {
parse(input: string) : IPersonDataStructure;
}
このマイナーチェンジは私が内部的に二つのインターフェースを持っていたい私のコードを壊すことを防止するために
// This class uses any parser which implements IPersonDataParser
// And uses IPersonDataStructure
class Person {
}
そして、私はこだわっているところです:
は、それから私は、データ構造とパーサを組み合わせたクラスを持つようにしたいです!私は一緒に2つを組み合わせる方法を知らない!
私は人のインスタンスごとに、インスタンスのアイデア好きではない:パーサは(例えば関数のように)ステートレスである必要がありますので
let aPerson = new Person(new Parser(data))
を。
class Parser implements IPersonDataParser {
static public function parse(data : string) : IPersonDataStructure {
return {...}
}
}
class Person {
private _data : IPersonDataStructure;
constructor(data : string, parser : IPersonDataParser) {
this._data = parser.parse(data)
}
}
コールバックはオプションですが、私は彼らの署名を検証することができた場合にのみ:。
問題は活字体は私がクラスであることを行うことができなかったです
たとえば、これは正しく検証しません。この問題を解決する方法について
type PersonDataParser = (data : string) => IPersonDataStructure;
// Whoops.. argument is missing!
let aParser =() => {
return {...}
}
let aPerson = new Person('data', aParser)
任意の提案ですか?
あなたはここで取り組もうとしている問題は何ですか? – toskv
説明済みの機能をクリーンな方法で実装したい – d3L
これは実際にはstackoverflowの問題の種類ではありません。多分、コードレビュースタック交換のウェブサイトを試してみてください。ここでは、多くの意見に基づくソリューションを生成する予定です。 :) – toskv