다음을 통해 공유


Windows Phone Silverlight 비즈니스 및 데이터 계층을 UWP로 포팅하기

이전의 토픽은 I/O, 장치 및 앱 모델에 대해 포팅하기입니다.

비즈니스 및 데이터 계층은 UI 뒤에 있습니다. 이러한 계층의 코드는 운영 체제 및 .NET Framework API(예시: 백그라운드 처리, 위치, 카메라, 파일 시스템, 네트워크 및 기타 데이터 액세스)를 호출합니다. 그 중 대부분은 UWP(Universal Windows Platform) 앱에서 사용할 수 있으므로, 이 코드의 대부분을 변경 없이 포팅할 수 있을 것으로 예상할 수 있습니다.

비동기 메서드

진정으로 일관되게 응답성이 뛰어난 앱을 빌드할 수 있도록 하는 것이 UWP(Universal Windows Platform)의 우선 순위 중 하나입니다. 애니메이션은 항상 매끄럽고, 이동 및 살짝 밀기와 같은 터치 조작은 즉각적이고 지연이 없으므로 UI가 손가락에 붙어 있는 것처럼 느껴집니다. 이를 위해 50ms 이내의 완료를 보장할 수 없는 UWP API가 비동기식으로 만들어졌으며 비동기식으로 이름이 비동기라는 접미사로 추가되었습니다. UI 스레드는 비동기 메서드 호출에서 즉시 반환되고 다른 스레드에서 작업이 수행됩니다. 비동기 메서드를 사용하는 것은 C# await 연산자, JavaScript promise 개체 및 C++ 연속 작업을 사용하여 매우 쉽고 구문적으로 만들어집니다. 자세한 정보를 보려면 비동기 프로그래밍을 참조하세요.

백그라운드 처리

Windows Phone Silverlight 앱은 관리형 ScheduledTaskAgent 개체를 사용하여 앱이 포그라운드에 없는 동안 작업을 수행할 수 있습니다. UWP 앱은 BackgroundTaskBuilder 클래스를 사용하여 비슷한 방식으로 백그라운드 작업을 만들고 등록합니다. 백그라운드 작업의 작업을 구현하는 클래스를 정의합니다. 시스템은 백그라운드 작업을 주기적으로 실행하여 클래스의 Run 메서드를 호출하여 작업을 실행합니다. UWP 앱의 앱 패키지 매니페스트에서 백그라운드 작업 선언을 설정해야 합니다. 자세한 정보를 보려면 백그라운드 작업을 사용하여 앱 지원하기를 참조하세요.

Windows Phone Silverlight 앱은 백그라운드에서 큰 데이터 파일을 전송하기 위해 BackgroundTransferService 클래스를 사용합니다. UWP 앱은 Windows.Networking.BackgroundTransfer 네임스페이스의 API를 사용하여 이 작업을 수행합니다. 이 기능은 비슷한 패턴을 사용하여 전송을 시작하지만, 새로운 API는 향상된 기능과 성능을 제공합니다. 자세한 정보를 보려면 백그라운드에서 데이터 전송하기를 참조하세요.

Windows Phone Silverlight 앱은 앱이 포그라운드에 없는 동안 오디오를 재생하기 위해 Microsoft.Phone.BackgroundAudio의 관리형 클래스를 사용합니다. UWP는 Windows Phone Store 앱 모델을 사용합니다. 백그라운드 오디오백그라운드 오디오 샘플을 참조하세요.

클라우드 서비스, 네트워킹 및 데이터베이스

클라우드에서 데이터 및 앱 서비스를 Azure를 사용하여 호스팅할 수 있습니다. Mobile Services로 시작하기를 참조하세요. 온라인 및 오프라인 데이터가 모두 필요한 솔루션에 대해서는 Mobile Services에서 오프라인 데이터 동기화 사용하기를 참조하세요.

UWP는 System.Net.HttpWebRequest 클래스를 부분적으로 지원하지만, System.Net.WebClient 클래스는 지원되지 않습니다. 권장되는 미래 예측 대안은 Windows.Web.Http.HttpClient 클래스(또는 .NET을 지원하는 다른 플랫폼으로 코드를 이식해야 하는 경우 System.Net.Http.HttpClient)입니다. 이러한 API는 HTTP 요청을 나타내기 위해 System.Net.Http.HttpRequestMessage를 사용합니다.

UWP 앱은 현재 LOB(기간 업무) 시나리오 등의 데이터 집약적 시나리오에 대한 기본 제공 지원을 포함하지 않습니다. 하지만 SQLite를 로컬 트랜잭션 데이터베이스 서비스에 대해 사용할 수 있습니다. 자세한 정보를 보려면 SQLite를 참조하세요.

Windows Runtime 형식에 상대 URI가 아닌 절대 URI를 전달합니다. Windows Runtime에 URI 전달하기를 참조하세요.

시작 관리자 및 선택자

시작 관리자 및 선택자(Microsoft.Phone.Tasks 네임스페이스에서 찾을 수 있음), Windows Phone Silverlight 앱은 운영 체제와 상호 작용하여 전자 메일 작성, 사진 선택 또는 특정 종류의 데이터를 다른 앱과 공유하는 등의 일반적인 작업을 수행할 수 있습니다. 해당하는 UWP 형식을 찾기 위해 Windows Phone Silverlight에서 Windows 10 네임스페이스 및 클래스 매핑 토픽에서 Microsoft.Phone.Tasks에 대해 찾습니다. 이러한 메커니즘은 시작 관리자 및 선택자라고 하는 유사한 메커니즘부터 앱 간에 데이터를 공유하기 위한 계약 구현에 이르기까지 다양합니다.

