Frage

Ich hoffe diese Frage ist nicht so breit wie es zunächst scheinen mag.Ich bin der Gestaltung einer software-Anwendung in meinem <sarcasm>voluminös</sarcasm> Freizeit.Ich möchte, dass es sowohl cross-Plattform und modulare.An dieser Stelle, denn ich bin noch in der Planungsphase, die ich auswählen kann praktisch jeder Sprache und toolset.

Das macht die Dinge schwieriger, nicht einfacher, denn es gibt scheinbar so viele Möglichkeiten sowohl der Ziele (Modularität, Plattform-Agnostizismus).

Meine Grundannahme ist, dass Sicherheit, Datenspeicherung, Interaktion mit dem Betriebssystem und der Konfiguration sollten alle behandelt werden, indem ein "container" - aber die meisten anderen Funktionen werden geliefert durch den plug-in-Module.Wenn ich zu beschreiben, es auf einem hohen Niveau (ohne Sie komplett zu verschenken meine Idee), wäre es eine einzige Anwendung, die können tun viele verschiedene jobs, alle für das gleiche Ziel (es gibt eine Menge unterschiedlicher Dinge zu tun, aber alle Daten hat, um zu interagieren und hoch verfügbar sein).

Dies ist keine neue Idee, und auch nicht besonders exotisch.Doch ich finde mich Ringen mit nicht so viel, wie es zu tun (ich kann mir denken, viele Möglichkeiten), aber welche Methode ist die beste.

Zum Beispiel, ich weiß, dass Eclipse praktisch verkörpert, was ich hier beschreibe, aber ich finde Java-Anwendungen im Allgemeinen (und Eclipse ist keine Ausnahme) werden zu groß und zu langsam für das, was ich brauche.Dito desktop-apps geschrieben in Python und Ruby (die sich hervorragend Sprachen!)

I don ' T mind kompilieren die code-Basis für verschiedenen Plattformen wie native exectables.Doch, C-und C++ haben Ihre eigenen Probleme.

Als C# - Entwickler sind, habe ich eine Vorliebe für verwalteten code.Aber ich bin überhaupt nicht verkauft auf Mono -, doch (ich könnte überzeugt sein).

Hat jemand irgendwelche Ideen/Erfahrungen/ spezifische Lieblings-frameworks zu teilen?

War es hilfreich?

Lösung

Nur ein Beispiel:für .NET-apps gibt es die KABINE (Composite Application Block) und die Composite Application Guidance für WPF.Beide sind hauptsächlich die Implementierungen einer Reihe von verschiedenen design-mustern Schwerpunkt auf Modularität und lose Kopplung zwischen den Komponenten ähnlich wie ein plug-in-Architektur:Sie haben ein IOC-framework, MVC-Basisklassen, eine lose gekoppelte event-broker-dynamisches laden von Modulen und andere Sachen.

Deshalb nehme ich an, die Muster-Infrastruktur ist, was Sie versuchen zu finden, nur nicht speziell für .NET.Aber wenn Sie sehen, dass die KABINE als eine Reihe von Muster-Implementierungen können Sie sehen, dass fast jeder Sprache und Plattform hat einige form bereits gebaut-in-oder Drittanbieter-frameworks für die einzelnen Muster.

Also meine Meinung wäre:

  1. Studie (wenn Sie sind nicht vertraut mit) einige dieser design-Muster.Sie könnte nehmen Sie als Beispiel die CAB-framework für WPF-Dokumentation: Muster in der Composite Application Library
  2. Entwerfen Sie Ihre Architektur zu denken, auf welche dieser Muster, die Sie denken, wäre nützlich für das, was Sie erreichen wollen ohne nachdenken in spezifische Muster-Implementierungen oder Produkte.
  3. Sobald Sie Ihre architektonischen Anforderungen definiert, genauer gesagt, suchen Sie nach einzelnen frameworks, die helfen, erreichen jedes dieser Muster/features für die Sprache, die Sie entscheiden, zu verwenden und zusammen mit Ihrer eigenen application framework basiert auf Ihnen.

Ich Stimme zu, dass der schwierige Teil ist, um all dies unabhängig von der Plattform.Ich kann mir wirklich nicht denken, eine andere Lösung zu wählen eine ausgereifte Plattform unabhängige Sprache wie Java.

Andere Tipps

Planen Sie eine desktop-oder web-Anwendung?

Jeder um hier scheint zu denken, dass Mono ist großartig, aber ich glaube nicht, dass es bereit ist für den industriellen Einsatz, würde ich gleichsetzen mono wo Wein ist, tolle Idee;wenn es funktioniert, es funktioniert gut, und wenn es nicht...naja Ihr Pech.mod_mono für Apache ist sehr glitchy und schwer zu bekommen ist korrekt ausgeführt werden.

Wenn Ihr Ziel für den desktop, geht nichts über die eclipse-RCP (Rich Client Plattform) Rahmen: http://wiki.eclipse.org/index.php/Rich_Client_Platform.

