2017年6月21日 星期三

關於LineBot(9) - 取得新加入的好友身分資訊

在知道了如何建立LineBot的WebHook之後,許多朋友開始有了另一串問題。其中我最常被問到的就是,如何在用戶加入你的bot為好友的時候,取的用戶的身分xk7。

這個問題中有兩個關鍵:

  1. 用戶加入你的bot時,你如何得知?
  2. 如何取得特定用戶的身分資訊?

這兩個動作都不難,都可以在我們的WebHook中取得。

首先,當有一個新的用戶加入你的Bot為好友時,我們可以從WebHook取得的JSON得知,透過我們的SDK,你可以很簡單的以底下的程式碼判斷:

if (ReceivedMessage.events.FirstOrDefault().type == "follow")

{

}

因為新加入好友或是被解除封鎖,都會收到type是follow的event,因此上面的程式碼很容易判斷出有新的好友來了…

而得知新好友(用戶)來了之後,我們可以透果底下這一行取得用戶資訊:
var userInfo = bot.GetUserInfo(ReceivedMessage.events.FirstOrDefault().source.userId);

得到userInfo物件之後,你可透過 displayName 輕鬆取得用戶暱稱,也因此,我們把用戶暱稱顯示出來:

bot.ReplyMessage(ReceivedMessage.events.FirstOrDefault().replyToken, $"哈,'{userInfo.displayName}' 你來了...歡迎");

得到的結果就是:

當用戶加入某個bot為好友,或是解除封鎖,都會收到follow,我們上面的程式碼抓到用戶名稱,顯示出來,結果就是上圖這樣。

很容易吧,試試看囉…

hope enjoy it…

此範例原始程式碼位於 : https://github.com/isdaviddong/LineBotExample_GetUserInfo/blob/master/LineBotExample_GetUserInfo/Controllers/LineBotController.cs

--------------------------------------------
相關課程: http://www.studyhost.tw/NewCourses/LineBot
如果需要即時取得更多相關訊息,可按這裡加入FB專頁。若這篇文章對您有所幫助,請幫我們分享出去,謝謝您的支持。 

2017年6月2日 星期五

關於asp.net framework的本質

很久沒有聊聊asp.net了,但畢竟asp.net跟我緣分不淺,或許該找個時間來談談。不過,今天我們試試看換一種方式,也讓大家自我挑戰一下,題目來囉...

  1. 我們說asp.net是一個web開發框架(framework),現在的asp.net framework提供了三種不同的方式(途徑、架構、風格)來建立網站,分別是哪三種?
  2. 這三種分別有哪些特性(或優缺點)呢?
  3. 這三種可以混用嗎?

來公布答案。

首先,千萬別執著對錯,因為我這題目本身就很爛(題意不清),其實我們應該把.net core和asp.net分開來看...這題談的不是asp.net core, 但題目沒說清楚,會讓人誤會。

因此,重點不是對錯,而是我們要藉著這題目來釐清整個asp.net的架構與觀念。

首先,題目與答案都在這邊:

ASP.NET is great for building standards-based websites with HTML5, CSS3, and JavaScript. ASP.NET supports three approaches for making web sites. ASP.NET Web Forms uses controls and an event-model for component-based development. ASP.NET MVC values separation of concerns and enables easier test-driven development. ASP.NET Web Pages prefers a single page model that mixes code and HTML markup. You can mix and match these techniques within one application depending on your needs - it's all One ASP.NET.

上面這段話的來源是:
https://www.asp.net/get-started/framework

所以,從這邊我們可以知道,先撇開.net core不談,asp.net framework (on windows),主要approaches Web Sites的方法有三,分別是 WebForms, MVC, 與 Web Pages...這三者位階相同...有趣的是…Web Pages是最常被忽略的。

而另一些常見的答案諸如 Web API,SignalR ...也是asp.net框架的一部分(但不能說它主要是用來『作網站』的,嚴格說起來它們的用途是通訊)。

接著,你繼續看上面那段英文的最後一段,這三種技術,在技術上『是可以』混用的
(David註:只要你夠熟)

而特色呢?分別是:

Web Forms : uses controls and an event-model for component-based development.
MVC : separation of concerns and enables easier test-driven development.
Web Pages : a single page model that mixes code and HTML markup.

