7
votes

ASYNC appelle à l'intérieur de Get Accessor - est-ce une bonne pratique?

J'ai une fenêtre qui montre l'infomation du client. Lorsque la fenêtre charge, j'appelle LoadCustomer () Code> Procédé du constructeur qui charge les informations client à partir de la base de données asynchroneusement, qui définit la propriété actuelleCustomer code>. et ensuite, l'interface utilisateur est mise à jour car elle est liée au courritique de l'encombrement code>.

private void LoadCustomer(Guid customerID)
{           
   var customerContext = new CustomerContext();

   var customerQuery = customerContext.GetCustomersQuery()
                                         .Where(e => e.CustomerID == customerID);

   customerContext.Load(customerQuery, 
      loadOperation =>
      {
         CurrentCustomer = loadOperation.Entities.SingleOrDefault();
      }, null);
}
  • Les appels de la base de données utiliseront des chargements paresseux et li>
  • Le refactoring serait plus facile. Li> ul>

    est-il une bonne pratique de mettre des appels de base de données ASYNC à l'intérieur de l'accessoir de la propriété? P> P>


1 commentaires

Les charges n'appartiennent pas à un getter . Les effets secondaires ne seraient pas prévus de lire le code. Il est plus probable que le contexte soit déplacé, alors préférable de la maintenir. Parfois, senior signifie juste vieux . :)


3 Réponses :


4
votes

généralement, ce n'est pas. strong>

Habituellement si quelque chose implique également de faire quelque chose d'autre aussi cher, vous devez utiliser une méthode getter complète juste à cet effet: P>

var value = obj.Something;


0 commentaires

1
votes

Il est correct à ce sujet étant chargé de paresseux dans l'accesseur - puisque l'appel ASYNC ne sera pas effectué sur la création d'objets. Il ne sera fait que lorsque l'accesseur est appelé.

Il prévoit également de ne pas le laisser dans l'accesseur de propriété, mais le refactorise ailleurs. Il est plus facile de refracteur lorsque l'appel est déjà isolé dans l'accesseur.

Ce n'est toutefois pas une bonne idée de quitter l'appel ASYNC dans l'accesseur, mais cela n'a pas l'air de pouvoir y rester.


0 commentaires

5
votes

On dirait que votre device senior a manqué le asynchrone nature du code. Le seul moyen de déplacer votre code sur le getter d'une propriété serait de bloquer le fil d'appel jusqu'à la fin de l'opération asynchrone et il y a une valeur de retour. Ce serait une propriété très mal élevée.


0 commentaires