在上一篇([03]搞懂關鍵字以及信息的處理流程)瞭解了整個V4版本的關鍵字以及信息是怎麽流動。
這篇來看看實際code的結構 - 使用之前建立出來的EchoBot,看一下整體的結構。
程式碼的結構
首先,來看一下整個EchoBot有的檔案:
從這個結構可以看出,是一個很典型的Asp .NET Core的結構,拆解出來可以分幾個部分:
Startup.cs
- 網站啓動的時候執行的部分EchoBotAccessors
和CounterState
- 還記得每一個對話,Turn的數字會加一。這兩個class有何記錄這個信息有關的地方EchoWithCounterBot
- 信息最末端,Bot的部分,也是實際邏輯的部分
有了幾個部分的概念之後,來實際看一下裡面的内容。
Startup.cs
這個Class的東西會在Bot (網站)啓動的時候被執行,因此是這邊有了某些設定,Asp .NET Core才會把他當作Bot來處理。
這邊又分了兩個大的方法:
- Configure
- ConfigureServices
Configure
這邊重要的是呼叫了IApplicationBuilder.UseBotFramework()
呼叫了這一行,將會把對應等一下提到的bot相關設定注冊進去。
ConfigureServices
在這個方法裡面有兩個部分:
- AddBot - 這邊設定Bot的部分
- AddSingleton - 這個注冊State Accessor的部分為一個Singleton
- AddBot
-
這邊總共設定了3個事情:
- 透過
BotConfiguration.bot
的内容來設定framework裡面的config - 透過
OnTurnError
設定當Bot有出錯的時候要發生什麽事情 - 信息一定要存在某個地方才有上下文,類似網頁的Session要存那邊,預設存在Memory裡面
這邊就不展開程式碼的部分 - 不過整體來説就是做了這3個事情。
- 透過
- AddSingleton
還記得在EchoBot的時候每一輪bot都會直接回復他收到的内容并且Turn都會加1。第幾輪的信息就是透過Accessors來呼叫。
因此透過Asp .NET Core的Dependency Injection把這個物件注冊成爲Singleton,這樣每個地方都可以透過注入的方式取得這個物件。
EchoBot很單純,所以沒有使用其他Middleware,如果有需要就可以在這邊做設定,或者其他會用到的物件也是這邊可以放到注入的容器裏面。
CounterState.cs
還記得EchoBot裡面記錄的第幾輪的信息嗎?在這邊CounterState
這個Class就代表想要被記錄的信息的POCO。
整個Class很見到,就一個Property記錄TurnCount
。
EchoBotAccessors.cs
有了要被記錄保留信息的POCO之後,接下來就需要一個代表儲存以及取得的Class,這個也就是Accessors。
透過Accessors能夠把底層實際讀取和儲存的邏輯(例如是存在Memory,還是一些可以永久儲存的地方例如Azure Storage)抽離,達到降低Dependency。
EchoBotAccessors
就是這個bot程式裡面的Accessors。
EchoWithCounterBot.cs
這邊就是流裡面的最後的部分,也就是上篇提到的Bot的部分,換句話説,也就是實際做處理的邏輯的部分。
任何要做Bot就要實作IBot
,這個Interface有個方法叫做OnTurnAsync
需要implement。
在這個Bot的實作是:
- 如果信息類型不是Message,那麽直接把信息類型回復回去
- 如果信息類型是Message,那麽把Turn加1,然後把得到的内容在回傳回去
結語
這篇把整個EchoBot的程式碼拆解并且把不同的部分做了一些介紹。
希望透過這篇能夠對於整個Bot的程式有點概念,有了一些概念之後接下來就可以開始做開發了。
第一步當然是需要知道使用者的姓名好幫他做訂房的手續,那麽問題就來了,怎麽儲存這個信息呢?
下一篇([05]搞懂Bot的State Management - 怎麽儲存信息)將會介紹Bot Sate - 怎麽在Chatbot裡面儲存信息。