2010-11-29 9 views
2

Je souhaite discuter de la méthode API.C# méthode paramètres API design

Nous construisons aC# dll qui sera responsable de certaines actions de la machine (comme la porte ouverte, fermer la porte, etc.) Je veux exposer au client une fonction (appelons-le "doAction (paramètres ...) "). Cette fonction aura un paramètre, et le paramètre est le type de l'action (un argument).

Ma question est: quelle est la meilleure façon de concevoir l'argument et si vous pouvez me donner des liens vers des exemples. Cela peut être un aclass de const. cordes ou classe d'énumérations, tout ce qui peut être professionnellement conçu et pourtant facile à utiliser.

Merci.

+1

Pourquoi voulez-vous qu'une seule méthode? Il semble plus naturel d'avoir des méthodes comme 'OpenDoor (int doorNum); CloseDoor (int doorNum, bool slam); OpenClosedOrAjar GetDoorState (int doorNum); ' –

+0

Oublié de dire. ce sont mes exigences de conception. – Igal

+0

pourquoi est-ce dans vos conditions de conception? –

Répondre

5

Jetez un oeil à Action Delegate

Autre que cela, vous voudrez peut-être mettre en œuvre un IActioninterface avec une méthode DoAction.

Donc, quelque chose comme

interface IAction 
{ 
    void DoMethod(); 
} 

et

public class OpenDoor : IAction 
{ 
    public void DoMethod() 
    { 
     //Open the door 
    } 
} 
+0

J'ai regardé dans l'article que vous avez suggéré. C'est une méthode intéressante mais je ne vois pas comment cela peut m'aider. – Igal

+0

A propos de l'interface, pouvez-vous donner plus de détails? Merci. – Igal

+0

Vous pouvez transmettre une classe implémentant une interface à la méthode. Donc, ils appliquent tous les mêmes méthodes, mais font ce qu'ils sont censés faire. Cela vous permettra de faire fonctionner cette base de données/XMl. Vous devez nous en montrer un peu plus sur la méthode d'appel, et comment vous décidez quelle action faire ... –

1

Il semble plus naturel d'exposer chacun d'entre eux comme une méthode distincte, comme dans:

public class Machine 
{ 
    public void OpenDoor(); 
    public void CloseDoor(); 
    // other methods 
} 

Ce serait utilisé comme suit:

Machine NewMachine = new Machine(); 
NewMachine.OpenDoor(); 
NewMachine.CloseDoor(); 

Ce code est très lisible.

Cependant, si vous êtes vraiment intéressé à le faire tout d'une méthode, une valeur dénombrée peut suffire:

public class Machine 
{ 
    public enum Action 
    { 
     OpenDoor, 
     CloseDoor, 
     // other values 
    } 

    public void DoAction(Action ActionToDo) 
    { 
     switch(ActionToDo) 
     { 
      case OpenDoor: 
       // open the door 
       break; 
      case CloseDoor: 
       // close the door 
       break; 
      default: 
       break; 
     } 
    } 
} 
+0

Super, c'est un bon exemple. Merci. – Igal