Есть ли способ условно импортировать библиотеки/код на основе флагов среды или целевых платформ в Dart? Я пытаюсь переключиться между классами dart:io
ZLibDecoder/ZLibEncoder и zlib.js в зависимости от целевой платформы.
Существует статья, в которой описывается, как создать единый интерфейс, но я не могу представить, чтобы эта техника не создавала повторяющийся код и избыточные тесты для проверки этого дублирующегося кода. game_loop
использует эту технику, но использует отдельные классы (GameLoopHtml и GameLoopIsolate), которые не Кажется, я ничем не делюсь.
Мой код выглядит примерно так:
class Parser {
Layer parse(String data) {
List<int> rawBytes = /* ... */;
/* stuff you don't care about */
return new Layer(_inflateBytes(rawBytes));
}
String _inflateBytes(List<int> bytes) {
// Uses ZLibEncoder on dartvm, zlib.js in browser
}
}
Я хотел бы избежать дублирования кода, создав два отдельных класса — ParserHtml и ParserServer — которые реализуют все одинаково, за исключением _inflateBytes
.
РЕДАКТИРОВАТЬ: конкретный пример здесь: https://github.com/radicaled/citadel/blob/master/lib/tilemap/parser.dart. Это парсер TMX (Tile Map XML).
Parser
или создают экземпляры, и я не уверен, как я могу справиться с этим, не имея прямой ссылки на ParserHtml или ParserServer. Может быть, есть какой-то заводской шаблон, который я могу использовать для этого. - person ALW   schedule 23.10.2013