2016-10-03 1 views
0

J'ai utilisé Command Design Pattern pour créer un menu dans mon application simple.Ajout de plusieurs méthodes à la commande unique dans le modèle de commande C#

interface ICommand 
{ 
    string Description { get; } 
    void Execute(Library books, List<Book> bookList); 
    bool ValueChecker(string checkValue); 
} 

J'utilise ValueChecker pour vérifier si les champs dans mes réponses sont int seulement et qui sont un peu unique. (J'ajoute des produits dans la classe AddBookCommand). Serait-il une mauvaise pratique d'ajouter plus de méthodes comme bool IsUnique ou bool IsYearLessThanCurrent à l'interface ou devrais-je penser à d'autres façons de faire une manipulation d'erreur simple dans mon menu?

+3

Je pense que vous ne devriez pas mettre trop de logique dans vos commandes. Les commandes devraient être stupides. Au lieu de cela, vous devez créer des gestionnaires de commandes qui gèrent votre commande. Certains d'entre eux pourraient être des validateurs. Ensuite, vous mettez en place une chaîne de gestionnaires et passez votre commande à la chaîne. S'il passe les validateurs, alors vous continuez avec l'exacution. Si ce n'est pas le cas, vous faites autre chose. –

+0

@JakubRusilko pourriez-vous s'il vous plaît éclairer moi avec un échantillon court d'un tel manipulateur? Je suis totalement novice en codage. – Easy

+0

Il est difficile de vous donner un exemple complet qui conviendrait à votre cas particulier, @ Easy. Cependant, il y a beaucoup d'articles sur le net au sujet des commandes, etc. Je peux recommander ce site: https://sourcemaking.com/design_patterns. Jetez un coup d'œil au modèle de commande et au modèle de chaîne de responsabilité décrits sur cette page. –

Répondre

0

Oui, vous pouvez mais il serait plus efficace si vous gardez Icommand générique que possible. Vous pouvez également définir une IcommandBase qui gardera tout exécuter et toutes ces méthodes générales. Et puis définissez une autre Icommand dire IcommandBook pour spécialisé pour vos objets comme les livres et les étudiants.

2

Les commandes existent pour 1 raison = exécuter une certaine logique. Parfois, il est permis d'ajouter une logique concernant la fonctionnalité Annuler ou la logique, qui déterminent, est possible d'utiliser cette commande maintenant ou non. Il existe déjà défini cette interface dans .NET here

///<summary> 
///  An interface that allows an application author to define a method to be invoked. 
///</summary> 
public interface ICommand 
{ 
    /// <summary> 
    ///  Raised when the ability of the command to execute has changed. 
    /// </summary> 
    event EventHandler CanExecuteChanged; 

    /// <summary> 
    ///  Returns whether the command can be executed. 
    /// </summary> 
    /// <param name="parameter">A parameter that may be used in executing the command. This parameter may be ignored by some implementations.</param> 
    /// <returns>true if the command can be executed with the given parameter and current state. false otherwise.</returns> 
    bool CanExecute(object parameter); 

    /// <summary> 
    ///  Defines the method that should be executed when the command is executed. 
    /// </summary> 
    /// <param name="parameter">A parameter that may be used in executing the command. This parameter may be ignored by some implementations.</param> 
    void Execute(object parameter); 
} 

Ajout d'une logique supplémentaire pour vos objets ici est pas bon. Il rompt le principe SRP et rend le code plus compliqué.