分享

Python Taiwan讀書會_15_Design Patterns在哪?

不同的Pattern是想把特性講出來,把那件事最重要的點點出來,對於Design Pattern,你先知道,遇到了就知道。上週六把之前講的又挑出幾個來講,意思應該就是重點中的重點,王大哥說大家不一定會用 Design Patterns 寫東西,但可以看看你用的東西 (程式庫) 或語言 (Python) 裡,哪些其實就是用了 Design Patterns。
講義
Where Are Those Design Patterns?
這是上週開始講Design Patterns介紹的書,本週我決定把這個網頁當做Black Friday目錄來逛一下好了。
Design Patterns and Refactoring
Design Patterns分了三大類,下面寫我自己畫的重點,不是寫這大類包含了哪些 Pattern:
Creational patterns 
主要目的是開始類別(class instantiation)
可以在分為class-creation patterns與object-creational patterns
在類別實例化的過程中,class-creation patterns可以有效率地繼承(inheritance),object-creational patterns可以有效率地委任(delegation)。
  • Structural patterns 
用一個簡單的方法,去理解個體(entities)之間的關係。
  • Behavioral paterns 
  • 找一個物件(objects)之間的溝通模式,讓物件之間溝通起來更有彈性。
  • 若有人不想讀整本英文書的網站,也有牛人網友的介紹,但你看不懂英文的,其實中文的也不會太懂。(我幫大家試過了,但基本觀念前兩週真的都講過了,這個筆記的確又加入了更多術語往專業領域進一步,好啦,很多步)
講義上有提到的再逛一下
  • Singleton (in Python) 
  • Creational patterns家族
確保一個類別中只會有一個實例
  • 讀書會重複提的例子是「美國總統」,任何一個時點只會有一個,現實世界裡最近大家剛好被混淆,不過現在美國總統的確只有一個,就是川普,明年就職日一過,也只會有一個,就是拜登。
Iterator (in Python) 
Behavioral paterns家族
一個聚合物件(an aggregate object)想要依序一直聚下去,又不想囉嗦。
MVC Pattern (Model–view–controller) 
Python 沒有
  • 書的網頁裡也沒有,去查了wiki,才知道為什麼王大哥與牛人同學討論到framework。
「對於一個剛入門的初學者來說,架構導向的思考會有一定的門檻,需要較多的實作與練習才能具備相應的能力,大多數的初學者還是較習慣於大雜燴式的程式撰寫,所以可能會對 MVC 模式抱持著排斥或厭惡的心態,然而 MVC (或是其他的Design Patterns) 都是有助於應用程式長遠的發展,雖然大雜燴式的程式也可以用來發展長生命週期的應用程式,但是相較於 MVC,大雜燴式的程式在可擴充性和可維護性 (尤其是可測試性) 上會遠比 MVC 複雜很多,相反的,MVC 模式的應用程式是在初始開發時期必須先思考並使用軟體架構,使得開發時期會需要花較多心力,但是一旦應用程式完成後,可擴充性、可維護性和可測試性反而會因為 MVC 的特性而變得容易。
因此,MVC 模式在已有眾多優秀 Framework 的現代,早就已經沒有不適合小型應用的問題,小型的應用還是可以由 MVC Framework 的應用來獲取 MVC 的優點,同時它也能作為未來小型應用擴充到大型應用時的基礎與入門磚。若一開始就想要做大型應用,那麼 MVC 模式的職責分離以及要求開發的架構思考會更適合大型應用的開發。」摘自wiki
MVC 
網頁中很多概念都是MVC。
framework的補充:Python到現在沒有MVC,不適用web,要寫web的話Javascript比較合適,下面補充與Python用於web推薦的framework。(補充這個網頁,幫忙選出 2020 年幾個不錯的 frameworks,世界上不是只有 Django)
Observer Pattern 
Behavioral paterns家族
物件之間有一對多的依賴關係,一旦一個物件改變狀態,其他相依的也會被通知並且自動更新。
  • 讀書會講的例子是我們常用的訂閱功能,Observer把某些物件寫成Publisher, Publisher要提供訂閱和不訂閱的兩種功能,讓裡面的名單裡的人(物)可以收到通知。另外,有些網頁等你進去,滑到下面畫面才慢慢進來,用的就是Observer Framework寫的,假如要全部收到才顯示網頁,就會等到卡住。
  • 網頁上講的例子是拍賣系統。
  • 在看這些的過程中,我忍不住問一下我技術班同學:
「但我在寫作業的過程中完全看不見這個,大家真的有把這些事情串在一起嗎?」
(難道課本習題就連一點影子也看不到嗎?)
我技術班同學說看到我連Design Pattern都學,下巴都要掉下來了,Design Patterns是coding裡面進到藝術層次的東西,在那之前就是把東西寫正確即可,Design Pattern是東西寫正確還不夠,還需要把擴充性、彈性、低耦合寫考慮進去,Design Pattern有時候不見得code的「效率」好,但是可以讓一件事 有更好的解釋能力、可讀性、未來未發生的異動修改的時候造成的影響降低。以手做家具來舉例,純手工打造,依照要的功能性,開始量尺吋 設計,然後找把鋸子、配料件都完成,再組裝完成,但這樣的成品與製作過程,可能不具備重用性、模組化,如果重新要再設計一個新的,但也許長寬尺寸高度要改變,很多事情就需要重新計算 手法也需要重新思考,但Design Pattern就有一點像是在做這個傢俱「前」,就先把 「可能會改規格」這件事 已經思考進去了,也就是說,不能以「我只是要做出剛剛需求說的這個家俱」這樣思維去做,做之前要先想到說不定會要改寬度、改材質、增加承重會,說不定還會量產,以上這些考慮是有成本的。彈性與擴充性是要在設計上面就先付出一些額外成本,而且不一定真的會發生異動的需求,但是有良好的design pattern,就是在學這些前人整理好的擴充的手法。
  • 我自首:聽這兩次的讀書會,內容是例子和概念的部分,好像有懂,但具體會怎麼做,完全不知道。
  • 我技術班同學接著提醒,不要走火入魔了,不要寫一個Hello World都要放入Design Pattern(哈哈哈),總之,要領略Design Pattern之前,要先會做一把椅子和書櫃,才會知道哪裡可以加入系統家俱靈活運用的特殊施作工法或零件。聽了他的說法,這週我會再逛一下網站,可以懂就懂,不可以的就不糾結了。
  • (太容易釋懷了吧我......)
我還是會回到幾本基礎的課本上,盡管最近我一直學著coding,但現在我似乎比較清楚,我不太可能在工作內容上做coding,會一直學著是因為,我發現會coding的族群,跟我身邊多數的人想事情的方法不太一樣,同時我也確認,產業會和新事物斷鏈的地方,不是因為缺coding的人,比較缺的人,反而是願意一直去學新事物並且分享的人,同時也努力著把新的觀念和技術都能落實在工作與生活中。上週六我在「2020 Meet Taipei 創新創業嘉年華」,知道了一些在工廠裡的應用,因為正確率或精度的提升,更能實際應用在實體場域中,回頭我把這些東西簡單寫了e-mail給副總、廠長,雖然我很想看到比「謝謝」更多的反饋,想看到他們做點什麼,但其實他們是不是已經在做什麼,我也不知道。
(副總、廠長表示:「難道我會如來神掌也要告訴你嗎?」)
分類:學習

評論
上一篇
  • 下一篇
  • Python Taiwan讀書會_14__Design Patterns in Python
  • 更多文章
    載入中... 沒有更多了