2010-12-27 3 views
1

J'ai une table de base de données simple qui stocke la liste des utilisateurs qui ont souscrit à des dossiers soit par email OU pour apparaître sur le site (uniquement sur l'interface web). Dans la table de stockage, ceci est contrôlé par un nombre (1 - show sur le site 2- par email). Quand je montre dans l'interface utilisateur j'ai besoin de montrer une case à cocher à côté de chacun des dossiers pour lesquels l'utilisateur s'est abonné (les deux email & sur le site).Quel modèle de conception correspond - la stratégie a du sens?

Il existe une table séparée qui stocke un ensemble d'abonnements par défaut qui s'appliquerait à chaque utilisateur si l'utilisateur n'a pas exprimé son abonnement. C'est essentiellement un ID de dossier et un nom de groupe virtuel. Mais les abonnements par courrier électronique ne comptent pas pour l'application de ces groupes par défaut.

Donc, si aucun abonnement "sur site" ne s'applique au groupe par défaut. C'est la règle.

Que diriez-vous d'un modèle de stratégie ici (code pseudo)

Interface ISubscription 
    public ArrayList GetSubscriptionData(Pass query object) 

Public class SubscriptionWithDefaultGroup 
    Implement ArrayList GetSubscriptionData(Pass query object) 

Public class SubscriptionWithoutDefaultGroup 
    Implement ArrayList GetSubscriptionData(Pass query object) 

Public class SubscriptionOnlyDefaultGroup 
    Implement ArrayList GetSubscriptionData(Pass query object) 

ce que cela même sens? Je serais plus qu'heureux de recevoir toute critique/aide/notes. J'apprends.

À votre santé

Répondre

2

Que diriez-vous de ci-dessous. Mon choix est d'utiliser le motif Décorateur. D'ailleurs j'ai compris votre problème, il y a toujours des abonnements par défaut et les utilisateurs peuvent ADDITIONALEMENT s'abonner pour en savoir plus. Et décorateur est destiné à ce genre de AMÉLIORATIONS alors que Stratégie est pour ALTERNATIFS REALISATIONS.

Interface ISubscription 
{ 
    public List<ISubscription> GetSubscriptions(Pass query object); 
} 

Public class DefaultSubscritions implements ISubscription {...} 

Public class SubscribedSubscritions implements ISubscription 
{ 
    private ISubscription sub; 

    public class SubscribedSubscritions(ISubscription in) 
    { 
    sub=in; 
    } 

    public List<ISubscription> GetSubscriptions(Pass query object) 
    { 
    List<ISubscription> defaultSubs=sub.GetSubscriptions(...); 
    List<ISubscription> additionalSubs=//retrieve the subscribed ones 


    List<ISubscription> allSubs=//defaultSubs + additionalSubs 

    return allSubs; 
    } 
} 

stratégie vous permet de remplacer quelque chose avec une autre mise en oeuvre. Décorateur améliore de manière transparente les objets.

+0

Merci d'avoir pris le temps de lire et de répondre. Laissez-moi lire, comprendre complètement et revenir dès que possible. Merci encore. – VJVRR

+0

ok. Posez des questions de suivi si vous ne comprenez pas. Et si vous pensez que cette réponse a aidé, acceptez cela comme réponse –

Questions connexes