MVVM de Prism

Afin de poursuivre mon tour complet sur l'architecture des nouvelles applications modernes, je regarde vers Prism. J'ai le sentiment que Prism intègre le travail réalisé sur le modèles MVVM par les différentes communautés.

Et comme j'ai accès aux sources et bien je vais faire un tour rapide des sources.

Petit tour rapide dans le Framework MVVM Prims

On trouve la solution Visual Studio 2010 dans :
\\Prism\PrismLibrary\PrismLibrary_Desktop.sln

Les sources dans :
\\Prism\PrismLibrary\Desktop\Prism
Projet spécifique, type Class Libray :
\\Prism\PrismLibrary\Desktop\Prism\Prism.Desktop.csproj
Assembly name : Microsoft.Practices.Prism

Cet assembly est bien au coeur de prism et traite du modèle MVVM.

Commands

public abstract class DelegateCommandBase : ICommand, IActiveAware
public class DelegateCommand<T> : DelegateCommandBase

public DelegateCommand(Action<T> executeMethod)
            : this(executeMethod, (o)=>true)

public DelegateCommand(Action<T> executeMethod, Func<T, bool> canExecuteMethod)
            : base((o) => executeMethod((T)o), (o) => canExecuteMethod((T)o))

Remarque : c'est bien quasiement les même que les RelayCommand de Laurent Bugnion

les RelayCommand dérivaient d'une surcharge d'Action les WeakAction
Les DelegateCommand utilisent plutôt un WeakEventHandlerManager sur le EventHandler CanExecuteChanged

/// The CompositeCommand composes one or more ICommands.
public partial class CompositeCommand : ICommand

Autres commands :
This Behavior is required in Silverlight, because Silverlight does not have Commanding support.
public class ButtonBaseClickCommandBehavior : CommandBehaviorBase<ButtonBase>
public static class Click

Events

Va t-on trouver les objets Prism qui nous permettrons de gérer la communication entre ViewModels ?
public class EventAggregator : IEventAggregator
{
   private readonly Dictionary<Type, EventBase> events = new Dictionary<Type, EventBase>();

public class BackgroundEventSubscription<TPayload> : EventSubscription<TPayload>
public class DispatcherEventSubscription<TPayload> : EventSubscription<TPayload>
public class CompositePresentationEvent<TPayload> : EventBase

Logging

public class TraceLogger : ILoggerFacade
public class TextLogger : ILoggerFacade, IDisposable

Modularity

J'ai l'impression qu'ici on est dans le socle de base des MefExtensions et UnityExtensions

Regions

public class ContentControlRegionAdapter : RegionAdapterBase<ContentControl>
public abstract class RegionAdapterBase<T> : IRegionAdapter where T : class

Regions\Beaviors

...

ViewModel

public abstract class NotificationObject : INotifyPropertyChanged
Certains projets ont leur propre BaseViewModel ou encore ViewModelBase ou encore hérite du NotificationObject ...

Autres objets du framework

public class ObservableObject<T> : FrameworkElement, INotifyPropertyChanged
public abstract class Bootstrapper

Comparaison des sources de Silverlight et de Desktop

Par desktop on entend WPF bien évidemment.

\\Prism\PrismLibrary\Desktop (à gauche)
\\Prism\PrismLibrary\Silverlight (à droite)

Sources Prism Desktop - Sources Prism Silverlight (1)
Sources Prism Desktop - Sources Prism Silverlight (2)
Curieux non ? De constater à quel point il faut plus de code pour Desktop que pour Silverlight ...



Aucun commentaire:

Publier un commentaire

Pour plus d'interactivité, n'hésitez pas à laisser votre commentaire.