데스크톱 앱 포팅 지침

대부분의 애플리케이션 코드는 다음 영역 중 하나로 분류할 수 있습니다.

  • 사용자 인터페이스 코드(예: 창 및 단추)
  • 타사 컨트롤(예: 차트)
  • 비즈니스 논리(예: 유효성 검사 규칙)
  • 로컬 데이터 스토리지 및 액세스
  • 웹 서비스 및 원격 데이터 액세스

C#(또는 Visual Basic.NET)으로 작성된 Windows Forms 및 WPF 애플리케이션의 경우 플랫폼 간에 놀라운 양의 비즈니스 논리, 로컬 데이터 액세스 및 웹 서비스 코드를 공유할 수 있습니다.

.NET 이식성 분석기

Visual Studio 2017 이상에서는 기존 애플리케이션을 검사하고 다른 플랫폼으로 "있는 그대로" 이식할 수 있는 코드의 양을 알려줄 수 있는 .NET 이식성 분석기(Windows용 다운로드)를 지원합니다.

GitHub의 이식성 분석기에서 명령줄 도구를 다운로드하고 동일한 보고서를 제공하는 데 사용할 수도 있습니다.

"내 코드의 x%가 이식 가능합니다. 다음에는 어떻게 해야 할까요?"

분석기에서 코드의 상당 부분이 이식 가능하지만 다른 플랫폼으로 이동할 수 없는 모든 앱의 일부가 확실히 표시되기를 바랍니다.

코드의 여러 청크가 다음 버킷 중 하나에 속할 수 있습니다. 아래에서 자세히 설명합니다.

  • 다시 사용할 수 있는 이식 가능한 코드
  • 변경이 필요한 코드
  • 이식 가능하지 않고 다시 작성해야 하는 코드

다시 사용할 수 있는 이식 가능한 코드

모든 플랫폼에서 사용할 수 있는 API에 대해 작성된 .NET 코드는 플랫폼 간을 변경하지 않고 사용할 수 있습니다. 이상적으로 이 모든 코드를 이식 가능한 클래스 라이브러리, 공유 라이브러리 또는 .NET 표준 라이브러리로 이동한 다음 기존 앱 내에서 테스트할 수 있습니다.

그런 다음 해당 공유 라이브러리를 다른 플랫폼(예: Android, iOS, macOS)에 대한 애플리케이션 프로젝트에 추가할 수 있습니다.

변경이 필요한 코드

일부 .NET API는 일부 플랫폼에서 사용할 수 없습니다. 코드에 이러한 API가 있는 경우 플랫폼 간 API를 사용하려면 해당 섹션을 다시 작성해야 합니다.

이 예제에는 .NET 4.6에서 사용할 수 있지만 모든 플랫폼에서 사용할 수 없는 리플렉션 API의 사용이 포함됩니다.

이식 가능한 API를 사용하여 코드를 다시 작성한 후에는 해당 코드를 공유 라이브러리에 패키지하고 기존 앱 내에서 테스트할 수 있어야 합니다.

이식 가능하지 않고 다시 작성해야 하는 코드

플랫폼 간일 가능성이 없는 코드의 예는 다음과 같습니다.

  • 사용자 인터페이스 – 예를 들어 Android 또는 iOS의 프로젝트에서 Windows Forms 또는 WPF 화면을 사용할 수 없습니다. 이 Controls Comparison 을 참조로 사용하여 사용자 인터페이스를 다시 작성해야 합니다.

  • 플랫폼별 스토리지 - 플랫폼별 기술(예: 로컬 SQL Server Express 데이터베이스)을 사용하는 코드입니다. 플랫폼 간 대안(예: 데이터베이스 엔진용 SQLite)을 사용하여 이를 다시 작성해야 합니다. UWP가 Android 및 iOS와 약간 다른 API를 가지고 있기 때문에 일부 파일 시스템 작업도 조정해야 할 수 있습니다(예: 일부 파일 시스템은 대/소문자를 구분하고 다른 파일 시스템은 그렇지 않음).

  • 타사 구성 요소 – 애플리케이션의 타사 구성 요소를 다른 플랫폼에서 사용할 수 있는지 확인합니다. 비 시각적 NuGet 패키지와 같은 일부 패키지는 사용할 수 있지만 다른 패키지(특히 차트 또는 미디어 플레이어와 같은 시각적 컨트롤)는 사용할 수 있습니다.

이식 가능한 코드를 만들기 위한 팁

  • 종속성 주입 – 각 플랫폼에 대해 서로 다른 구현을 제공하고

  • 계층화된 접근 방식 – MVVM, MVC, MVP 또는 이식 가능한 코드를 플랫폼별 코드와 분리하는 데 도움이 되는 다른 패턴 중 어느 것이든지.

  • 메시징 – 코드를 전달하는 메시지를 사용하여 애플리케이션의 여러 부분 간의 상호 작용을 제거할 수 있습니다.