ACF(Adaptive Console Framework)是一款.NET下的控制台程序开发框架。控制台程序不是非常简单吗?还需要开发框架干什么?当你回答完下面的问题以后,你就会发现,原来自己也需要一套合理的控制台程序的开发方案。

  • 控制台程序都提供命令行参数以及参数值,是否每次开发的时候,都需要去解析用户给定的参数?
  • 如果控制台程序需要提供多种参数组合,那么要针对每种参数组合开发一套解析机制,是否感觉很头疼?
  • 要针对命令行参数以及参数值给出说明信息,当用户给定的参数或者参数值不正确时,是否需要额外的时间来编写这些说明信息和文档?
  • 我编写的控制台程序是可测试的吗?是否满足测试驱动开发的需求?
  • 我编写的控制台程序是可扩展的吗?是否能够随心所欲地对其所支持的命令行参数进行开发和扩展?

在你遇到上面的问题时,你就会考虑去使用一个开发框架来帮你实现这些技术细节。每个项目管理人员和开发人员都有同样的感受,就是能够尽快地将所有的资源用在业务的处理上,而那些技术活,就交给框架去完成。ACF之所以是一个框架,是因为它为你提供了开发一个控制台程序的基础平台,并且预留了实现接口,你所要做的仅仅是往这些实现接口中填入你的业务处理逻辑。

现在,让我们预览一下ACF能帮你提升效率的强大功能。catool是ACF的一个示例程序,catool的基本功能就是通过用户输入的命令行参数,对给定的两个整数做加减乘除运算。此外,catool还将根据用户的需求打印程序版本以及帮助信息。

1、Logo与描述信息的输出

当你自己定制了一个控制台程序的实现时,你需要指定这个程序的Logo字符串以及描述信息。在运行的过程中,Logo和描述信息将被打印出来。而这个打印的过程是不需要额外编程的。比如:

2、命令行语法的自动生成

你不需要写任何一行代码,就可以获得专业的命令行语法描述。在语法描述中,强制性参数会以“<>”囊括,可选参数会以“[]”囊括,非选项型参数将以p1, p2...的形式表示出来。ACF还会针对多种命令行参数组合自动生成语法描述。

3、命令行参数的无序性

与正则表达式型的命令行参数解析相比,ACF具有命令行参数无序性,这是参数解析中的一道难题,自己编程实现也需要花费不少精力。ACF的命令行参数无序性,使得用户无需关心每个参数之间的先后顺序即可随心所欲地使用控制台程序。

4、参数名称的多样性

针对同一个参数,ACF支持多个名称,比如上面例子中,用户在指定计算方式的时候,可以使用/method,也可以使用/m。为了输入方便,一般会用/m的形式,而当程序被用于批处理文件,并希望有更好的可读性时,就可以使用/method的形式。而作为开发人员,所要做的仅仅是将这两种形式的参数名称用分号分开。

5、帮助界面(Help Screen)的自动生成

除了设置相应的属性,用户无需编写一行代码,即可获得非常详细的帮助界面。在帮助界面里,你将看到:a) 每种命令行参数组合的详细解释;b) 参数名称以及可选性(是否是可选参数);c) 针对每个参数名称的详细描述。

6、可测试性

使用ACF开发的控制台程序具有可测试性(testable)。这对测试驱动开发是个很大的帮助。这是因为,每种命令行参数的业务处理逻辑都将单独实现,开发人员能够很方便地将这些逻辑放在独立的.NET程序集中(甚至于分布在多个程序集中)。针对每种命令行参数,开发人员都能很方便地编写测试用例,对其业务处理逻辑进行测试。

7、可扩展性

最新版本(3.5.3253.15384及其以上版本)将支持多元的“选项契约(Option Contract)仓储”(在ACF中,每种命令行参数的组合或者说每种命令行语法都与一个“选项契约”相对应,包含有多个选项契约的程序集称为“选项契约仓储”)。这就使得控制台程序所能支持的命令行语法能够随意扩展:

  • 添加新的语法规则:开发人员只需要编写新的“契约仓储”,并将其名称加入配置文件即可
  • 删除已有语法规则:开发人员只需要修改配置文件即可

如上讲了ACF的七大特色,在使用的过程中,你将发现ACF的确能够很大程度地提高你的开发效率。ACF也有成功的案例:来自加拿大的Bil Simser(Microsoft MVP,MSDN Canada Speakers Bureau成员)在其开发的Tree Surgeon开源项目中就使用了ACF,他还写了一篇博客专门介绍ACF的使用过程与心得,点击这里可以看到他写的这篇文章。

你可以到CodePlex站点的ACF主页上获得最新的源代码以及安装包。在使用安装包时,安装程序会自动将所需的组件添加到你的“Add Reference(添加引用)”对话框中,并且会将使用说明以及开发文档安装到开始菜单。

ACF主页:www.codeplex.com/acf

