Inside Microsoft Patterns & practices
Erstellen von WPF und Silverlight-Anwendungen mit einer einzelnen Codebasis mit prism
Erwin van der Valk

Inhalt
Composite Application Anleitungen für WPF und Silverlight, auch liebevoll als Prism v2 bezeichnet wurde, jetzt mehrere Monate.
Eines der Prism auf Anleitung bietet Bereiche ist die Möglichkeit, Ihre Anwendung Windows Presentation Foundation (WPF) und Silverlight als Ziel.
Es ist, die anfänglich interessant, diesen Teil unserer Anleitung erfüllt etwas Widerstand.
Warum wurden wir Schwerpunkt auf der ersten Reihe von Iterationen Multi Zielgruppenadressierung Wenn wir unsere Zeit erteilen Anleitungen auf Komposition Ausgaben werden konnte?
Aber seit der Veröffentlichung des Projekts v2 Prism haben wir gefunden, dass viele Kunden wirklich diesem Teil der Anleitung Liebe.
Insbesondere wie Sie das Projekt Linker-Tool wir damit Multi-Zielgruppenadressierung erstellt; als grundlegende ist, das Tool auch empfangen wurden und Möglichkeiten haben wir vorstellen, konnte nicht verwendet wird.
So betrachten wir Ansatz beim Schreiben von Multi abzielende Anwendungen und wie Prism dasselbe beitragen kann.
Einführung
Wenn wir arbeiten auf Prism v2 im August 2008 gestartet, wusste wir, wir wollten, WPF und Silverlight unterstützen.
Silverlight stellt große Fortschritte in Richtung schließen die Lücke zwischen der Leistungsfähigkeit eine Rich Client-Anwendung und die Reichweite und Einfachheit der Bereitstellung einer Webanwendung.
Die erste Version des Prism nur WPF zielt, aber da WPF und Silverlight sehr ähnlich sind, wir wussten es Erstellen einer Silverlight-Version zu schwierig wäre.
Und da Prism hilft beim Schreiben, modulare Anwendungen lose wir Gefühl, dass Prism auch Hilfe konnte in Sie Schreiben von Anwendungen, die aus einer einzelnen Code Basis WPF und Silverlight als Ziel.
Die Herausforderung ist natürlich, obwohl WPF und Silverlight ähnlich sind, nicht binär-kompatibel sind.
Die API und XAML-Sprache selbst verfügt auch geringfügige Unterschiede, die zu Multi-target erschweren.
Erstellen einer Silverlight-Version von prism
Obwohl wir das Gefühl, Multi-Zielgruppenadressierung eine nützliche Funktion für unsere Kunden wäre, mussten wir auch einen etwas selfish Grund für Sie erstellen.
Wir eine Silverlight-Version von Prism erstellen möchten, aber wir haben den Overhead von zwei Codebasen verwalten möchten.
Da wir wissen nicht, wie viel Code wiederverwenden werden würde, haben wir eine Reihe von Spitzen.
Eine Sammlung (in der Terminologie "agile") ist eine Zeit geschachtelt Untersuchung, die einer Problemdomäne erfahren so dass Sie eine weitere gültige Vorkalkulation können ermöglicht.
Daher haben wir eine Reihe von Spitzen, um anzuzeigen, wie viel der Prism v1 CodeBase wir migrieren konnte Silverlight und wie schwierig wäre unser Code nach Silverlight portieren.
Die Schlussfolgerung war faszinierend.
Wir geschätzt, dass wir ungefähr 80 Prozent des Codes in der Prism-Bibliothek wiederverwenden konnte, ohne es zu ändern.
Im Idealfall würden haben wir zusagt um ein einzelnes Projekt erstellen und kompilieren Sie es in WPF und Silverlight zu können.
Das Problem bei diesem Ansatz ist, dass das Projektsystem in Visual Studio davon ausgegangen wird, dass ein Projekt eine Verweise, einen Compiler und einen Typ der Ausgabe verfügt.
Wir haben versucht, mehrere Möglichkeiten erhalten ein einzelnes Projekt Ausgeben von Silverlight und WPF-Ausgaben, aber keines davon zu unserer Zufriedenheit gearbeitet.
Eine Möglichkeit, das wirklich gut funktionierte war die zwei Projekte erstellen und Verknüpfen von Dateien aus einem Projekt zu einem anderen.
Nettes Vorteil dieses Ansatzes ist, dass Sie präzise steuern, über welche jeder Ausgabe aussehen sollte.
Sie können beispielsweise steuern, welche Dateien freigegeben werden soll oder welche Assemblys für jedes Projekt verwiesen werden soll.
Und jede Änderung an einer verknüpften Datei ist in beiden Projekten sofort wiedergegeben.
Erstellen von Project-Linker
Nach unserer spiking Phase vereinbarten wir Obwohl es ziemlich mühsam und fehleranfällig war, dass der Ansatz, Verknüpfen von Dateien gearbeitet wurde.
Dann mussten wir viel Diskussionen: sollten wir sehr viel Zeit erstellen Sie ein Tool zur Hilfe bei Multi-Zielgruppenadressierung, anstatt die Anleitung erstellen Zeit investieren?
Möglicherweise nicht offensichtlich, aber erstellen und liefern ein Tool, das in Visual Studio integriert ist für uns recht teuer macht.
Integration von mit Visual Studio dauert ein wenig Zeit in und von sich selbst.
Fügen Sie hinzu, die es dauert um ein Installationsprogramm erstellen, die entsprechend in der strengen Microsoft internen Richtlinien Signatur signiert ist und das Tool auf vielen verschiedenen Umgebungen zu testen.
All diese Faktoren reduzieren Sie die Zeit, die wir investieren können zum Erstellen von tatsächlichen Anleitungen.
Aber da das wir ziemlich stark Gefühl, dass dieses Tool helfen Sie uns in unsere Bemühungen und sehr hilfreich, unsere Kunden sein würden, wir entschieden, fortfahren und erstellt.
Für die ersten Paar von zwei Wochen Iterationen wir fast ausschließlich an Linker Projekt gearbeitet.
Wie bereits erwähnt, können wir etwas Feedback von der Community erhalten.
Warum wurden wir immer auf Multi-Zielgruppenadressierung Ausgaben?
Wasn't Prism ein Projekt zum Erstellen zusammengesetzter Anwendungen helfen?
Aber während wir Project Linker erstellt wurden, wir wurden auch dessen Verwendung zum Erstellen einer Silverlight-Version der Prism.
Und da wir waren Project Linker (intern wird Hund Fooding aufgerufen oder Essen Ihre eigenen Hund Essen) verwenden wir waren sicher unsere Tools sehr verwendbar sein würde.
Wir absichtlich Project Linker sehr einfach gehalten.
Es ist nicht in Funktionsweise magischen und etwas tun werden mit Project Linker kann auch problemlos manuell durchgeführt werden.
Wie der Name schon sagt, können Sie zwei Projekte wie in Abbildung 1 gezeigt miteinander verknüpfen.
Sie dem ersten Projekt hinzufügen Dateien werden als verknüpfte Datei auf das zweite Projekt hinzugefügt.
Ändert z. wie verschieben, umbenennen oder löschen auch übernommen werden.
Abbildung 1 mit den Linker Project Verknüpfen von Dateien zwischen Projekte
Da Sie möglicherweise steuern welche Dateien verknüpfen möchten, implementiert haben wir eine einfache Benennungskonvention.
In der Standardeinstellung sind alle Dateien außer mit der Erweiterung .XAML verknüpft.
Wenn Sie möchten Dateien erstellen, die für eine einzelne Plattform spezifisch sind, können das Suffix .Desktop oder .Silverlight an ihn anfügen werden.
Wenn Sie möchten, können Sie diese Benennungskonvention ändern.
In der Projektdatei finden Sie einen regulären Ausdruck, der bestimmt, ob eine Datei verknüpft werden muss.
Das folgende Beispiel verdeutlicht dies:
ProjectLinkerExcludeFilter="\\?desktop(\\.*)?$;\\?Silverlight
(\\.*)?$;\.desktop;\.Silverlight;\.xaml;^service references(\\.*)?$;\. clientconfig;^web references(\\.*)?$"
Projekt Linker erwies als bei Prism v2 erstellt werden.
Nach dem Abrufen verwendet um geringfügigen Marotten dieses Ansatzes besteht, die wir in einem späteren Zeitpunkt zu war eine erfreulich Erfahrung in der Lage Code einmal schreiben und es sowohl für ein Silverlight eine WPF-Version zu kompilieren.
Nach eine gewisse Zeit Projektmitglieder hatte Listen mit zusätzlichen Features, die Sie Project Linker, zusagt haben würde, aber auch ohne diese Features wurde das Tool sehr verwendbar.
Die Einfachheit des Tools war es viel flexibler als wir hätten vorstellen.
Nach auf CodePlex für eine Weile hatte, hören wir von Personen, dass Sie es einfach zum Erstellen von Silverlight und WPF-Anwendungen verwenden wurden nicht.
Einige Personen wurden auch es verwenden, um verschiedene Visual C++-Projekte miteinander verknüpfen.
Andere verwendete er denselben Satz von Geschäftsregeln der Gültigkeitsprüfung in einer Silverlight-Anwendung und in die Webdienste, die die Silverlight-Anwendung verwendet.
Test-Driven Development für Silverlight
Ein weiterer Bereich, persönlich praktisch sein Multi Zielgruppenadressierung gefundenen, ist dafür der testgesteuerten Entwicklung in Silverlight.
Ich bin ein großer Fan der testgesteuerten Entwicklung.
Es ist eine hervorragende Framework verfügbar für Silverlight Komponententest, hat aber einige Nachteile.
Ist nicht mit Visual Studio integriert, und Sie können nicht auswählen, testen, führen.
Es werden alle Tests in Ihrer Testassembly ausgeführt.
So nun, selbst wenn ich eine Anwendung schreiben werde, die nur auf Silverlight ausgeführt werden, ich noch eine verknüpfte WPF-Version dieses Projekts nur zum Schreiben und Ausführen die Komponententests erstellen.
Ich liebe die Möglichkeit, einen Test schreiben und anschließend direkt aus Visual Studio ausführen müssen.
Innerhalb von Sekunden müssen ich das Ergebnis meiner Tests, die Zyklen "-> Test-> Update-> Test code" sehr kurz.
Dies erhöht wirklich meine Produktivität.
Nur vergessen Sie nicht Ihre Silverlight-Komponententests ausführen, bevor Sie in Ihrem Code, prüfen da manchmal ein Test auf einer Plattform übergeben und auf den anderen fehlschlagen.
Architektur der Anwendung mehrere Zielgruppenadressierung
Beim Erstellen der Silverlight-Version der Prism-Bibliothek, vordefinierten Traders Referenzimplementierung und Schnellstarts, haben wir einige wichtige Empfehlungen bezüglich der Multi-Zielgruppenadressierung.
Die wichtigste optimale Methode besteht, dass eine lose gekoppelte und modulare Architektur Ihre Bemühungen Multi-Zielgruppenadressierung wirklich helfen kann.
Lose gekoppelte Architekturen können Sie und Auswählen der Teile der Anwendung Multi-target sollen.
Was kann einfach identifiziert werden mehrere angestrebte
Bevor Sie Ihre Lösung zur Unterstützung von Multi-Zielgruppenadressierung Architekt können, ist es wichtig zu wissen, was können und nicht einfach Multi-Ziel.
Im Allgemeinen können Sie sagen, dass die meisten Logik-geschäftsbezogene Code sehr einfach Multi gerichtet werden kann.
Beispiel:
-
Präsentationslogik.
Dies ist die Logik, die auf Benutzeraktionen reagiert und steuert, welche Daten an die visuellen Elemente übergeben.
-
Geschäftslogik und Geschäftsregeln.
Die Geschäftslogik Laufwerke von Geschäftsprozessen, und die Geschäftsregeln können Überprüfung auf die Geschäftsentitäten durchführen.
-
Geschäftsentitäten.
Diese sind Klassen, die die Daten der Anwendung darstellen.
Code, der mehr Infrastruktur-bezogene ist, ist normalerweise sehr schwer zu Multi-target.
Im folgenden werden Beispiele:
-
visuelle Elemente (Ansichten). Die Möglichkeit,, visuelle Elemente wie Steuerelemente anzugeben, genug unterscheidet zwischen WPF und Silverlight schwierig zu Multi-target machen.
Nicht nur stehen verschiedene Steuerelemente für jede Plattform, jedoch das XAML, die zum Angeben des Layouts verwendet, auch weist verschiedene Fähigkeiten.
Obwohl es nicht unmöglich, multi-target sehr einfache Ansichten oder einige einfache Stile, werden Sie schnell in Einschränkungen ausführen.
-
Konfiguration Einstellungen. Silverlight enthält keinen System.Configuration-Namespace und bietet keine Unterstützung für Konfigurationsdateien.
Wenn Sie die Silverlight-Anwendung konfigurierbar machen möchten, müssen Sie eine benutzerdefinierte Lösung erstellen.
-
Daten zugreifen. Die einzige Möglichkeit, die eine Silverlight-Anwendung durch die Daten zugreifen kann, ist über Webdienste.
Im Gegensatz zu WPF kann keine Silverlight-Anwendung direkt auf Datenbanken zugreifen.
-
-Interop (mit anderen Anwendungen, COM oder Windows Forms). Eine WPF-Anwendung in einer Umgebung mit voller Vertrauenswürdigkeit kann mit anderen Anwendungen auf Ihrem Computer interagieren oder vorhandene Ressourcen wie z. B. COM oder Windows Forms-Objekte verwendet werden.
Dies ist nicht in Silverlight möglich, da er in einer geschützten Sandbox ausgeführt wird.
-
Protokollierung und Ablaufverfolgung.
Aufgrund der geschützten Sandbox kann keine Silverlight-Anwendung Protokollinformationen in der EventLog oder Ablaufverfolgung Informationen in einer Datei (außer im isolierten Speicher) schreiben.
Um eine Anwendung entwerfen, die Sie Ihre Geschäftslogik problemlos wiederverwenden können, sollten Sie die Dinge zu trennen, die einfach zu Multi-target von Dinge sind, die schwer zu Multi-target sind.
Interessanterweise ist dies genau die Architektur einer typischen Anwendung Prism.
Abbildung 2 zeigt die typische Architektur einer Anwendung Prism.
Abbildung 2 typische Prism Anwendungsarchitektur
In diesem Diagramm sind die Ansichten Klassen, die den Visualisierung Aspekt Ihrer Anwendung durchführen.
In der Regel diese Steuerelemente und Seiten, und im Fall von WPF oder Silverlight-Anwendungen Sie häufig definieren das Layout in XAML.
Die Logik der Anwendung ist, in separate Klassen berücksichtigt.
Ich werde ich über getrennte Präsentation Muster sprechen etwas in die Entwurfsmuster hinter diesem eintauchen.
Die Anwendungsdienste in diesem Diagramm können eine Vielzahl von Funktionen bereitstellen.
Beispielsweise kann eine Protokollierung oder eine Datenzugriffs-Komponente ein Anwendungsdienst betrachtet werden.
PRISM bietet auch eine Reihe von diese Dienste wie die RegionManager oder die XapModuleTypeLoader.
Diese Dienste erörtert mehr Wenn ich zum Plattform-spezifische Dienste erstellen sprechen.
Getrennte Präsentation
Als Teil der Anleitung, die wir mit Prism bereitstellen, empfehlen wir, dass Sie den Visualisierung Aspekt Ihrer Anwendung die Darstellungslogik trennen.
Viel Entwurfsmuster wie Model-View-ViewModel oder Model-View-Presenter kann Ihnen dabei helfen.
Was die meisten dieser Muster haben gemeinsam, dass Sie Ihre Benutzer-Schnittstelle-bezogenen Code (und Markup) in separate Klassen mit unterschiedlichen Zuständigkeiten aufzuteilen beschrieben wird.
Abbildung 3 zeigt ein Beispiel für die Model-View-ViewModel-Muster.
Abbildung 3 Beispiel für die Model-View-ViewModel-Muster
Die Model-Klasse hat den Code enthalten und auf Daten zugreifen.
Die Ansicht ist normalerweise ein Steuerelement mit Code (vorzugsweise in Form eines XAML-Markup), die Teil der Daten in Ihrem Modell und ViewModel anhand seiner bildlichen Vorstellungen.
Und besteht eine Klasse namens ViewModel, PresentationModel oder Vortragenden, die Teil der Benutzeroberflächenlogik wie möglich halten wird.
In der Regel ist ein getrennter Präsentation Muster implementiert, zu wie viel Ihre Benutzeroberfläche bezogenen Codeeinheit getestet wie möglich.
Da der Code in Ihre Ansichten Komponententest offenkundig schwer ist, getrennt diese Präsentation Muster Hilfe, die Sie so viel von der Code wie möglich in einer testbare ViewModel-Klasse setzen.
Im Idealfall müssten nicht Sie Code in Ihre Ansichten nur einige XAML-Markup, das die visuellen Aspekte der Anwendung definiert und einige Bindungsausdrücke, um Daten aus der ViewModel und Modell anzuzeigen.
Bei Multi-Zielgruppenadressierung, hat eine getrennte Präsentation Muster ein anderes erhebliche Vorteile.
Es können Sie alle Ihre Benutzeroberflächenlogik wiederverwenden da Sie die Logik in separate Klassen angepasst haben.
Zwar nicht unmöglich, Multi-target einige der Code in Ihre Ansichten (XAML, Steuerelemente und Code-Behind), wir haben befinden, die Unterschiede zwischen WPF- und Silverlight groß genug, dass Multi-targeting XAML ist nicht sinnvoll.
XAML weist verschiedene Fähigkeiten und die Steuerelemente, die für WPF und Silverlight zur Verfügung stehen sind nicht identisch.
Dies betrifft nicht nur das XAML, aber es betrifft auch der Code-Behind.
Obwohl es nicht wahrscheinlich, dass Sie alle Benutzeroberfläche bezogenen Code wiederverwenden können, kann ein getrennter Präsentation Muster Sie viel von der Darstellungslogik wie möglich wiederverwenden.
Plattform-spezifischer Entwickeln von Webdiensten
Beim Erstellen der Prism-Bibliotheken und der vordefinierten Traders Referenzimplementierung, folgen wir ausschließlich das Prinzip der einzigen Verantwortung.
Dieses Prinzip beschrieben, dass jede Klasse nur ein Grund zum ändern sollten.
Eine Klasse behebt mehrere Probleme oder mehrere verantwortlich ist, hat mehrere Gründe, zu ändern.
Beispielsweise kann eine Klasse, die einen Bericht aus einer Datenbank laden und Drucken dieses Berichts kann, ändern, wenn die Datenbank ändert oder wenn das Layout des Berichts ändert.
Ein interessantes Hinweis Wenn Ihre Klasse zu viel: Wenn Sie feststellen, dass Sie bestimmen einen Namen für die Klasse, die die Verantwortung beschreibt Schwierigkeiten haben, hat es zu viele Aufgaben.
Wenn Sie das Prinzip der einzigen Verantwortung folgen, werden Sie häufig mit jeweils eigenen diskrete Verantwortung und einen beschreibenden Namen viel kleinere Klassen beenden.
Wir betrachten häufig viele dieser Klassen, Anwendungsdienste, da Sie einen Dienst für Ihre Anwendung bieten.
Dieses Prinzip der einzigen Verantwortung trägt wirklich bei Multi-Zielgruppenadressierung.
Nehmen Sie zum Beispiel das Modul Ladeprozess im Prism.
Zahlreiche Aspekte von diesem Prozess sind für WPF und Silverlight ähnlich.
Einige Ähnlichkeiten enthalten wie die ModuleCatalog hält Verfolgen der Module in das System und wie die ModuleInitializer Modul Instanzen erstellt werden und ruft die IModule.Initialize()-Methode auf.
Aber dann again, wie wir die Assemblydateien geladen werden, die die Module enthalten zwischen WPF und Silverlight ziemlich etwas unterscheidet.
Abbildung 4 veranschaulicht dies.
Abbildung 4 in Prism laden
Es ist durchaus sinnvoll für eine WPF-Anwendung die Module von Datenträger laden.
So ist dies die Funktionsweise der FileModuleTypeLoader.
Dies durchführen nicht jedoch sinnvoll sein, eine Silverlight-Anwendung, da seine geschützten geschützten Zugriff auf das Dateisystem gewähren nicht.
Doch für Silverlight, müssen Sie eine XapModuleTypeLoader um Module aus einem XAP-Datei zu laden.
Da wir kleinere Klassen mit einer distinct Verantwortung erstellt war es viel einfacher zu verwenden die meisten dieser Klassen und erstellen Sie nur die plattformspezifischen Dienste das Verhalten zu kapseln, das zwischen den Plattformen unterscheidet.
Vermeiden von Abweichungen und versuchen, eine einzelne Codebasis beibehalten
Obwohl die meisten Funktionen in Prism problemlos auf Silverlight portiert wurde, haben wir unvermeidlich in Situationen, in denen wir auf ein Feature in WPF verlassen würde, die in Silverlight vorhanden sind, nicht, ausgeführt.
Eigenschaftenvererbung Abhängigkeit war eine davon.
In WPF Sie können eine Abhängigkeitseigenschaft für ein Steuerelement festlegen, und würden automatisch von allen untergeordneten geerbt werden.
Wir wurden diese Funktion verwenden, um ein Manager Region eine Region zugeordnet.
Automatische Eigenschaftenvererbung ist leider nicht verfügbar in Silverlight.
Für Silverlight musste eine Lösung erstellen, die die Erstellung von Bereichen verzögert, bis der Region-Manager durch einen anderen Mechanismus gefunden werden konnte.
Mit wenigen Anpassungen konnte wir diesen Code für WPF wiederverwenden.
Wir konnte die ursprüngliche, viel einfacher Lösung für WPF gespeichert haben und nur die neue Lösung für Silverlight verwendet, aber dann wir würden mussten zwei Codebasen verwalten und eine andere öffentliche API anbieten.
Beim Versuch, eine Funktion für die Verwendung in WPF und Silverlight zu erstellen, müssen Sie zwangsläufig in Situationen ausführen nicht eine der Plattformen ein Feature unterstützt, die Sie verwenden möchten.
Ihre beste Verteidigung gegen diesen Situationen besteht darin, diese "Inkompatibilitäten" zu umgehen und eine Lösung, die funktioniert in beiden Umgebungen erstellen.
Verwaltet eine einzige Codebasis viel einfacher als das Verwalten von zwei Code baut!
Für andere Plattform Funktionen aufzunehmen
Es gibt Fälle, in dem es keinen Sinn oder ist nicht möglich Plattform Unterschiede, z. B. umgehen, wird es keine allgemeine Lösung, die in WPF und Silverlight funktionieren würde.
Wenn dies geschieht, sind einige Strategien zu berücksichtigen.
Für beliebig jedoch klein und isolierten Plattform Unterschiede empfehle ich plattformspezifische Dienste erstellen.
Jedoch für kleine Plattform Unterschiede Sie in Betracht konnte ziehen oder die bedingte Kompilierung als auch die partielle Klassen.
Bedingte Kompilierung
Die einfachste Vorgehensweise um unterschiedliche Plattformfunktionen aufnehmen zu können, ist die bedingten Kompilierung Verwendung.
Mithilfe der # If SILVERLIGHT pre-compiler Anweisung, dargestellt in Abbildung 5 können Sie Abschnitte des Codes erstellen, die nur in Silverlight oder nur in WPF kompiliert werden.
Dies scheint sehr nützlich, aber eine Methode oder Klasse kann schnell unlesbar bei diesem Ansatz.

