2009-08-11 8 views
9

Ich arbeite an einer WPF MVVM-Anwendung. Die Sache, die ich bemerke, ist, dass ich eine übermäßige Menge von Boilerplate-Code schreiben muss, nur um Befehle zu deklarieren (über DelegateCommands vom MVVM-Toolkit des WPF-Teams), angehängte Eigenschaften und angehängte Verhaltensweisen. Gibt es irgendwelche Strategien, um die Menge an Boilerplate-Code zu reduzieren, den ich schreiben muss?Reduzieren Boilerplate Code in MVVM WPF App für angehängte Eigenschaften, Befehle, etc?

Danke!

+1

Geben Sie uns ein Beispiel für etwas, das Sie "Boilerplate" nennen. Die Vorsätze eines Mannes sind die Geschäftslogik eines anderen Mannes. –

+0

Ich benutze Snippets, um sie zu erstellen. Die Snippets erzeugen # Regionen, sodass ich nicht alles ansehen muss. –

Antwort

9

Persönlich mag ich Josh Smith MVVM Foundation library. Er verwendet eine Klasse namens RelayCommand dort, aber es klingt sehr ähnlich zu Ihrem DelegateCommand aus dem Toolkit. Es ermöglicht Ihnen, einen Befehl zu erstellen und die CanExecute und führen Sie Logik durch Lambda-Ausdrücke. Dies wird dazu beitragen, eine Menge Standardcode zu reduzieren.

In his blog spricht Josh auch über die Verwendung eines generischen Property Observer, um einige der unordentlicheren Aspekte der Ereignisbehandlung PropertyChanged zu vermeiden. Das ist auch eine Betrachtung wert.

Ehrlich gesagt, eine Menge der sogenannten "Boilerplate" Code ist eine sehr dynamische und flexible Grundlage für Ihre Anwendung. Wenn Sie eine kleine, leicht zu wartende Anwendung erstellen, fragen Sie sich vielleicht: "Muss ich das MVVM-Muster hier überhaupt anwenden?" Wenn Sie auf der anderen Seite eine größere Anwendung erstellen, die eine lange Lebensdauer hat und viel Wartung erfordert, dann wird Ihnen dieser Standardcode auf der ganzen Linie helfen.

+2

Link zum Blogartikel: https://joshsmithsonwpf.wordpress.com/2009/07/11/one-way-to-avoid-messy-propertychanged-event-handling/ –

1

Die offensichtlichste Strategie, die ich mir vorstellen kann, ist die Verwendung von Code-Schnipsel und/oder Dateivorlagen. Es reduziert zwar nicht die Codezeilen, aber Sie sparen Zeit.

Sie können sie selbst erstellen (oder finden Sie einige, die Sie direkt in Ihr Visual Studio importieren können).

Ich persönlich benutze das mvvm light Toolkit von Laurent Bugnion und ich benutze seine Code-Snippets/Dateivorlagen, sie sparen mir viel Zeit. Ich würde annehmen, dass es für die meisten populären mvvm-Toolkits etwas Ähnliches gibt.

Hoffe es hilft!

1

Ich habe festgestellt, dass ich eine Menge Code geschrieben habe, um die Änderungsbenachrichtigung über die INotifyPropertyChanged-Schnittstelle zu implementieren. Um dies zu reduzieren, habe ich ein NuGet-Paket namens PropertyChanged.Fody gefunden, das das Hinzufügen von INotifyPropertyChanged zu einer Klassen-Eigenschaft wirklich einfach macht.

So verwenden Sie es;

using PropertyChanged; 

[ImplementPropertyChanged] 
public partial class Order 
{ 
} 

Jetzt hat jede öffentliche Eigenschaft in der Klasse die Benachrichtigung über die Eigenschaft geändert. Dies ist besonders nützlich für EF-Klassen, die zuerst über DB generiert werden, wenn Sie nicht die vollständige Kontrolle über Ihre Entitäten haben.

Weitere Informationen finden Sie unter GitHub.