我使用Command Design Pattern在我的简单应用程序中创建菜单。
interface ICommand
{
string Description { get; }
void Execute(Library books, List<Book> bookList);
bool ValueChecker(string checkValue);
}
我正在使用ValueChecker
检查我的答案中的字段是否仅为int且有些独特。 (我在AddBookCommand类中添加产品)。在界面中添加bool IsUnique
或bool IsYearLessThanCurrent
等更多方法是不是一种不好的做法,还是应该考虑在菜单中进行简单错误处理的其他方法?
答案 0 :(得分:2)
命令存在1个原因=执行一些逻辑。有时允许添加有关撤消功能或逻辑的逻辑,这些逻辑确定是否可以立即使用此命令。已经在.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);
}
在这里为您的对象添加额外的逻辑并不好。它打破了SRP原则并使代码更复杂。
答案 1 :(得分:0)
是的,你可以但是如果你保持Icommand的通用性会更有效。您还可以定义一个IcommandBase,它将保留所有执行和所有这些常规方法。然后定义另一个Icommand说IcommandBook专门用于像Books和Student这样的对象。