Я использую внешнюю выборку API, а затем отображаю данные.Абстрактные внешние API
Чтобы быть гибким, я хочу полностью отделить API от моего кода и захотеть работать с самонастраиваемыми структурами данных.
Вот краткий графический обзор:
Чтобы сделать задачу немного больше здесь для бетона пример:
Давайте предположим, что данные о людях:
API v1.0 плюет {"name": "John"}
тогда как API v1.1 плюет {"pName": "John"}
.
Чтобы предотвратить, что это незначительное изменение нарушило бы мой код, я хочу иметь два интерфейса внутренне: один для синтаксического анализа (который анализирует ответ API) и один для как структуры самих данных:
interface IPersonDataStructure {
name : string;
}
interface IPersonDataParser {
parse(input: string) : IPersonDataStructure;
}
Тогда я хочу иметь класс, который сочетает в себе анализатор со структурой данных:
// This class uses any parser which implements IPersonDataParser
// And uses IPersonDataStructure
class Person {
}
И это где я застрял! Я не знаю, как объединить их вместе!
мне не нравится идея экземпляра на экземпляр лица:
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)
}
}
Callbacks является вариантом, но только если я могу подтвердить свою подпись.
Например, это не проверяет правильность:
type PersonDataParser = (data : string) => IPersonDataStructure;
// Whoops.. argument is missing!
let aParser =() => {
return {...}
}
let aPerson = new Person('data', aParser)
Любые предложения о том, как решить эту проблему?
В чем именно проблема, которую вы пытаетесь решить здесь? – toskv
Я хочу реализовать описанную функциональность чистым способом. – d3L
Это не вопрос типа handle stackoverflow. Возможно, попробуйте веб-сайт обмена обновлениями кода. Здесь он будет генерировать множество решений, основанных на мнениях. :) – toskv