2010-03-22 5 views
1

J'utilise un motif de conception de façade pour un programme C#. Le programme essentiellement ressemble à ceci ...Motifs et sous-classes de conception de façade

public class Api 
    { 
     #region Constants 

     private const int version = 1; 

     #endregion 


     #region Private Data 

     private XProfile _profile; 
     private XMembership _membership; 
     private XRoles _role; 

     #endregion Private Data 


     public Api() 
     { 
      _membership = new XMembership(); 
      _profile = new XProfile(); 
      _role = new XRoles(); 

     } 

     public int GetUserId(string name) 
     { 
      return _membership.GetIdByName(name); 
     } 


} 

Maintenant, comme je voudrais mes sous-classe des méthodes en trois catégories: rôle, profil et membre. Cela sera plus facile pour les développeurs car Profile et Membership exposent beaucoup de méthodes similaires (et quelques-unes par Role). Par exemple, obtenir l'ID d'un utilisateur ressemblerait à ceci:

int _id = Namespace.Api.Member.GetUserId("Henry222"); 

Quelqu'un peut-il « illustrer » comment subclassing devrait fonctionner dans ce cas pour obtenir l'effet que je cherche?

Merci d'avance.

Répondre

2

Je dirais que vous pourriez vouloir dire «classe interne» du contexte de votre question. Vous pourriez essayer quelque chose comme ce qui suit ...

public class Api 
{ 
    public class MemberApi 
    { 
     private readonly Api _parent; 

     internal MemberApi(Api parent) { _parent = parent; } 

     public int GetUserId(string name) 
     { 
     return _parent._membership.GetIdByName(name); 
     } 
    } 

    #region Constants 

    private const int version = 1; 

    #endregion 


    #region Private Data 

    private XProfile _profile; 
    private XMembership _membership; 
    private XRoles _role; 

    public MemberApi { get; private set; } 

    #endregion Private Data 

    public Api() 
    { 
     _membership = new XMembership(); 
     _profile = new XProfile(); 
     _role = new XRoles(); 

     Member = new MemberApi(this); 
    } 
} 
Questions connexes