Sie können bauen, Fenster, linux, mac alle unter dem gleichen code und alle UI-Komponenten sind native zu den OS.Und RCP gewinnt in der Modularität, die Hände nach unten, es hat einen plug-in-Architektur, die ihresgleichen sucht (von dem, was ich gesehen habe)

Ich habe mit RCP für 1,5 Jahre jetzt, und ich weiß nicht, was sonst könnte ersetzen es, es ist #1 in der Nische.

Wenn Ihr ganz im Gegensatz zu java ich würde in wxWidgets entweder mit python oder C++

Wenn Sie möchten, Plattform-Unabhängigkeit, dann müssen Sie trade-off zwischen performance und Entwicklungsaufwand.C++ schneller sein als Java (dies ist umstritten, FWIW), aber Sie bekommen die Plattformunabhängigkeit viel leichter mit Java.Python und Ruby sind im selben Boot.

Ich bezweifle, dass .Wäre auch NET viel schneller als Java (Sie sind beide VM-Sprachen, nachdem alle), aber das große problem mit .NET ist die Plattform Unabhängigkeit.Mono hat ein edles Ziel und überraschend gute Ergebnisse, so weit wird es aber immer spielen catch-up mit Microsoft Windows.Sie könnten in der Lage sein, zu akzeptieren, dessen Grenzen aber es ist immer noch nicht das gleiche wie mit identischen Multiplattform-Umgebungen, die Java -, Python-und Ruby haben.Auch:die .NETTO-Entwicklung und support-tools sind stark verzerrt in Richtung Fenster, und wohl immer sein wird.

IMO, Ihre beste Wette ist, um den Gegner Java...oder, zumindest, die JVM.Wenn Sie nicht wie die Programmiersprache Java (und C# dev ich vermute, dass das nicht der Fall ist), dann haben Sie zumindest Optionen Jython, JRuby und Scala.Mit der JVM, erhalten Sie sehr gute Plattform-Unabhängigkeit, gute Leistung, und Zugang zu einer großen Anzahl von Bibliotheken und support-tools.Es gibt fast immer eine Java-Bibliothek, Hafen oder Umsetzung, das tun, was Sie brauchen, es zu tun.Ich glaube nicht, dass jede andere Plattform da draußen hat die gleiche Anzahl von Optionen;es ist der eigentliche Wert ist, dass die Flexibilität.

Für Modularität:das ist mehr darüber, wie Sie erstellen die software als das, was Plattform Sie verwenden.Ich weiß nicht viel über den plugin-Architekturen, wie Sie beschreiben, aber ich vermute, dass es möglich sein wird, in so ziemlich jeder modernen Plattform, die Sie wählen.

Wenn Sie Vorhaben, python-Entwicklung, Sie können immer verwenden pyrex zu optimieren, einige der langsameren Teile.

Mit meiner begrenzten Mono-Erfahrung kann ich sagen, ich bin ziemlich begeistert.Die Tatsache, dass es ist die aktive Entwicklung und eine Menge von kontinuierliche Anstrengungen, um es zu bringen bis zu spec mit den neuesten .Net-Technologien ist ermutigend.Es ist unglaublich nützlich, um der Lage sein, vorhandene verwenden .Netto-Fähigkeiten auf mehreren Plattformen.Ich hatte ähnliche Probleme mit der performance, wenn Sie versuchen zu erreichen, einige grundlegende Aufgaben in Python + PyGTK -- vielleicht kann Sie gemacht werden, um in den richtigen Händen aber es ist schön zu nicht haben zu sorgen über die Leistung 90% der Zeit.

Für desktop-Anwendungen schreiben, die in eine interpretierte Sprache, und mit einem cross-platform-UI-toolkit wie wxWidgets erhalten Sie einen langen Weg in Richtung Plattform-Unabhängigkeit (Sie müssen nur vorsichtig sein, nicht zu verwenden andere Module, die nicht cross-Plattform-verwenden Sie Dinge wie Python os.path Modul, statt Dinge zu tun, wie config_path = "/home/$USER")

Das sagte der zu machen gut cross-Plattform-Anwendung, die Sie haben zu tun, einige Dinge anders, auf jeder Plattform..

Zum Beispiel, OS X, ist wahrscheinlich die verschiedenen Einstellungen befinden sich normalerweise in ~/Library/Prefernces/ als .plists, UI ' s sind in der Regel rund um das schwebende Fenster mit einem einzigen Menü-Leiste angedockt an der Oberseite der Bildschirm.

Ich nehme an, dies ist, wo die Modularität ins Spiel kommt..Mit den Einstellungen oben genannten Beispiel könnten Sie eine Klasse UserConfig, von denen Sie OS-spezifische Versionen.Die Windows speichert die Konfigurationsdaten in die entsprechenden Application Data Ordner oder die Registrierung.Der Mac OS verwendet wird .plist-Dateien auf ~/Library/Preferences/, und die unix-'y verwendet man in der ~/.dotfiles.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top