2010-11-04 4 views
1

J'ai la structure de classe suivante:refactoring de code, afin de se débarrasser de la duplication de code

public class Result 
{ 
    protected int Code {get; set;} 
    protected List<string> Messages {get; set;} 
    protected Result(); 

    public static Result Success (int code, List<string> messages) 
    { 
    Result result= new Result(); 
    result.Code=code; 
    result.Messages=messages; 
    return result; 
    } 

} 

public class ResultWithName: Result 
{ 
    protected ID {get; set;} 

    protected ResultWithName() 
    { 
    } 

    public static ResultWithName Success (int code, List<string> messages, string name) 
    { 
    ResultWithName result= new ResultWithName(); 
    result.Code=code; 
    result.Messages=messages; 
    result.Name=name; 
    return result; 
    } 

} 

Le problème serait ok s'il n'y a qu'une seule méthode statique, mais il y en a plusieurs, et je suis intéressé à avoir un code plus propre et élégant. Merci

+1

Le "code le plus élégant" est simplement de ne pas utiliser de méthode statique. –

+0

Je ne suis pas certain que nous regardons tout le code. Il a protégé le constructeur, ce qui signifie que la méthode Success est une usine. Dans ce cas, il est parfaitement acceptable que ce soit une méthode statique. (Bien que je ne m'attendais pas à être ainsi donné le nom.) –

+0

@Billy - c'est une méthode d'usine, ce qui est parfaitement respectable –

Répondre

8

Définissez vos constructeurs avec des paramètres au lieu de définir les propriétés en ligne dans les méthodes Success. Définissez ensuite les propriétés dans le constructeur lorsque chacune est invoquée dans la chaîne d'héritage.

public class Result 
{ 
    protected int Code { get; set; } 
    protected List<string> Messages { get; set; } 
    protected Result(int code, List<string> messages) 
    { 
     Code = code; 
     Messages = messages; 
    } 

    public static Result Success(int code, List<string> messages) 
    { 
     Result result = new Result(code, messages); 
     return result; 
    } 

} 

public class ResultWithName : Result 
{ 
    protected string Name { get; set; } 

    protected ResultWithName(int code, List<string> messages, string name) : 
     base(code, messages) 
    { 
     Name = name; 
    } 

    public static ResultWithName Success(int code, List<string> messages, string name) 
    { 
     ResultWithName result = new ResultWithName(code, messages, name); 
     return result; 
    } 

} 
+0

parfait. Je vous remercie. – Elena

Questions connexes