Windows Phone Silverlight 앱을 휴면 상태로 전환하거나 사진 선택자 작업을 사용하는 경우, Windows Phone Silverlight 앱은 삭제 표시될 수도 있습니다. UWP 앱은 FileOpenPicker 클래스를 사용하는 동안 활성 및 실행을 유지합니다.

수익 창출(평가판 모드 및 앱 내 구매)

Windows Phone Silverlight 앱에서는 UWP CurrentApp 클래스를 대부분의 체험 모드 및 앱에서 바로 구매 기능에 대해 사용할 수 있으므로 코드를 포팅할 필요가 없습니다. 그렇지만 Windows Phone Silverlight 앱은 구매할 앱을 제공하기 위해 MarketplaceDetailTask.Show를 호출합니다.

    private void Buy()
    {
        MarketplaceDetailTask marketplaceDetailTask = new MarketplaceDetailTask();
        marketplaceDetailTask.ContentType = MarketplaceContentType.Applications;
        marketplaceDetailTask.Show();
    }

해당 코드를 포팅하여 다음과 같이 UWP RequestAppPurchaseAsync 메서드를 호출합니다.

    private async void Buy()
    {
        await Windows.ApplicationModel.Store.CurrentApp.RequestAppPurchaseAsync(false);
    }

테스트 목적으로 앱 구매 및 앱 내 구매 기능을 시뮬레이션하는 코드가 있는 경우, 대신 CurrentAppSimulator 클래스를 사용하도록 포팅할 수 있습니다.

타일 또는 알림 메시지 업데이트에 대한 알림

알림은 Windows Phone Silverlight 앱에 대한 푸시 알림 모델의 확장입니다. WNS(Windows Push Notification Service)에서 알림을 받으면 타일 업데이트 또는 알림 메시지와 함께 UI에 정보를 표시할 수 있습니다. 알림 기능의 UI 쪽을 포팅하려면 타일 및 알림 메시지를 참조하세요.

UWP 앱에서 알림 사용에 대한 자세한 정보는 알림 메시지 보내기를 참조하세요.

C++, C# 또는 Visual Basic을 사용하여 Windows 런타임 앱에서 타일, 알림 메시지, 배지, 배너 및 알림을 사용하는 방법에 대한 정보 및 자습서는 타일, 배지 및 알림 메시지 작업하기를 참조하세요.

스토리지(파일 액세스)

격리된 스토리지에 키-값 쌍으로 앱 설정을 저장하는 Windows Phone Silverlight 코드는 쉽게 포팅됩니다. 다음은 Windows Phone Silverlight 버전에 대한 이전 및 이후 예시입니다.

    var propertySet = IsolatedStorageSettings.ApplicationSettings;
    const string key = "favoriteAuthor";
    propertySet[key] = "Charles Dickens";
    propertySet.Save();
    string myFavoriteAuthor = propertySet.Contains(key) ? (string)propertySet[key] : "<none>";

또한 UWP는 다음과 같습니다.

    var propertySet = Windows.Storage.ApplicationData.Current.LocalSettings.Values;
    const string key = "favoriteAuthor";
    propertySet[key] = "Charles Dickens";
    string myFavoriteAuthor = propertySet.ContainsKey(key) ? (string)propertySet[key] : "<none>";

Windows.Storage 네임스페이스의 하위 집합을 사용할 수 있지만, 많은 Windows Phone Silverlight 앱은 더 오랫동안 지원되었으므로 IsolatedStorageFile 클래스를 사용하여 파일 i/o를 수행합니다. IsolatedStorageFile이 사용 중이라고 가정하면, 먼저 Windows Phone Silverlight 버전에서 파일을 작성하고 읽는 전후 예시는 다음과 같습니다.

    const string filename = "FavoriteAuthor.txt";
    using (var store = IsolatedStorageFile.GetUserStoreForApplication())
    {
        using (var streamWriter = new StreamWriter(store.CreateFile(filename)))
        {
            streamWriter.Write("Charles Dickens");
        }
        using (var StreamReader = new StreamReader(store.OpenFile(filename, FileMode.Open, FileAccess.Read)))
        {
            string myFavoriteAuthor = StreamReader.ReadToEnd();
        }
    }

UWP를 사용하는 동일한 기능은 다음과 같습니다.

    const string filename = "FavoriteAuthor.txt";
    var store = Windows.Storage.ApplicationData.Current.LocalFolder;
    Windows.Storage.StorageFile file = await store.CreateFileAsync(filename, Windows.Storage.CreationCollisionOption.ReplaceExisting);
    await Windows.Storage.FileIO.WriteTextAsync(file, "Charles Dickens");
    file = await store.GetFileAsync(filename);
    string myFavoriteAuthor = await Windows.Storage.FileIO.ReadTextAsync(file);

Windows Phone Silverlight 앱에는 선택적 SD 카드 대한 읽기 전용 액세스 권한이 있습니다. UWP 앱에는 SD 카드에 대한 읽기/쓰기 권한이 있습니다. 자세한 정보는 SD 카드에 액세스하기를 참조하세요.

UWP 앱에서 사진, 음악 및 비디오 파일에 액세스하는 방법에 대한 자세한 정보는 음악, 사진 및 비디오 라이브러리의 파일 및 폴더를 참조하세요.

자세한 정보를 보려면 파일, 폴더 및 라이브러리를 참조하세요.

다음 토픽은 폼 팩터 및 UX에 대해 포팅하기입니다.