上面Web Forms和MVC的特色說得很清楚,Web Pages可能有人會覺得有點語焉不詳,但你可以從底下這邊找到更多說明:
https://www.asp.net/get-started/websites

從上面你可以知道, Web Pages有點像是過去的ASP(Active Server Pages),提供開發人員一個最輕量級的方式來建立dynamic web content(動態網頁內容,就是從伺服器端動態抓取資訊,塞到html裡面往前端送的那種東西),和過去ASP不同的地方是,Web Pages它主要採用了Razor View。

用比較容易理解的方式來說明:
Web Pages : 最簡單,如果IT/MIS只是要臨時開發一兩個頁面,我會推薦選擇這個方式。
Web Forms : 事件驅動、主要模擬視窗物件導向開發的控制項、具有視覺化開發、快速開發(RAD)...的特性。
MVC : 主要價值就是關注點分離(SoC)、因此也最容易實現測試驅動開發。

我自己覺得MVC對於開發人員的素質要求相對比較高,如果單就一個功能點來說,透過這個方式寫出來的Code也肯定會最多。因為SoC,因此一個功能本質上應該拆成Model/View/Controller三塊來看(來思考),架構上相對複雜(因為比起單純的頁面多了Routing、Controller的概念),對於初學者進入障礙就高。

而Web Forms則是開發速度快,馬上能看到結果,容易上手,但也相對最不容易開發出職責分離的架構。

Web Pages則是最直覺容易開發,但基本上沒什麼架構可言,如果頁面一多,系統一寫大基本上難以維護,但如果只是幾個頁面,那當然就非常方便好用。

就體質上來說,Web Pages 不容易寫出有職責分離、有架構、分層負責的程式碼。但Web Forms和MVC都可以(當然前提是開發人員素養夠)。Web Forms要寫出具有架構職責分離的程式碼得靠毅力(因為容易被惡魔引誘),而MVC則是會強迫開發人員往這個方向走。

寫MVC的人如果沒能做到SoC 或 unit test/test-driven,那採用MVC的價值就大幅降低了,因為他的主要目的就是在這。而Web Forms則是為了模擬傳統的Windows 應用程式開發方式所生出來的框架,事件驅動的 event-model 和控制項是其特色,但代價就是為了去模擬狀態(State)而導致產生臃腫的ViewState。

MVC和Web Pages對於HTML Tag控制的自由度最高,而Web Forms則相對很低(特別是大量使用模擬桌面應用程式開發的Web Controls時)。

最後再順便談談 asp.net core,這個.net core,主要是為了讓系統能跨平台(例如run在Linux上),為了這個跨平台,所有與IIS和windows平台特性的相依性都必須拿掉,這意味著過去你熟悉的system.XXX之類的namespace開始無法使用,導致.net code基本其實就是整個打掉重練,跟原本的asp.net骨子裡差異很大。

但打掉重練也就沒有包袱,可以有新的開始,但當然也意味著你過去學的不一定都能延續。至於要不要使用.net core,或是跨平台時乾脆就換一種開發技術(例如node.js),這見仁見智,看你自己的選擇了。

所以簡單的幾個結論...

  1. 如果你想跨平台,可選用.net core(但我們今天上面那個題目,其實主要討論的不是這部分)。

  2. 如果你想寫較具有架構的網站或Web應用程式,你可以選擇 MVC 或 Web Forms,

  3. 如果只是想寫幾個頁面從伺服器端撈資料呈現給用戶,不是什麼大架構大系統,可以考慮 Web Pages。

MVC和Web Forms幾乎是不同的框架,使用目的基本上不同,也很難直接比較,但選用時其價值與核心精神(上面有討論)則必須掌握。否則若選了某一種開發方式卻沒有用到其特性,就很可惜了。

而真的有必要時,只要你夠熟悉,這三種寫法在技術上是可以混在一起用的。
(.net core則當然無法跟傳統的asp.net on windows混用)

---------------------------

以上,有沒有幫你更釐清asp.net的本質?
還是...你被搞得更暈了呢? :)

其實,不管你使用哪一種技術建立網站,只要能發揮其特性,避開缺點,凸顯其價值,並且在團隊中能夠對成員與老闆解釋的清楚,對企業來說,已經是很難得的人才了。

相關文章: http://studyhost.blogspot.tw/search/label/Framework
相關教育訓練: http://www.studyhost.tw/NewCourses/Architecture