7
votes

C # Bâtiment API fluide pour les invocations de méthode

Que dois-je faire pour dire que invoquethod peut appeler une méthode et lors de l'utilisation d'options spéciales telles que répéter il doit exexturer après la répétition > > xxx

méthodérationExecuter xxx


4 commentaires

Pourquoi ne pas avoir "répéter" comme argument de invoquethod comme invokemethod (action action, int répéter = 1)


J'ai réfléchi à cela aussi, mais je n'aime pas cela, car vous ne pouvez pas voir quel est le numéro pour sans lire le nom du paramètre.


Vous pouvez utiliser un paramètre nommé pour être plus explicite lorsque vous l'appelez.


@Rookean alors faites ce invoquethod (A.Process, répétition: 100)


5 Réponses :


3
votes

Ce que vous avez fourni semble un peu comme la programmation d'un flux de travail ou d'une machine d'état. Afin de capturer des invocations et de respecter les conditions lors de l'exécution, vous devez modifier votre approche légèrement.

Au lieu d'invoquer des actions au fur et à mesure qu'ils entrent, envisagez de pousser vos actions dans une file d'attente, puis de fournir un mécanisme pour exécuter la machine d'état . P>

new MethodInvoker()
       .ForAllInvocationsUseCondition(true)
           .InvokeMethod( Process.A ).Repeat(100)
       .Run();


3 commentaires

Probablement une file d'attente plutôt qu'une pile.


Oui, une file d'attente est probablement une meilleure approche. Mise à jour du message.


Je me suis décidé pour la solution Jays, car il est plus fluide ou plus naturel de parler que toutes les autres solutions. De toute façon merci pour votre suggestion :)



3
votes

Utilisez une méthode finale ("Go" ou "Exécuter") pour donner des coups de pied. XXX


0 commentaires

1
votes

Vous pouvez avoir un setingvokemethod code> et un exécuter la méthode code>.

SetInvokeMethod(Action).Repeat(100).Execute()


0 commentaires

0
votes

Dans une phrase, votre code est trop "désireux". La méthode Invokemethod est appelée et exécute l'action, avant que votre structure de grammaire fluente ne indique à votre code combien de fois il devrait répéter.

Pour changer cela, essayez également de spécifier la méthode que vous appelez en tant que champ privé dans votre méthodyvoker, puis Inclure une commande qui est un "déclencheur" pour effectuer réellement les commandes. La clé est "évaluation paresseuse"; Dans une interface fluide, rien ne devrait être fait jusqu'à ce qu'il soit à; De cette façon, vous avez la plus grande partie du contrôle quand cela se produise. xxx


0 commentaires

2
votes

Il y a beaucoup de façons de cuire ce chat, mais je pense qu'une source de cette difficulté est dans le fait que vous invoquez réellement la méthode dans la méthode invokemethod () (Go Figure!) .

Typiquement, nous utilisons des API fluides pour transformer la syntaxe qui est évaluée de l'intérieur dans quelque chose qui peut être exprimé d'une manière gauche à droite. Ainsi, les composants de générateur d'expression de l'interface sont utilisés pour accumuler des états dans l'expression, et seulement à la fin, le «vrai travail» se produit.

Une solution à votre problème immédiat est de faire la queue de chaque problème. Action avec ses options associées (conditions d'invocation, comptage répété, etc.) et ajoutez une méthode exécuteall () sur méthodexecuter

Une autre solution serait de mettre toutes les options d'exécution à l'intérieur de la méthode invokemethod () ; quelque chose comme: xxx

Cette méthode ressemblerait à quelque chose comme: xxx

Je n'ai pas travaillé à travers cela dans Visual Studio , mais les autres articles seraient quelque chose comme: xxx

Notez que répétercount et action ne sont pas exposés à l'interface . De cette façon, vous ne verrez pas ces membres lors de l'appelant .invoke (x => x. , mais vous aurez accès à celui-ci lors de l'utilisation du concret exécutantbuilder de la classe Invoquer () méthode.


0 commentaires