ACF 讓控制台程式變得更為簡單

2022-01-20 19:32:00 字數 1893 閱讀 2780

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

控制台程式裡呼叫控制台程式

現在遇到這麼個問題,我想用控制台裡呼叫控制台程式來實現多文字。但是在控制台裡呼叫控制台程式時,它不是出現新的控制台視窗顯示,而是已有的控制台裡顯示呼叫的程式,system d code 練習 jjplace editor debug editor.exe winexec d code 練習 jjpl...

沒有控制台視窗的控制台程式

include include pragma comment linker,subsystem windows entry maincrtstartup int main int argc,char argv 編譯後執行程式會彈出乙個訊息框,而沒有背後的控制台視窗。再看看下面的 include in...

建立控制台程式

var username,userpwd string login boolean begin try while not login do 登入 begin write login readln username setconsolemode getstdhandle std input hand...