4 votes

Méthodes de groupe en classe

J'ai une classe DataAccess avec plusieurs méthodes et pour accéder à l'une d'entre elles, j'utilise le code suivant

var dataAccess = new DataAccess();
var s = dataAccess.GetDailyStatistic(...);

Je voudrais regrouper ces méthodes dans une classe non statique et y accéder de la manière suivante

var dataAccess = new DataAccess();
var s = dataAccess.Statistic.GetDaily(...);

Quelle est la meilleure méthode pour y parvenir ? Des classes imbriquées ?

Structure de la classe DataAccess.

public class DataAccess : DataAccessor
{
    public int AddUser(string orderId, string email, string userPassword, string firstName, string lastName,
                               int membershipId, string store, string country)
    public void DeleteBlockedUser(string email)
    public void DeleteUserById(int userId)
    public MembershipTypes GetMembershipType(int membershipId)
    public MembershipTypes GetUserMembershipType(int userId)
    public int? GetUserId(string email)
    public void UpdateUserExpirationDate(string orderId)
    public void UpdateUserCredits(int userId, int membershipId)
    public List<UserEntity> LoadUser(string email, string password)
    public string GetUserIdFromAuthList(string url)
    public UserEntity LoadUserById(int id)
    public UserEntity LoadUserByOrderId(string orderId)
    public void UpdateUser(int id, string email, string password, string firstName, string lastName)
    public void UpdateStatistic(string id, string url, string agent, string ip, string pageTitle)
    public List<StatisticEntity> GetStatistic(int userId, DateTime from)
    public void GetDailyStatistic(int userId, int days, string url, out string[] arrLabels, out int[] arrValues, out int maxValue)
    public void GetWeeklyStatistic(int userId, string url, DateTime from, out string[] arrLabels, out int[] arrValues, out int maxValue)
    ...skip...
}

2voto

Steve Points 1055

Pourquoi ne pas rendre la classe DataAccess abstraite, et faire en sorte que vos sous classes en héritent ? Je suppose que toutes les méthodes à l'intérieur de DataAccess utilisent une sorte de connexion à la base de données, si vous héritez de cette classe, vous pourriez toujours partager cette connexion entre les enfants. Vous n'auriez plus ce constructeur unique, mais vous pourriez faire quelque chose comme

var statistic= new Statistic();
var s = statistic.GetDaily(...);

Et si vous aimez vraiment le nom DataAccess, placez ces classes enfant dans l'espace de noms DataAccess, ce qui pourrait ressembler à ceci.

var statistic= new DataAccess.Statistic();
var s = statistic.GetDaily(...);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X