Abbildung 5 bedingte Kompilierung
#if SILVERLIGHT
Application.Current.RootVisual = shell;
#else
shell.Show();
#endif
Wir haben festgestellt, dass Sie die pre-compiler # If-Direktive verwenden sollten, nur um eine einzelne Codezeile sporadisch zu ändern.
Da Lesbarkeit wirklich leidet, empfehle nicht ich diese Technik für beliebig aber sehr einfachen Fällen sieht.
Partielle Klassen
Ein weiteres Verfahren, das Sie einsetzen konnte, ist die Verwendung von partiellen Klassen.
Mit diesem Verfahren können Sie Klassen, die hauptsächlich freigegeben sind, jedoch unterscheiden sich erstellen, in einem oder zwei kleinen Methoden.
Dieses Verfahren kann zum Anpassen von kleinen Implementierung Änderungen zwischen WPF und Silverlight sehr nützlich sein.
Ich finde partielle Klassen in den Bereich der Ausnahmen besonders nützlich sein.
In .NET Framework empfiehlt es oft um Ihre Ausnahmen serialisierbar zu machen.
Silverlight unterstützt jedoch nicht das Attribut [Serializable].
Partielle Klassen verwenden, können Sie die meisten der Ausnahmecode wiederverwenden aber [Serializable]-Attribut nur auf die .NET Framework-Variante des Codes wie in Abbildung 6 gezeigt können anwenden.

