2011-09-11 4 views
2

Je suis actuellement en train de créer un projet assez grand à mon avis pour séparer soigneusement les couches bien connues de son architecture.Où implémenter l'interface INotifyPropertyChanged dans l'architecture logicielle?

Pour la couche d'accès aux données (DAL), j'utilise simplement .NET Entity Framework.

Pour la couche de gestion, j'ai défini des objets métier qui sont ensuite disponibles pour les développeurs suivants qui peuvent les utiliser pour créer des clients et gérer l'interface utilisateur. Comme je dois développer une application client aussi bien à des fins de démonstration, j'ai réalisé qu'il peut être très utile d'avoir un ObservableCollection<T> au lieu d'une liste, et que le plus souvent possible les objets doivent implémenter l'interface INotifyPropertyChanged pour que l'interface utilisateur détecte automatiquement les modifications et affiche les mises à jour immédiatement.

Pourtant, je me demande si c'est vraiment la bonne façon de faire d'un point de vue architectural. C'est, techniquement, je ne pense pas que la couche de gestion devrait avoir quelque chose à voir avec l'affichage de l'interface utilisateur car nous ne savons pas vraiment ce qu'un programmeur pourrait l'utiliser pour; il pourrait juste vouloir utiliser les objets à des fins de calcul par exemple. Par conséquent, je me demandais quelle était la pratique commune? Dois-je implémenter ces fonctionnalités dans la couche de gestion (il n'y aurait pas de problème de performance)? Dois-je créer une sorte d'objet "décorateur" dans un autre calque qui inclut toutes ces caractéristiques?

+1

Vous devez avoir différents ensembles de classes dans chaque couche. Cela semble un peu redondant mais c'est le choix correct (comme en témoigne votre doute) – Sklivvz

Répondre

1

Comme mentionné par Skliwz dans les commentaires, l'endroit correct pour placer ceci est dans les objets qui sont spécifiquement liés à la couche de l'interface utilisateur.

Si vous liez vos objets métier directement sur la couche d'interface utilisateur, et vous trouvez que l'interface INotifyPropertyChanged ne fait pas vraiment sur vos objets d'affaires, il est un indicateur clair que vous devez avoir des objets différents à des fins différentes

Par exemple, vous pouvez avoir un modèle de vue en utilisant le modèle Model View View Model. Toutefois, si vous constatez que vos objets métier doivent être surveillés par d'autres systèmes et que vous avez besoin de notifications indiquant quand ils ont été modifiés, l'interface INotifyPropertyChanged est appropriée. Cependant, il semble que dans votre cas particulier, ce n'est pas le cas.

+0

Merci pour le lien MVVM, cependant, je ne suis pas sûr de ce que vous voulez dire avec votre dernier paragraphe. Pourquoi 'INotifyPropertyChanged' serait-il inapproprié? – SRKX

+1

@SRKX: Eh bien, je ne peux pas dire avec certitude, mais généralement, les éléments de l'interface utilisateur sont servis par un proxy (WCF, RIA, etc) qui génère automatiquement ces objets pour vous. Ce ne sont * pas * vos objets métier, ce sont des représentations. Vous voulez généralement quelque chose comme un modèle de vue pour gérer une interaction UI spécifique (les pressions de bouton qui lient la fonctionnalité et similaires). Toutefois, si vous êtes sur un back-end et que vous avez vos modèles en mémoire et que la modification de propriété envoie un message à MSMQ, il est logique que vos objets implémentent 'INotifyPropertyChanged'. – casperOne

+1

@SRKX: Cependant, il semble que dans votre cas, vous voulez vous lier à l'interface utilisateur. Je recommande un modèle de vue qui encapsule l'objet métier, en implémentant éventuellement 'INotifyPropertyChanged' lui-même, ainsi que toutes les propriétés d'ajout qui aident à lier les données à l'affichage. – casperOne

Questions connexes