【问题标题】:Class structure for command-line interface命令行界面的类结构
【发布时间】:2016-08-11 02:43:00
【问题描述】:

我正在用 C# 开发一个简单的命令行界面。目前,它解析用户的输入并运行一长串 if-then-else 语句来执行用户可以键入的各种命令。一些例子:

  • 制作目录
  • 递归删除目录
  • 进入目录
  • 列出目录
  • 进入文本编辑器或我正在为其编写的其他一些工具,例如我与解释器一起制作的 ASM 变体的基于文本的 UI,或一些数学工具或游戏,如重力模拟器或康威的生活游戏
  • 保存一切状态
  • 帮助功能
  • 重命名文件
  • 删除文件

if-then 链只是为了让事情正常进行。我想以更好的方式处理命令在界面中的表示方式。

我的第一个想法是有一个 Class Command 具有以下属性:

  • 当用户键入help 时将列出的命令的摘要条目
  • 用户输入帮助时的更具体信息help 'specific command'
  • 参数数量
  • 执行命令时要调用的函数的委托

由于这只是我的第一个想法,而且我对此还比较陌生,所以我想知道有什么更好的方法。

【问题讨论】:

  • 我编写了一个可重用的命令行界面库,可以满足我在几个项目中的特定需求。也许它会为您提供一些额外的想法,让您在旅途中思考。 github.com/mariocatch/YACL

标签: c# delegates command command-line-interface


【解决方案1】:

在这种情况下,Switch case 可能比 if..else 更好:

switch (command)
{
    case "copy":
        // Copy
        break;
    case "create":
        // Create;
        break;
}

对于命令,命令模式是实现接口的最佳方式,很少有从命令设计模式开始的参考: https://code.msdn.microsoft.com/windowsapps/Design-Patterns-Command-1962d567 http://www.blackwasp.co.uk/command.aspx

您还可以在线参考命令行实用程序的示例实现,以了解如何解析命令行参数,例如: http://crmcommandline.codeplex.com/

【讨论】:

  • 谢谢你,很抱歉我的回复迟到了。标记为最佳
猜你喜欢
  • 2012-12-09
  • 1970-01-01
  • 2021-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
相关资源
最近更新 更多