2009-05-29 15 views
6

Jemand sagte mir in einer answer to a stackoverflow question, dass die "zwei big guns" für die MVVM Muster sind 1) angefügten Verhaltensweisen und 2) Dienstleistungen. Ich nehme an, er bedeutet „WPF Dienste“, eine Phrase, die ich auf folgende Weise verwendet gefunden:Was genau sind "WPF-Dienste"?

PresentationFoundation.dll definiert die WPF-Steuerelemente Typen, Animation und Multimedia-Unterstützung, Datenbindung Unterstützung und andere WPF-Dienste.

Viele dieser WPF Dienste (entkoppelten Vielseitigkeits, reich Datenbindung, Styling, Ressourcen usw.) sind Software Entwicklung Best Practices, die konvergieren in einem einzigen, deklarative UI Stack.

Sie die Motivation hinter WPF verstehen, lernen die Syntax von XAML, das Kern-Programmiermodell, untersuchen und mehr WPF Dienste Umfrage.

Keiner der WPF Bücher habe ich auch erwähnen „WPF Dienste“ als solche, so ist dies nur ein Wort, das „WPF verfügt über“ wie entkoppelt Vielseitigkeits bedeutet, reich Datenbindung, Styling, usw. oder Gibt es noch etwas anderes hinter dem Begriff "WPF Services"?

+0

Ja, es geht um die Funktionen. Ich würde sagen, in diesem Kontext ist "Services" nur ein Schlagwort, um es besser klingen zu lassen. Genauso wie "User Experience" und ähnliches. – Botz3000

Antwort

3

Er spricht nicht über WPF-Dienste, sondern über Anwendungsdienste. Das heißt, einen Teil der Funktionalität zu einem unabhängigen Dienst abstrahieren, den mehrere VMs verbrauchen können.

+0

Was bedeutet das genau, sprichst du von einem Windows Service, Web Service? Der Wikipedia-Artikel zu WPF gibt Beispiele für "WPF-Anwendungsdienste" als "Benutzerschnittstelle, 2D- und 3D-Zeichnung, feste und adaptive Dokumente, fortgeschrittene Typografie, Vektorgrafiken, Rastergrafiken, Animation, Datenbindung, Audio und Video". Was würde es bedeuten, dass dann z.B. "mehrere ViewModels können Datenbindung konsumieren". Das ist immer der Fall. Was steckt hinter diesem Wort "WPF-Dienste" und "Anwendungsdienste" in diesem Sinne? Oder meinst du im klassischen Sinn wie "Sicherheitsdienste"? –

+3

Mit "Service" meine ich nur eine Abstraktion über ein Stück Funktionalität. Vielleicht ist die zugrunde liegende Funktionalität eine COM-Komponente oder ein Datenbankzugriff oder was auch immer. Egal - die VM weiß nur über eine Schnittstelle, mit der sie mit dieser Funktionalität interagieren kann. –

13

Martin Fowler hat eine Beschreibung dessen, was ein Service in seinem Dependency Injection Artikel ist. Einfach gesagt, ein Dienst ist ein Objekt, das Funktionalität bereitstellt, die von anderen Objekten verwendet werden kann. Sie finden den Begriff stark verwendet, wenn Sie die Muster Inversion of Control und Service Locator diskutieren.

Um dies mit dem Thema zur Hand zu nehmen, lassen Sie uns darüber nachdenken, wie wir ein Meldungsfeld im MVVM-Muster anzeigen würden. Der Aufruf von MessageBox.Show() wäre schlecht, Ray. Dies bindet das ViewModel fest an die UI-Architektur und erschwert das Testen des ViewModel. Stattdessen wäre eine Lösung, einen Dienst zu verwenden, den wir IDisplayMessage nennen. Dieser Dienst wird irgendwie an das ViewModel geliefert (über eines der beiden obigen Muster), und dieser Dienst wird verwendet, um eine Nachricht "anzuzeigen". Während des normalen Betriebs ruft eine konkrete Version dieses Dienstes MessageBox.Show() auf, aber während des Tests können wir eine andere konkrete Version (ein Testdoppel) bereitstellen, die sich anders verhält (häufig ein Noop oder wenn wir sicherstellen, dass ViewModel angezeigt wird) die Nachricht, eine Version, die den Anruf aufzeichnet, so dass wir feststellen können, dass er aufgetreten ist). Onyx (Haftungsausschluss: Ich bin der Autor) bietet genau diesen Service und die Infrastruktur, die für die Bereitstellung dieses Dienstes (und anderer) für Ihr ViewModel erforderlich ist.

Update: Da diese Antwort gemacht wurde, habe ich einen Blogpost geschrieben Services: Your ViewModel Deathstar, der das Thema ziemlich gut behandelt. Dies war Teil einer "Reihe" von Beiträgen, und Leser könnten auch an der ersten Post interessiert sein Behavior - Your Trusty ViewModel Bazooka.

+1

Warum nicht auf Ihre Artikel zeigen? angebaute Behaviors: http://wekempf.spaces.live.com/Blog/cns!D18C3EC06EA971CF!940.entry Dienstleistungen: http://wekempf.spaces.live.com/Blog/cns!D18C3EC06EA971CF!951. Eintrag – Trainee4Life

+0

Zu der Zeit gab es die Artikel nicht, und ich dachte einfach nicht, hierher zu kommen und die Antwort zu aktualisieren. – wekempf