2011-08-31 5 views
4

Je me demande si cela est une question stupide mais peu importe ...Instantiation objets sténographie

Consider:

this.dataSourceFacade = new DataSourceFacade(); 

this.SomeGrid.DataSource = this.dataSourceFacade.GetData(); 

et comparer à:

this.SomeGrid.DataSource = new DataSourceFacade().GetData(); 

ya un problème avec la deuxième approche en supposant que c'est le seul endroit où il est utilisé?

Richard

+0

Rien de mal à cette approche . –

+0

Jetez un oeil à la MSIL générée lorsque le projet est construit ... Je ne serais pas surpris de voir les deux façons de générer le même (ou presque le même) MSIL. – Tim

+0

Ce développeur aimerait avoir le temps de le faire :) – Richard

Répondre

0

court et simple: Non, il n'y a rien de mal avec la seconde approche ... dans la plupart des cas, même préférable car plus propre (pas de variables locales non nécessaires) et mieux lire + maintenir :-)

0

La deuxième approche,

this.SomeGrid.DataSource = (new DataSourceFacade()).GetData(); 

Vous perdrez la référence à l'objet DataSourceFacade si vous avez besoin pour plus tard, par exemple définir d'autres choses, obtenir d'autres choses, ou appeler les méthodes de cet objet.

+0

Yup mais pour beaucoup de cas comme le chargement d'un tas de menus déroulants, c'est bien. – Richard

0

Il rend le code plus facile à lire et à maintenir à long terme. Aussi, il devrait être juste "bien" à faire.

Cependant, vous créez seulement une instance de l'objet juste pour appeler une seule méthode, je demanderais si cette méthode pourrait être retirée dans une méthode statique à la place.

Comme ceci:

this.SomeGrid.DataSource = DataSourceFacade.GetDate(); 

également dans la mise en œuvre statique Je voudrais essayer de ne pas instancier instances d'objets qui seront utilisés coutume, si possible.

+0

L'exemple est simple, les vraies façades réelles sont des bêtes entièrement différentes utilisées dans toutes sortes de situations. – Richard

0

Eh bien, personnellement, j'aime le test unitaire et les deux approches vont limiter votre capacité à le faire.

Au moins, je créerais une usine à faire quelque chose comme ça

this.SomeGrid.DataSource = DataSourceFacade.GetDataSource(); 

ou

this.SomeGrid.DataSource = DataSourceFacade.Factory.GetDataSource() 

Au moins cette façon, vous pouvez ajouter la possibilité de mettre à jour en quelque sorte votre usine à l'avenir pour tester.

+0

Nous sommes plutôt aux prises avec les tests d'intégration, mais comparé à la façon dont les choses se passaient auparavant, c'est bon :) – Richard

+0

Oui, nous avons tous été bloqués dans cette situation auparavant. – drstevens