Azure Bot中的Attribute+Enum+流畅接口实现
来源:互联网 发布:软件研发部 职能 编辑:程序博客网 时间:2024/06/10 15:38
在玩bot framework时,发现他的formflow这部分的设计不错,尤其是attribute和enum的结合使用非常完美。
以下为其代码设计:
在以上代码中,
1. 使用了enum来定义选项信息
2. 使用attribute来做model和enum的粘合剂
3. FormBuilder的流程接口来完成对话的创建
4. FormBuilder通过对分组提问来构造不同的orderDetail对象
以下为其代码设计:
public enum SandwichOptions { BLT, BlackForestHam, BuffaloChicken, ChickenAndBaconRanchMelt, ColdCutCombo, MeatballMarinara, OvenRoastedChicken, RoastBeef, RotisserieStyleChicken, SpicyItalian, SteakAndCheese, SweetOnionTeriyaki, Tuna, TurkeyBreast, Veggie }; public enum LengthOptions { SixInch, FootLong }; public enum BreadOptions { NineGrainWheat, NineGrainHoneyOat, Italian, ItalianHerbsAndCheese, Flatbread }; public enum CheeseOptions { American, MontereyCheddar, Pepperjack }; public enum ToppingOptions { Avocado, BananaPeppers, Cucumbers, GreenBellPeppers, Jalapenos, Lettuce, Olives, Pickles, RedOnion, Spinach, Tomatoes }; public enum SauceOptions { ChipotleSouthwest, HoneyMustard, LightMayonnaise, RegularMayonnaise, Mustard, Oil, Pepper, Ranch, SweetOnion, Vinegar }; [Serializable] public class SandwichOrder { public SandwichOptions? Sandwich; public LengthOptions? Length; public BreadOptions? Bread; public CheeseOptions? Cheese; public List<ToppingOptions> Toppings; public List<SauceOptions> Sauce; public static IForm<SandwichOrder> BuildForm() { return new FormBuilder<SandwichOrder>() .Message("Welcome to the simple sandwich order bot!") .Build(); } };return new FormBuilder<SandwichOrder>() .Message("Welcome to the sandwich order bot!") .Field(nameof(Sandwich)) .Field(nameof(Length)) .Field(nameof(Bread)) .Field(nameof(Cheese)) .Field(nameof(Toppings), validate: async (state, value) => { //.. return result; }) .Message("For sandwich toppings you have selected {Toppings}.") .Field(nameof(SandwichOrder.Sauces)) .Field(new FieldReflector<SandwichOrder>(nameof(Specials)) .SetType(null) .SetActive((state) => state.Length == LengthOptions.FootLong) .SetDefine(async (state, field) => { field .AddDescription("cookie", "Free cookie") .AddTerms("cookie", "cookie", "free cookie") .AddDescription("drink", "Free large drink") .AddTerms("drink", "drink", "free drink"); return true; })) .Confirm(async (state) => { //.. return new PromptAttribute($"Total for your sandwich is {cost:C2} is that ok?"); }) .Field(nameof(SandwichOrder.DeliveryAddress), validate: async (state, response) => { //.. return result; }) .Field(nameof(SandwichOrder.DeliveryTime), "What time do you want your sandwich delivered? {||}") .Confirm("Do you want to order your {Length} {Sandwich} on {Bread} {&Bread} with {[{Cheese} {Toppings} {Sauces}]} to be sent to {DeliveryAddress} {?at {DeliveryTime:t}}?") .AddRemainingFields() .Message("Thanks for ordering a sandwich!") .OnCompletion(processOrder) .Build();
在以上代码中,
1. 使用了enum来定义选项信息
2. 使用attribute来做model和enum的粘合剂
3. FormBuilder的流程接口来完成对话的创建
4. FormBuilder通过对分组提问来构造不同的orderDetail对象
...Message(..).Field()....Message("").Field(...)..
1 0
- Azure Bot中的Attribute+Enum+流畅接口实现
- 使用bot service创建azure bot
- 游戏中的 NPC 和 BOT
- Bot Framework的简单实现
- Java中实现C++中的enum
- VB.net 下 enum类型Flag attribute
- PHP中的接口实现
- Bot Framework使用Direct Line实现第三方渠道调用Bot服务
- 看流畅python中的代码
- Swift 中的坑:如何实现 enum 的多选
- 使用enum枚举数据类型实现多线程中的单例模式
- bot framework1--hello bot
- C++中的接口与实现
- C++中的接口与实现
- Java中的动态接口实现
- 接口中的嵌套实现代码
- C++中的接口与实现
- C#中的Attribute
- SSM框架搭建,有程序,附带所需jar包
- Android版本和API Level对应关系 以及ADT中源码的关联
- android canvas常用的方法解析(一)
- Qt框架浅析之一 ------- 隐式共享(Implicit Sharing)
- java设计模式-享元模式
- Azure Bot中的Attribute+Enum+流畅接口实现
- ajax与HTML5 history pushState/replaceState
- java JDK 基础知识。
- 385. Mini Parser
- 367. Valid Perfect Square 难度:medium
- Java中线程解说
- Android 日志管理框架 NativeLogger
- mysql中like只能用?的参数化查询
- Delphi 7编写的Webservice生成的DLL部署到IIS上