i besoin d'aide refactoring la classe suivante,Comment éviter à long interrupteur ..need aider refactoring
Voici une opération de classe avec la variété des opérations dans le commutateur: je veux éviter l'interrupteur lire quelques articles statement.I sur l'utilisation du polymorphisme et le modèle d'état .mais quand je refactorise les classes je n'ai pas accès à beaucoup de variables, propriétés
Je suis confus sur l'utilisation de l'opération comme classe abstraite ou pour implémenter une interface.
Je voulais juste savoir quel type de refactoring aidera dans ce cas
polymorphisme ou modèle d'état?
Et quand les utiliser?
public class Operation
{
public enum OperationType
{
add,
update,
delete,
retrieve
}
public enum OperationStatus
{
Success,
NotStarted,
Error,
Fail,
InProcess,
Free
}
// raise this event when operation completes
public delegate void OperationNotifier(Operation operation);
public event OperationNotifier OperationEvent=null;
private OperationStatus _status=OperationStatus.Free;
public OperationStatus Status
{
get { return _status; }
set { _status = value; }
}
private string _fileName = null;
public string FileName
{
get { return _fileName; }
set { _fileName = value; }
}
private string _opnid = null;
public string OperationId
{
get { return _opnid; }
set { _opnid = value; }
}
private OperationType _type;
public OperationType Type
{
get { return _type; }
set { _type = value; }
}
public void performOperation(OperationType type, string parameters)
{
switch (type)
{
case OperationType.add:
_status = addOperation(parameters);
break;
case OperationType.update:
_status = updateOperation(parameters);
break;
case OperationType.delete:
_status = deleteOperation(parameters);
break;
case OperationType.retrieve:
_status = retrieveOperation(parameters);
break;
default:
break;
}
if (OperationEvent != null)
OperationEvent(this);
// return true;
}
public OperationStatus addOperation(string parameters)
{
DateTime start = DateTime.Now;
//Do SOMETHING BIG
TimeSpan timeTaken = DateTime.Now - start;
System.Diagnostics.Debug.WriteLine("addOperation:-" + _opnid + "-" + _fileName + "--" + timeTaken.Milliseconds);
return OperationStatus.Success;
}
...other operations here....
Indicatif téléphonique est similaire à:
Operation oprnObj;
Operation.OperationType operationType;
oprnObj = new Operation();
oprnObj.FileName = String.Concat("myxmlfile",".xml");
oprnObj.OperationId = oprnid;
oprnObj.OperationEvent += new Operation.OperationNotifier(oprnObj_OperationEvent);
operation="add"; //get From Outside function getOperation()
operationType = (Operation.OperationType)Enum.Parse(typeof(Operation.OperationType), operation.ToLower(), true);
oprnObj.Type = operationType;
oprnObj.performOperation(operationType, parameters);
Références Sujets:
Link
Link
..many plus.
Im actuellement utilisant .net 2.0? Je pense que la méthode d'extension est en 3.0. peut quelque chose smiliar être fait en 2.0. – Amitd
Vous pouvez utiliser des méthodes d'extension avec .Net 2.0. Tant que vous utilisez C# 3 (que vous pouvez si vous avez VS2008) – philsquared
nah à partir de maintenant toujours en utilisant VS2005.but thx pour info :) – Amitd