2011-01-26 6 views
0

저는 데스크톱 응용 프로그램을 만들었으며 웹 응용 프로그램으로도 사용하기를 원합니다. File() 유형과 FileStream이있는 행에 오류가 발생합니다.이를 우회하는 방법이 있습니까?File() 웹 응용 프로그램의 FileStream

답변

2

이 @Florian F의 올바른 응답에 피기 백하려면 특정 플랫폼이 구현 사이를 전환 할 시간에 인터페이스를 사용해야합니다, 여기 당신이 그것을 구현하는 방법입니다 :

public interface IGetTheStuffService { 
    function getSomeTofu():Tofu; 
} 

파일 기반 IMPL를 작성하여 파일 액세스 추상에 대한 인터페이스를 만들기 ementation

public class FileStuffService implements IGetTheStuffService { 
    public function getSomeTofu():Tofu { 
     // File-based implementation 
    } 
} 

그리고 당신의 소비자에서 HTTP 기반 구현

public class HTTPStuffService implements IGetTheStuffService { 
    public function getSomeTofu():Tofu { 
     // HTTP-based implementation 
    } 
} 

는 IGetTheStuffService에

[Inject] public var tofuService:IGetTheStuffService; 

public function doSomeStuff():void { 
    var tofu:Tofu = tofuService.getSomeTofu(); 
    // act on the tofu 
} 

을 주목 를 주입 메타 태그를 의존하고있다. 여기서 Dependency Injection (DI) 시스템은 구성 (Air 애플 리케이션을위한 FileStuffService 또는 웹 어플리케이션을위한 HTTPStuffService)에 기반하여 의존성을 푸시합니다. 파 슬 리, RobotLegs는 이 fiex-IOC가 사용하는 [IocBind 물론

, 당신은 DI 컨테이너없이 갈 수있다 [를 주입]은 ... 그냥 직접 매개 변수를 주입 것이다 사용합니다.

그러나 당신은 아이디어를 얻습니다. 실제로는 아주 간단한 패턴입니다.

+0

예, 그게 제가 언급 한 것입니다! –

+0

고마워, 그게 내가 필요한거야. – noize

2

File() 클래스는 AIR 응용 프로그램에서만 사용할 수 있으므로 오류가 발생합니다.

  1. 당신은 플랫폼에 의존하는 코드를 분리하고 별도의 라이브러리에 넣어해야합니다

    이것은 내가 어떻게 할 것입니다.

  2. 플랫폼이 다른 격리 된 라이브러리에 있어야하는 것과 동일하게 작동하는 다른 코드.
  3. 간단한 래퍼가 될 2 개의 프로젝트를 만듭니다. 공통 코드에만 결합 된 Flex 프로젝트입니다. 공통 및 플랫폼 종속 코드에 결합 된 AIR 프로젝트입니다.

그러면 아마

+0

+1 저는 크로스 플랫폼 앱에서'File'을 서비스로 사용하는 것을 고려할 것입니다. 'IGetTheStuffService' 또는 뭔가. Parsley, RobotLegs 또는 flex-ioc와 같은 Dependency Injection 시스템을 사용하여 런타임에 적절한 서비스를 연결하는 것을 고려하십시오. –