Stockage abstrait de données pour une classe basée sur l'environnement (web / windows)

StackOverflow https://stackoverflow.com/questions/643987

  •  22-07-2019
  •  | 
  •  

Question

J'ai une classe et le stockage de ses informations dépendra de son utilisation par une application Web ou Windows. J'allais utiliser le modèle d'usine pour distribuer le bon objet. Je suppose que l'appelant stockera ensuite cet objet de manière appropriée si je ne souhaite pas le recréer. Quelqu'un a-t-il d'autres suggestions à faire pour extraire le stockage de données basé sur la plateforme?

Par exemple, je souhaite stocker des données sous forme de variables locales lorsqu’elles sont appelées par l’application Windows (envoi de la sous-classe appropriée) et être enregistrées dans une session lorsqu’elles sont appelées par une application Web.

Était-ce utile?

La solution

Comme le dit sgreeve, la séparation des problèmes est un élément à prendre en compte pour obtenir du code maintenable.

En utilisant une idée de référentiel, l’application Winform et l’application Web peuvent injecter leur propre fournisseur de stockage. Ces fournisseurs peuvent partager une logique commune si nécessaire par héritage ou composition.

public class MyClassRepository
{
    IStorageProvider _provider;
    public MyClassRepository(IStorageProvider provider)
    {
        _provider = provider;
    }

    public void Save(MyClass o)
    {
        _provider.Save(o);
    }

    public MyClass GetBy(string id)
    {
        return _provider.GetBy(id);
    }
}

L'application Winforms appelle le stockage via:

var provider = new WindowsStorageProvider();
var rep = new MyClassRepository(provider);
rep.Save(myClassObject);

et l'application Web:

var provider = new WebStorageProvider();
var rep = new MyClassRepository(provider);
rep.Save(myClassObject);

Autres conseils

Cela ne me semble pas que le motif Factory soit une solution au problème que vous rencontrez. Le modèle Factory est destiné à fournir une instance d'un sous-type particulier d'une classe, en protégeant l'appelant de l'usine contre (a) le sous-type réel renvoyé et (b) la logique utilisée par l'usine pour choisir le sous-type à renvoyer.

Ce n’est pas ce dont vous avez besoin ici. Je pense que vous devez extraire le stockage des données de la classe qui modélise les données stockées.

Vous avez une classe commune à deux applications et chacune de ces applications doit implémenter une fonctionnalité permettant de stocker les données encapsulées par votre classe de manière appropriée pour cette application. Cela implique deux choses:

  1. Chaque application (formulaire Web et Windows) doit contenir une fonctionnalité permettant de stocker les données à distance, mais aucune d’elles ne doit inclure le code utilisé par l’autre. par exemple. L'application Windows Forms n'a pas besoin de savoir comment stocker des données dans une session Web. Ainsi, le code qui stocke les données dans une session Web doit se trouver dans un objet faisant partie de l'application Web mais pas de l'application Windows Forms, et inversement.

  2. Etant donné que c'est le cas et que la classe des données que vous stockez doit être commune aux deux applications, cette logique de stockage ne peut pas faire partie de cette classe. (Suivant les principes de conception OO acceptés, cette classe ne devrait de toute façon pas savoir comment se stocker dans différentes parties de votre application, car cela introduit des dépendances rendant difficiles les modifications futures. Voir la section Principe de responsabilité unique ...)

J'espère que cela vous sera utile

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top