Abbildung 6 partielle Klassen für Ausnahmen
// MyException.cs
Public partial class MyException : Exception
{
. . .
}
// Desktop only additions to this class.
// MyException.Desktop.cs
[Serializable]
Public partial class MyException : Exception
{
protected MyException (SerializationInfo info, StreamingContext context) : base(info, context) { }
}
Leider partielle Klassen von Auffindbarkeit und Lesbarkeit Probleme beeinträchtigt werden.
Es ist nicht sofort deaktivieren in der Datei ihre Funktionalität befindet.
Eine Klasse sollte eine einzelne Verantwortung haben und entsprechend der einzelnen Verantwortung benannt werden.
Wenn Sie feststellen, dass eine Klasse in eine Möglichkeit in Silverlight und die andere in WPF verfügt, ist es nicht das einzigen Verantwortung Muster folgt.
Plattformspezifischer Code in Dienste mit einem beschreibenden Namen extrahieren ist normalerweise eine bessere Lösung.
Da Visual Studio nie Multi-Zielgruppenadressierung aufzunehmen entwickelt wurde, werden Sie wahrscheinlich in einige Marotten ausführen, die durch den Ansatz verursacht werden.
Keines davon sind sehr schwerwiegend, aber wissen, was sind erleichtert.
Visual Studio erkennt, dass eine verknüpfte Datei in verschiedenen Projekttypen platziert werden kann.
Also je nachdem, ob die verknüpfte Datei von WPF oder Silverlight öffnen, wird es der IntelliSense entsprechend anpassen.
Häufig ist es möglich, dass Sie ein Sprachkonstrukt verwenden, die in nur einer der Plattformen verfügbar ist.
Buildfehler begegnen Sie werden, wenn Sie die Projektmappe kompilieren, da der Code für eine der Plattformen ungültig ist.
Abhängig davon, ob Sie geöffnet bestimmt die Datei von WPF oder Silverlight, ob Sie die rote Wellenlinie angezeigt werden.
Aber sobald Sie die Tatsache gewöhnt anwachsen, dass eine Änderung in einem Projekt das verknüpfte Projekt unterbrechen kann, müssen Sie schnell, wo gesucht kennen.
Projektverweise sind auch interessant.
Projekt-Linker hinzufügen nicht automatisch Verweise.
Wir suchten in dies beim Erstellen des Tools, aber es wurden zu viele Rand Anfragen an diese zuverlässiger machen.
Beispielsweise haben die Binärdateien für Silverlight andere Namen als die Binärdateien für WPF.
Schließlich können Sie fast jede Art von Datei, z. B. Ressourcendateien verknüpfen.
Allerdings sollten Sie sicherstellen, dass die Eigenschaften, z. B. die Kompilierungsoptionen zwischen beiden Projekten gleich sind.
Viele Kunden gern absolut Prism.
Auch wenn die Anwendung die zusammengesetzten Funktionen nicht, die Prism bietet, profitieren es weiterhin ungeheuer flexible Architektur von, die Prism fördert.
Die Möglichkeit, problemlos multi-target die Anwendung ist nur eine dieser Vorteile – und es ist eine wirklich gut!
Sie können die Binärdatei herunterladen und
Quellcodedateien für Project Linker
Microsoft Download Center.
Sie können weitere Informationen
PRISM online
.
Erwin van der Valk Hinweis auf die Sicherheitsanfälligkeit ist ein Entwickler auf ’s Microsoft Patterns und practices-Team.
Er ist außerdem ein Scuba-Diver, einen Master Kung Fu und Metal Guitarist.
Erteilen Sie ihm Code – er nach rechts, hinaus und screaming eintauchen und machen viel Rauschen während es!
Auschecken der er zu macht Geräusch
Erwinvandervalk.
NET
.