第12 屆iT邦幫忙鐵人賽系列文章 (Day12)
這篇要來緩一下,做第一次的重構,寫到現在會發現 LineBotApp.cs 這個 class開始複雜了,程式碼越來越長,在OnMessageAsync.OnPostbackAsync 開始有相同的 Intent 重複定義
我們把取得 Intent 封裝成一個工廠
IIntentFactory.cs 定義一個工廠介面
public interface IIntentFactory { IReplyIntent GetIntent(string intentName, string userId); } IntentFactory.cs 實作這個介面
public class IntentFactory : IIntentFactory { private readonly LineReplyMessageUtility lineMessageUtility; private readonly LineProfileUtility lineProfileUtility; public IntentFactory(LineReplyMessageUtility _lineMessageUtility, LineProfileUtility _lineProfileUtility) { lineMessageUtility = _lineMessageUtility; lineProfileUtility = _lineProfileUtility; } public IReplyIntent GetIntent(string intentName, string userId) { var intents = new Dictionary<string, IReplyIntent>() { { "Welcome" , new Welcome(lineMessageUtility,lineProfileUtility,userId)}, { "電子喜帖" , new WeddingInvitationFromImage(lineMessageUtility,lineProfileUtility)}, { "電子喜帖(FlexMsg)" , new WeddingInvitation(lineMessageUtility,lineProfileUtility)}, { "前導影片" , new WeddingTrailer(lineMessageUtility,lineProfileUtility)}, { "婚宴地點" , new WeddingLocation(lineMessageUtility,lineProfileUtility)}, { "婚紗輪播" , new PhotoCarousel(lineMessageUtility,lineProfileUtility)}, { "交通資訊" , new Directions(lineMessageUtility,lineProfileUtility)}, { "從高鐵" , new DefaultIntent(lineMessageUtility,lineProfileUtility,"至 北門站 搭乘松山新店線至 南京復興站 步行7分鐘")}, { "從捷運" , new DefaultIntent(lineMessageUtility,lineProfileUtility,"捷運台北小巨蛋站6分鐘/南京復興站只需7分鐘")}, { "從機場" , new DefaultIntent(lineMessageUtility,lineProfileUtility,"酒店距離松山國際機場僅 5 分鐘車程")}, { "停車資訊" , new DefaultIntent(lineMessageUtility,lineProfileUtility,"酒店的停車場為室內停車場,位於B5及B6")}, { "開車提醒" , new DefaultIntent(lineMessageUtility,lineProfileUtility,"?...