twMVC 22 研討會心得

自從去年參加過 twMVC 辦的研討會之後,一直想要將參加後的收穫記錄下來,但是一直沒有實際的寫文章出來,Anyway,趁現在有空,就寫吧。

老實說,Ioc 跟 DI 這兩個名詞感覺很高大上,即使以前曾經上過 Bill 叔的課程,也不敢說就真的明白了。
我覺得我的吸收速度很慢,一個觀念要說好幾次,才會慢慢內化成自己的東西。

twMVC#22 上半場:甚麼鬼的 IOC&DI

今天短短的一個小時多,透過說書人精心設計過的例子,幽默風趣的一步步 Live Demo,感覺好像真的明白了些甚麼。
尤其是 91 哥前兩天 Post 了一段精闢的話,配上說書人的例子,活生生的就是順便 Demo 了部分老闆眼中的好 PG 是怎麼寫程式的(怎麼欠下技術債的)

故事從 Class A 說起,Class A 是一個很普通的類別,裡面有個方法叫做 DoSomething(),在這方法裡面很直覺的直接 New 了一個 Class B 用來處理某件事情。
一般人都是這樣寫的,我也不諱言,我也是這樣幹的,(後來才慢慢學到一些觀念,有拉,我有在改善 XD)
這樣做的優點是甚麼呢?就是【快】、【直覺】、【老闆很開心有進度】、【業務能收錢了】…etc
但是我想這樣的程式大家都會有經驗,改 A 壞 B 常發生,需求變更整個想死,簡單來說就是很難維護

假設今天需求變更,要將 Class B 替換為 Class C,程式就開始爆掉了
Bill 叔的【倚賴抽象】言猶在耳,Live Demo 的第二個步驟,就是抽象,將 Class B 與 Class C,抽象介面出來

之後更透過反射、Design Pattern、完成這個程式的優化調整,最終版本雖然我不是很能理解(可能真的對我有點硬,我承認我昏昏欲睡了),但是說書人透過例子實際上解說 IoC 及 DI,的確讓我對於這件事情有更多領悟,而透過例子也順便學會了反射的應用,覺得很厲害呢,在工廠模式內這樣用就可以把 switch 丟掉了,好個降程式複雜度的方法。(筆記)

可惜的是 Sample 沒有 release,殘念。上課吸收不完的,回家只能看投影片慢慢追憶了。
上課的 Sample Code 在這邊~感謝講師 Jamis Liao 提供!!
(慘了,工作沒有用 C#,果然沒有內化的東西都會消失掉….要找時間補回來了)

twMVC#22 下半場:一個微信專案 從 0 到.000 的效能調教之路

傳說中的 KKBruce 上台講課,一出場就是有個氣場在,整個場子都被 Hold 住的感覺,讓我精神為之一振。尤其這場又是說的效能調教,這課題可是非常的大,而 Bruce 開宗明義就破題了,效能調教的事情,不外乎人、事、物。

忘了從哪聽到的,軟體開發中,能用錢解決的、跟技術有關的問題,通通都比較好解決,最難解決的問題通常是來自於人的問題。這次分享實際上是親身經歷,Bruce 也從專案一開始的一些規劃說起,告訴我們狀況是如何演進的,以及原因、考量是什麼,完完全全就是一個活生生的例子,感覺類似的事情、無奈,好像也常常發生在你我周遭,可能因為客戶關係,有再新再好的技術也不能用;也可能因為成本考量,專案架構要做出調整。專案的執行過程中,常常會碰到這些事情,而團隊間溝通、還有釐清責任則是第一個考驗。

透過 Log 機制,配上 Slack 的 Channel,在程式設計階段不僅只在後端紀錄、也在前端透過 JsNLog 套件來記錄。讓後端的歸後端、前端的 BUG 歸前端,出事情了也很明確,該誰的就誰的,避免掉一個 BUG 大家在踢皮球,踢來踢去踢到團隊互相仇視。這邊要著重說一下,Slack 的優勢有很大一部分在於他們的搜尋做的很棒、很精準,而且還有 APP 版本,而 slack 本身又支援很多第三方工具,有機會的話應該要找時間好好地摸一下。

ORM 部分則稍微介紹了一下 Dapper 這個工具,其實以前就聽過這東西,但是一直沒有研究過,透過這次分享也算了解了一點,剛好公司內有人自己寫了一個擴充方法是可以將 select 出來的資料轉 Instance。不過有一些限制在,看了 Dapper 的 live Demo 才知道這東西原來外面已經有人做了,當下就決定回去將自己的 CODE 改用 Dapper 來玩一下。學習成本低,那就更應該好好學學了。

DB 的部分講到了資料庫專案,這讓我想起以前上保哥的課也提過這東西,資料庫版控等等,不過其實 DB 也沒怎麼再碰,我想應該會用到的部分也就是專案 toDB、DBto 專案這樣的模式吧,也許未來研究 Deploy.exe 來自動化佈署 DB?好吧,感覺有點遠了。

後面又提了 Logger 的加強版本,我覺得聽到這個就真的超級威的,原來前端可以透過 JsNlog 紀錄就算了,還可以很方便地透過 CallerMemberName、CallerFilePath、CallerLineNumber 這三個屬性來很輕鬆地記錄錯誤 LOG 資訊,完全沒想過有這麼方便的東西啊。不過可惜的還是因為自己今天沒帶 NB,也不曉得 Brace 上課前的隨身碟內有沒有這個 Code Sample 釋出,所以趕緊把屬性名稱抄下筆記,只能留待之後研究用法了。程式上的效能調教,主要有執行緒、非同步以及平行程式處理三個課題,Bruce 很貼心的準備了一個很棒的 Sample Code 來解釋 Life Cycle。後來還說到 Cache、Redis for Windows;Jil 序列化、反序列化等等。

研討會的時間並不長,大概是一個下午的時間就能夠吸收到這麼多觀念跟經驗,雖然我也無法完全吸收,但是聽到很多概念,學習到人家是怎麼做事情的,真的很值得!