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