ACF源代码地址:http://www.codeplex.com/acf/SourceControl/ListDownloadableCommits.aspx

ACF安装包下载地址:http://www.codeplex.com/acf/Release/ProjectReleases.aspx?ReleaseId=17617

ACF:让控制台程序变得更为简单相关推荐

  1. vs怎么建java的控制台程序_像VS一样简单的打包“控制台”程序

    对于我一个不了解JAVA,没有相关生态圈的C#er, 自己要研究Scala真是困难重重,尤其在项目构建上真是感觉半瓶子醋难以入门. 一个VS控制台程序,build之后甚至不需要了解 ms build就 ...

  2. 移植.NET Core计划,整合各平台变得更简单了!

    在前篇文章中我提到了如何移植 .NET Core,并邀请使用者们不吝啬的回报您的使用经验和改进意见. 这项措施带动起了非常多使用者之间的讨论. 根据这些讨论的重点和我们与第一与第三方伙伴合作的经验,我 ...

  3. Soul网关发布2.2.0:让高性能网关变得如此简单!

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者:猫大人 来源:转载自公众号「Dromara分布式事 ...

  4. Soul网关发布2.2.0 | 让高性能网关变得如此简单!

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群",加入新技术 本文来自:猫大人的Dromara分布式事务 Soul发布全新的架构 ...

  5. 基于C语言控制台程序的简易MP3音乐播放器

    这是我们小学期的第一个大作业,因感受颇深,特此写下这篇博客留作纪念. 内容:设计一个带有播放控制和音量调节功能的控制台音乐播放器,其中播放控制的子菜单能实现播放暂停切换.停止当前曲.播放上一曲和下一曲 ...

  6. delphi 类的写法 和 控制台程序的制作---深入Delphi编程

    刚刚接触的Delphi的朋友,可能最感兴趣的就是它丰富.强大的VCL(可视化构件库).仅仅向窗体上扔几个构件,甚至不用动手写代码,就能很容易地做出一个有实用价值的程序,真是令人激动.但是,VCL只是D ...

  7. 项目管理六大制约因素_知道了这7点,软件项目管理会变得更简单!

    软件项目管理,很多产品经理(项目经理)都在吐槽,自己怎么样难以管理,不好做.但是,软件项目管理虽然不易,但是也可以适当把软件项目管理变得更简单,更易于管理.但是需要多做一些管理工作.下面的七点,好好看 ...

  8. 使用VSCode调试C#控制台程序

    转载自: http://www.cnblogs.com/lxhbky/p/6673230.html http://www.cnblogs.com/lxhbky/p/6692065.html 一.环境安 ...

  9. 把控制台程序嵌入到 WinForm 中执行

    我们经常有一些用控制台实现的简单应用,这种应用一般都是一步一步"向导"式执行,在每一步上收集用户的输入,最后得到程序执行的结果.但有些用户可能不喜欢用键盘操作的命令行界面,还是愿意 ...

最新文章

  1. 推荐系统(1)--splitting approaches for context-aware recommendation
  2. 【Python】 tempfile模块 临时文件和目录的处理
  3. linux怎么复制手册,程序员的Linux上手手册(2) - 基础文件操作命令
  4. Common BeanUtils 简介
  5. Spring Web Flow 入门demo(三)嵌套流程与业务结合 附源码
  6. telnet用法 测试端口号是否可以使用
  7. iOS-字符串的连接
  8. 理解 loader 的工作流
  9. adb shell 命令详解
  10. 关联规则挖掘之FPGrowth算法实现
  11. opencv-python图形图像处理入门基础知识
  12. PPT中插入矢量图(以及从visio直接复制变模糊的处理方法)
  13. 教程向 | 安装 地表最强IDE---Microsoft Visual Studio 2022
  14. poj 2567 code thr tree
  15. 计算机技术了解(基础)
  16. 签名验签服务器的作用,签名验签服务器
  17. win7计算机节电模式,大师详解win7省电模式怎么关的方法介绍
  18. Android-关于将Excel表格中的数据展示到手机屏幕上的解决方案
  19. 大数据学习之Linux服务器常用命令
  20. 内网穿透 NPS 站点 并添加HTTPS

热门文章

  1. linux dns中文域名,Nginx 中文域名配置详解及实现
  2. linux 修改时区_【003】一文全面掌握Linux初始化进程(超详细)
  3. 2021-02-28 LQG控制的主动悬架1/2车垂向动力学模型
  4. pythondjango项目集成_[Python]将Wagtail整合到Django2项目中
  5. python输出二进制数_二进制中1的个数(python)
  6. 面试题整理19 矩阵Z字形扫描
  7. 第五讲、文本编辑器(vim/vi)
  8. 【Tools】cmake之编写CMakeLists.txt示例
  9. error C2665: “AfxMessageBox”
  10. 自己动手实现的 Spring IOC 和 AOP - 下篇