ฉันเพิ่งเจอการใช้บรรทัดคำสั่งการแยกวิเคราะห์ FubuCore ฉันชอบมันมากเหตุผล:
- มันใช้งานง่าย - แม้ว่าฉันจะไม่พบเอกสารประกอบ แต่โซลูชัน FubuCore ยังมีโครงการที่มีชุดทดสอบหน่วยที่ดีซึ่งพูดถึงการใช้งานได้มากกว่าเอกสารใด ๆ
 
- มันมีการออกแบบเชิงวัตถุที่ดีไม่มีการทำซ้ำรหัสหรือสิ่งอื่น ๆ ที่ฉันเคยมีในแอพบรรทัดคำสั่งของฉัน
 
- เป็นการประกาศ: โดยทั่วไปคุณเขียนคลาสสำหรับคำสั่งและชุดพารามิเตอร์และตกแต่งด้วยแอททริบิวเพื่อตั้งค่าตัวเลือกต่าง ๆ (เช่นชื่อคำอธิบายบังคับ / ไม่จำเป็น)
 
- ห้องสมุดยังพิมพ์กราฟการใช้งานที่ดีตามคำจำกัดความเหล่านี้
 
ด้านล่างเป็นตัวอย่างง่ายๆเกี่ยวกับวิธีใช้สิ่งนี้ เพื่อแสดงการใช้งานฉันได้เขียนโปรแกรมอรรถประโยชน์ที่มีสองคำสั่ง: - เพิ่ม (เพิ่มวัตถุในรายการ - วัตถุประกอบด้วยชื่อ (สตริง), ค่า (int) และธงบูลีน) - รายการ (รายการ วัตถุที่เพิ่มทั้งหมดในปัจจุบัน)
ก่อนอื่นฉันเขียนคลาส Command สำหรับคำสั่ง 'add':
[Usage("add", "Adds an object to the list")]
[CommandDescription("Add object", Name = "add")]
public class AddCommand : FubuCommand<CommandInput>
{
    public override bool Execute(CommandInput input)
    {
        State.Objects.Add(input); // add the new object to an in-memory collection
        return true;
    }
}
คำสั่งนี้ใช้อินสแตนซ์ CommandInput เป็นพารามิเตอร์ดังนั้นฉันจึงกำหนดว่าต่อไป:
public class CommandInput
{
    [RequiredUsage("add"), Description("The name of the object to add")]
    public string ObjectName { get; set; }
    [ValidUsage("add")]
    [Description("The value of the object to add")]
    public int ObjectValue { get; set; }
    [Description("Multiply the value by -1")]
    [ValidUsage("add")]
    [FlagAlias("nv")]
    public bool NegateValueFlag { get; set; }
}
คำสั่งถัดไปคือ 'รายการ' ซึ่งจะดำเนินการดังนี้:
[Usage("list", "List the objects we have so far")]
[CommandDescription("List objects", Name = "list")]
public class ListCommand : FubuCommand<NullInput>
{
    public override bool Execute(NullInput input)
    {
        State.Objects.ForEach(Console.WriteLine);
        return false;
    }
}
คำสั่ง 'list' ไม่มีพารามิเตอร์ดังนั้นฉันจึงกำหนดคลาส NullInput สำหรับสิ่งนี้:
public class NullInput { }
สิ่งที่เหลืออยู่ในตอนนี้คือการเชื่อมโยงสิ่งนี้ในวิธีการหลัก () เช่นนี้:
    static void Main(string[] args)
    {
        var factory = new CommandFactory();
        factory.RegisterCommands(typeof(Program).Assembly);
        var executor = new CommandExecutor(factory);
        executor.Execute(args);
    }
โปรแกรมทำงานตามที่คาดไว้พิมพ์คำแนะนำเกี่ยวกับการใช้งานที่ถูกต้องในกรณีที่คำสั่งใด ๆ ไม่ถูกต้อง:
  ------------------------
    Available commands:
  ------------------------
     add -> Add object
    list -> List objects
  ------------------------
และตัวอย่างการใช้คำสั่ง 'เพิ่ม':
Usages for 'add' (Add object)
  add <objectname> [-nv]
  -------------------------------------------------
    Arguments
  -------------------------------------------------
     objectname -> The name of the object to add
    objectvalue -> The value of the object to add
  -------------------------------------------------
  -------------------------------------
    Flags
  -------------------------------------
    [-nv] -> Multiply the value by -1
  -------------------------------------