2010-11-18 4 views
3

Ich habe mich gefragt, wie Multi-Plattform-Anwendungen entwickelt werden. Anwendungen wie Microsoft Office für MAC/Windows, FireFox für MAC/Windows/Linux etc.Wie werden Multi-Plattform-Anwendungen entwickelt?

Wenn sie für verschiedene Plattformen codieren müssen, dann ist es schwer zu verwalten und es gibt viele andere Komplexitäten beteiligt.

F: Wie bewältigen Entwicklungsteams die Komplexität der Entwicklung für mehrere Plattformen?

+2

Was ist die Frage? –

Antwort

6

Microsoft Office ist keine Multi-Plattform-Anwendung. Wenn Sie jemals die Mac-Version verwendet haben, die Sie kennen würden. Die letzte Multi-Plattform-Version von Office war 1998 die berüchtigte Version von Office 6.0. Was passierte, war, dass die Benutzer über das Aussehen und das Gefühl meckerten und die Porting-Mentalität verurteilten.

Die Mac-Version von Office wird nicht nur von einem anderen Team geschrieben, sondern von einer komplett anderen Abteilung geschrieben: Die Mac Business Unit, auch MacBU genannt. Verschiedener Abteilungsleiter, verschiedene Manager und ich glaube auch verschiedene Vertriebs- und Marketingleute.

Das ist eine Möglichkeit, es zu tun. Auch unter Mac-Nutzern als "der richtige Weg" bekannt.

Natürlich ist nicht jeder der Größe von Microsoft und kann es sich leisten, eine komplett andere Tochtergesellschaft zu erstellen, nur um Mac-Benutzer (viel weniger Linux-Benutzer) zu unterstützen. Der etwas vernünftigere Weg, dies zu tun, ist die Verwendung einer plattformübergreifenden Bibliothek für GUI-Sachen wie wxWidgets oder QT oder GTK. Schließlich wird sich der Großteil Ihres Kern-C-Codes nicht über viele Plattformen hinweg ändern, nur die proprietären Dinge wie GUI und Dateiverwaltung. Heck, Sie können sogar bei POSIX-Funktionsaufruf für die Dateiverwaltung und Vernetzung für plattformübergreifend bleiben. Aber seien Sie gewarnt, es besteht eine hohe Wahrscheinlichkeit, dass Mac-Benutzer das Endergebnis hassen (wie bei MS Office 6.0).

Der dritte Weg ist der mittlere Weg. Halten Sie den allgemeinen, zentralen Anwendungscode von den proprietären GUI-Inhalten getrennt (was im Hinblick auf Wartbarkeit eine gute Idee ist). Das MVC-Entwurfsmuster ist eine gute Möglichkeit, dies zu tun. Haben Sie einen Weg (mit #define oder anderen Build-Skripten/Makefiles), um die View- und Controller-Komponenten Ihres MVC-Frameworks zu wechseln. Das macht Google mit Chrome. Die Mac-Version verwendet native Mac-Grafiken und die Windows/Linux-Version verwendet eine Grafik-Engine namens Skia. Der Kern von Chrome ist WebKit und V8, die beide plattformübergreifend sind.

1

Es gibt wahrscheinlich fast so viele Ansätze wie es Multi-Plattform-Anwendungen gibt. Im Allgemeinen würden sie ein paar verschiedene Strategien einkochen:

  1. Verwenden Sie eine Sprache mit einem tragbaren Laufzeit - Java zum Beispiel .NET in geringerem Ausmaß oder irgendwelchen von zig verschiedenen interpretierte Skriptsprachen.

  2. Verwenden Sie ein plattformübergreifendes Toolkit (z. B. QT), um die Plattformunterschiede zu verbergen.

  3. Verwenden Sie bedingte Kompilierung in einer Sprache wie C oder C++, um die Codebasis für verschiedene Plattformen zu ändern. Dies ist ähnlich wie in # 2, nur dass Sie im Wesentlichen ein eigenes plattformübergreifendes Toolkit in Ihrer App erstellen.

0

Wenn Sie C++ kompiliert sprechen, am Ende mit einigen bedingten definiert up, wie #IFDEF WIN32 an wenigen Stellen im Code. Wenn Sie plattformübergreifenden Code schreiben, müssen Sie plattformübergreifend testen. Ein Build-System wie Hudson, das Ihren Code auf allen Plattformen erstellen kann, wenn Sie einchecken, hilft.

Für GUI-Sachen ist die Verwendung einer guten plattformübergreifenden Bibliothek wie QT äußerst hilfreich. Sie können Ihren Gui-Code mehr oder weniger auf die gleiche Weise schreiben, behalten aber das ursprüngliche Gefühl auf jedem System, für das sie kompiliert wurde.

Hoffe, das hilft!

0

Ein primärer Ansatz für Multi-Plattform-Code ist eine Multi-Plattform-Basis. Beispielsweise funktioniert C++ - Code, der die Boost-Bibliothek (für Dateizugriff, Grundelemente für die Thread-Synchronisierung usw.) freizügig verwendet, in einer Multi-Plattform-Einstellung. Wenn Sie .net (verwalteten) Code erstellen, wird Ihre plattformübergreifende Fähigkeit durch die .NET-Laufzeit (bei Windows) oder bei Mono (bei Linux-Systemen) erreicht.

Es gibt mehr Fragen als diese, aber das ist das größte. Andere Angelegenheiten können im Fall von C++ beinhalten, wie die GUI gehandhabt wird. Eine bewusste Entscheidung, plattformübergreifenden Code zu verwenden, spielt wiederum eine Rolle - etwa die Verwendung von WxWidgets oder Qt.

Es ist auch hilfreich, einen cross-platform build Prozess zu haben.

0

Eine Möglichkeit besteht darin, eine Abstraktionsschicht für das Hardware-/Betriebssystem zu erstellen. Sie erstellen Ihre Anwendung in C oder C++ mit der Standard C-Bibliothek oder einem gleichwertigen Code, der unabhängig von der Plattform ist, auf die Sie ausgerichtet sind.

Für OS- oder hardwarespezifische Schnittstellen (wie Laden/Speichern, Drucken, Symbolleisten, Benachrichtigungen usw.) erstellen Sie eine verallgemeinerte API für Ihre Anwendung und codieren dann zwei separate Implementierungen - eine für jede der Zielplattformen.

Beim Umgang mit Dateiformaten oder Netzwerkprotokollen kann es notwendig sein, Code zur Konvertierung von Multibyte-Werten zwischen der Host-Byte-Reihenfolge (Groß- oder Klein-Endian) und der korrekten Endian-Eigenschaft zu verwenden Datei/Netzwerkprotokoll.

0

F: Wie bewältigen Entwicklungsteams die Komplexität der Entwicklung für mehrere Plattformen?

A: gute Regressionstests.

0

Ein Ansatz besteht darin, eine separate Klasse für jede plattformspezifische Funktionalität zu haben und alle für eine bestimmte Plattform benötigten Klassen zusammen zu haben. Auf diese Weise ist der Code sauberer und vermeidet unnötige Abstraktionen. Hier ist ein Beispiel für "Upload XML data to MySQL or NoSQL" Blaue Farbe ist für NoSQL und Pink für SQL, Khaki Farbe ist für gemeinsamen Code und Grau ist Sprachunterstützung.