다트의 환경 플래그 또는 대상 플랫폼을 기반으로 라이브러리/코드를 조건부로 가져 오는 방법이 있습니까? dart:io
의 ZLibDecoder/ZLibEncoder 클래스와 대상 플랫폼을 기반으로 한 zlib.js 사이를 전환하려고합니다.다트 패키지의 조건부 가져 오기/코드
create a unified interface을 설명하는 기사가 있지만 중복 코드를 만들지 않는 기술과 중복 된 코드를 테스트하지 못합니다. game_loop
employs this technique이지만 아무것도 공유하지 않는 별도의 클래스 (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) 파서입니다.
둘 다 모두 동일하게 구현하는 경우 추출 클래스에 구현 한 다음 ParserHtml 및 ParserServer에서 해당 클래스를 확장해야하는 이유는 무엇입니까? – Nathanial
'Parser'에 직접 접근하거나 인스턴스화하는 다른 클래스를 가지려고합니다. ParserHtml이나 ParserServer를 직접 참조하지 않고 어떻게 처리 할 수 있는지 잘 모르겠습니다. 어쩌면 내가 사용할 수있는 공장 패턴이 있을지도 모른다. – ALW
import parserhtml.dart. 실제 파생 클래스이며 html 버전에 대한 팩토리 생성자가있는 Parser 클래스를 정의합니다. 서버 버전에서도 마찬가지입니다. 그런 다음 코드는 가져 오는 항목을 제외하고 동일 할 수 있습니다. –