2010-11-18 4 views
3

저는 멀티 플랫폼 응용 프로그램이 어떻게 개발되는지 궁금합니다. MAC/Windows 용 Microsoft Office, MAC/Windows/Linux 용 FireFox와 같은 응용 프로그램.다중 플랫폼 응용 프로그램은 어떻게 개발됩니까?

다른 플랫폼 용 코드를 작성해야하는 경우 관리가 어려우며 많은 복잡한 작업이 필요합니다.

Q : 개발 팀은 여러 플랫폼에 대한 개발의 복잡성을 어떻게 관리합니까?

+2

무엇이 질문입니까? –

답변

6

Microsoft Office는 다중 플랫폼 응용 프로그램이 아닙니다. Mac 버전을 사용한 적이 있다면 알고 계실 것입니다. 마지막 멀티 플랫폼 버전의 Office는 1998 년에 불명예스러운 Office 6.0 방식이었습니다. 사용자는 모양과 느낌에 대해 신음하며 '포팅'사고 방식을 비판했습니다.

Mac 버전의 Office는 다른 팀에서 작성한 것이 아니라 완전히 다른 부서에서 작성한 것입니다. Mac 비즈니스 유닛 (MacBU). 다른 부서장, 다른 관리자 및 다른 판매 및 마케팅 담당자를 믿습니다.

그 방법 중 하나입니다. Mac 사용자들 사이에서 "적절한 방법"이라고도합니다.

물론 모든 사람이 Microsoft의 크기는 아니며 Mac 사용자 (훨씬 적은 Linux 사용자)를 지원하기 위해 완전히 다른 자회사를 만들 수있는 권한은 없습니다. 약간 더 정숙한 방법은 wxWidgets 또는 QT 또는 GTK와 같은 GUI 도구 용 크로스 플랫폼 라이브러리를 사용하는 것입니다. 결국, 핵심 C 코드의 대부분은 GUI와 파일 관리와 같은 독점적 인 기능을하는 많은 플랫폼을 변경하지 않을 것입니다. 젠체하는, 당신은 파일 관리와 네트워킹을위한 POSIX 함수 호출을 고집 할 수 있습니다. 그러나 Mac 사용자가 최종 결과를 싫어할 가능성이 높습니다 (예 : MS Office 6.0).

세 번째 방법은 중간입니다. 공통의 핵심 애플리케이션 코드를 독점 GUI와 분리하여 보관하십시오 (유지 관리 측면에서 좋은 아이디어입니다). MVC 디자인 패턴은이를 수행하는 좋은 방법입니다. #define 또는 다른 빌드 스크립트/makefile을 사용하여 MVC 프레임 워크의 View 및 Controller 구성 요소를 전환하는 방법이 있습니다. Chrome에서 Google이 수행하는 작업입니다. Mac 버전은 기본 Mac 그래픽을 사용하고 Windows/Linux 버전은 Skia이라는 그래픽 엔진을 사용합니다. Chrome의 핵심은 크로스 플랫폼 인 WebKit과 V8입니다.

1

다중 플랫폼 응용 프로그램과 거의 비슷한 접근 방법이 있습니다. 일반적으로, 그들은 몇 가지 전략을 졸이다 것 :

  1. 휴대용 런타임과 언어를 사용 - 낮은 정도, 예를 들어 .NET을 자바, 또는 엄청나게 다른 해석 스크립트 언어의.

  2. 크로스 플랫폼 툴킷 (예 : QT)을 사용하여 플랫폼 차이를 숨 깁니다.

  3. 다른 플랫폼의 코드베이스를 변경하려면 C 또는 C++ 같은 언어로 조건부 컴파일을 사용하십시오. 이것은 # 2와 비슷하지만, 앱 내부에 자체 플랫폼 간 툴킷을 기본적으로 구축한다는 점만 다릅니다.

0

컴파일 된 C++을 말하면 코드의 몇 자리에 #IFDEF WIN32과 같은 일부 조건부 정의가 생깁니다. 크로스 플랫폼 코드를 작성할 때는 크로스 플랫폼을 테스트해야합니다. 체크인시 모든 플랫폼에서 코드를 작성할 수있는 Hudson과 같은 빌드 시스템이 도움이됩니다.

GUI 도구의 경우 QT와 같은 우수한 크로스 플랫폼 라이브러리를 사용하는 것이 훨씬 도움이됩니다. 그것은 당신이 당신의 gui 코드를 다소간 같은 방식으로 쓸 수있게하지만, 그것이 컴파일 된 어떤 시스템에서든 원래의 느낌을 유지합니다.

희망이 도움이됩니다.

0

다중 플랫폼 코드의 기본 접근 방식은 다중 플랫폼 기반입니다. 예를 들어, 부스트 라이브러리 (파일 액세스, 스레드 동기화 프리미티브 등)를 자유롭게 사용하는 C++ 코드는 다중 플랫폼 설정에서 작동합니다. 마찬가지로 .net (관리되는) 코드를 작성한 경우 .net 런타임 (Windows의 경우) 또는 Mono (Linux 시스템의 경우)를 통해 교차 플랫폼 기능을 수행 할 수 있습니다.

이러한 문제보다 많은 문제가 있지만 가장 큰 문제입니다. 다른 문제는 C++의 경우 GUI가 처리되는 방법을 포함 할 수 있습니다. WxWidgets 나 Qt를 사용하는 것과 같이 플랫폼 간 코드를 사용하는 의도적 인 선택이 다시 그 역할을합니다.

cross-platform build 프로세스가 있으면 도움이됩니다.

0

한 가지 방법은 하드웨어/운영 체제 추상화 계층을 만드는 것입니다. C 또는 C++에서 표준 C 라이브러리 또는 대상 플랫폼과 관련이없는 동일한 코드를 사용하여 응용 프로그램을 만듭니다.

OS 또는 하드웨어 관련 인터페이스 (예 :로드/저장 대화 상자, 인쇄, 툴바, 알림 등)의 경우 응용 프로그램에서 사용할 일반 API를 만든 다음 두 가지 구현 각 대상 플랫폼

파일 형식이나 네트워크 프로토콜을 다룰 때 호스트 바이트 순서 (크거나 작은 엔디안 일 수 있음)와 멀티 바이트 값을 변환하는 코드를 포함해야 할 수도 있습니다. 파일/네트워크 프로토콜.

0

Q : 개발 팀은 여러 플랫폼에 대한 개발의 복잡성을 어떻게 관리합니까?

A : 좋은 회귀 테스트.

0

하나의 접근법은 각 플랫폼 특정 기능에 대해 별도의 클래스를 가지며 함께 컴파일 된 특정 플랫폼에 필요한 모든 클래스를 갖는 것입니다. 이렇게하면 코드가 더 깨끗해지며 불필요한 추상화가 방지됩니다. 여기에 "Upload XML data to MySQL or NoSQL"의 예가 있습니다. Blue는 NoSQL 용이고, 분홍색은 SQL 용이며, 카키색은 일반 코드 용이고 회색은 언어 지원 용입니다.

관련 문제