2011-08-09 5 views
0

Je voudrais comprendre le Pro & Inconvénient de l'utilisation des méthodes couramment utilisées via la classe Singleton contre les membres partagés (Static) d'une classe dans VB.Net. Cela pourrait être en termes de temps, de complexité spatiale ou de meilleures pratiques.Lequel est le meilleur Fonctions Singleton class ou Partagé (statique)

J'ai une classe BankAccount avec des méthodes faisant de la logique métier.

GetBalance() 
GetLast5Credits() 
GetMiniStatement() 

et certaines opérations d'écriture également.

Dans ce scénario, quelle méthode d'accès aux fonctions membres est la meilleure? Partagé ou Singleton?

+0

Ceci est une copie à coup sûr, mais je suis trop paresseux pour rechercher. – CodesInChaos

Répondre

1

dépend si vous allez avoir plus d'un BankAccount dans votre application. Fondamentalement, Statique ou Singleton signifie que vous ne pouvez avoir qu'une seule instance de l'objet en question - dans ce cas BankAccount. Une banque avec un seul compte bancaire est une banque assez pauvre, si vous me demandez. :) Here est une explication assez décent, mais l'exemple de code est en C#

4

Ni l'un ni l'autre. Vous devez utiliser une instance de dépendance injectée. c'est-à-dire que vous ne construisez pas l'hypothèse qu'il n'y a qu'une seule instance dans votre code. Vous venez de créer une seule instance. De cette façon, vous pouvez changer votre logiciel pour utiliser plus d'une instance facilement.

L'idée de base est ici que vous prenez le compte bancaire en tant que paramètre dans le constructeur de vos classes:

class MyClass 
{ 
    private readonly IBankAccount bankAccount; 

    public MyClass(IBankAccount bankAccount) 
    { 
    this.bankAccount=bankAccount; 
    } 
} 

Depuis la création d'une telle classe peut être manuellement gênant si vous devez passer beaucoup de Vous utilisez habituellement un conteneur injecteur de dépendance/IoC pour le faire pour vous.


Des méthodes statiques devraient être utilisées pour les fonctions auxiliaires sans effets secondaires sans état. Math et Enumerable ont de bons exemples pour les méthodes statiques.

En général, vous devez éviter l'état global mutable. Et un compte bancaire est clairement mutable. Ici, un singleton classique est le moindre mal (vous pouvez substituer l'implémentation à des fins de test), mais c'est toujours un mauvais choix.

+0

+1, mais un exemple ou au moins un lien aiderait les gens à comprendre ce que vous entendez par «instance injectée par dépendance». –

0

Personnellement, je préfère la classe singleton pour les tests unitaires. Vous pouvez simuler une classe d'instance, mais vous ne pouvez pas simuler une classe statique.

1

Je ne crois pas que vous voulez que ce soit ici ...

mais pour référence ultérieure, une classe partagée comme vous le dites ne devrait pas avoir rien à voir avec le maintien de l'état - chaque méthode statique doit seulement travailler avec le paramètres passés. Cela rend ce type de classe utile uniquement pour les fonctions utilitaires. Un singleton ne serait utile que si vous conserviez les données relatives au compte en mémoire. Ensuite, vous pourrait mettre en œuvre un singleton en tant qu'indexeur, contenant une collection d'enregistrements de compte bancaire, mais vous devez être conscient des conditions de course.

Questions connexes