Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Patterns in Library Design (套件設計裡的模式)

1,992 views

Published on

介紹套件中常見的設計模式

Published in: Technology
  • Be the first to comment

Patterns in Library Design (套件設計裡的模式)

  1. 1. 套件設計裡的模式 大澤木小鐵
  2. 2. 故事背景
  3. 3. 故事背景客戶不滿意市面上的圖表套件…
  4. 4. 故事背景客戶不滿意市面上的圖表套件…所以出資希望我們做一套…
  5. 5. 故事背景客戶不滿意市面上的圖表套件…所以出資希望我們做一套… 本故事純屬虛構,台灣很少有這麼好的客戶。
  6. 6. ChartX!
  7. 7. ChartX!本套件也是虛構,台灣很少人會花精力寫這種東西。
  8. 8. 需求
  9. 9. 需求• 支援各類圖表,例如圓餅圖、長條圖。
  10. 10. 需求• 支援各類圖表,例如圓餅圖、長條圖。• 要易於使用,不必瞭解底層繪圖機制。
  11. 11. 需求• 支援各類圖表,例如圓餅圖、長條圖。• 要易於使用,不必瞭解底層繪圖機制。 這客戶非常有良心,沒有進一步的要求。 再次提醒,台灣很少有這麼好的客戶。
  12. 12. 設計前的討論
  13. 13. 設計前的討論• 應該要簡化客戶的工作。
  14. 14. 設計前的討論• 應該要簡化客戶的工作。• 做好該做的事,也就是產生圖表。
  15. 15. 設計前的討論• 應該要簡化客戶的工作。• 做好該做的事,也就是產生圖表。• 儘可能利用別人已經做好的底層繪圖機制。
  16. 16. 設計前的討論• 應該要簡化客戶的工作。• 做好該做的事,也就是產生圖表。• 儘可能利用別人已經做好的底層繪圖機制。• 儘量讓使用者知道的越少越好。
  17. 17. 設計前的討論• 應該要簡化客戶的工作。• 做好該做的事,也就是產生圖表。• 儘可能利用別人已經做好的底層繪圖機制。• 儘量讓使用者知道的越少越好。• 讓使用者容易抽換圖表。
  18. 18. 設計前的討論• 應該要簡化客戶的工作。• 做好該做的事,也就是產生圖表。• 儘可能利用別人已經做好的底層繪圖機制。• 儘量讓使用者知道的越少越好。• 讓使用者容易抽換圖表。• 讓使用者容易擴充功能。
  19. 19. 設計前的討論• 應該要簡化客戶的工作。• 做好該做的事,也就是產生圖表。• 儘可能利用別人已經做好的底層繪圖機制。• 儘量讓使用者知道的越少越好。• 讓使用者容易抽換圖表。• 讓使用者容易擴充功能。• 類別要可以分開開發。
  20. 20. 設計前的討論• 應該要簡化客戶的工作。• 做好該做的事,也就是產生圖表。• 儘可能利用別人已經做好的底層繪圖機制。• 儘量讓使用者知道的越少越好。• 讓使用者容易抽換圖表。• 讓使用者容易擴充功能。• 類別要可以分開開發。• 類別要易於測試。
  21. 21. 設計模式
  22. 22. 設計模式• 一開始不用也沒關係,原則掌握住就好。
  23. 23. 設計模式• 一開始不用也沒關係,原則掌握住就好。• 不要去看模式的形,而是要懂模式的意。
  24. 24. 設計模式• 一開始不用也沒關係,原則掌握住就好。• 不要去看模式的形,而是要懂模式的意。• 通常不會只出現一種模式。
  25. 25. 設計模式• 一開始不用也沒關係,原則掌握住就好。• 不要去看模式的形,而是要懂模式的意。• 通常不會只出現一種模式。 進入設計階段!
  26. 26. 該如何設計套件架構?
  27. 27. 該如何設計套件架構?• 直接從功能與實作分離開始。
  28. 28. 該如何設計套件架構?• 直接從功能與實作分離開始。• 功能:如何將使用者輸入的資料轉換成圖 表的概念。
  29. 29. 該如何設計套件架構?• 直接從功能與實作分離開始。• 功能:如何將使用者輸入的資料轉換成圖 表的概念。• 實作:真正繪製出圖表的底層繪圖引擎。
  30. 30. 該如何設計套件架構?• 直接從功能與實作分離開始。• 功能:如何將使用者輸入的資料轉換成圖 表的概念。• 實作:真正繪製出圖表的底層繪圖引擎。 抽象功能與底層實作分處於兩端…
  31. 31. Bridge Pattern
  32. 32. 繪圖引擎怎麼做?
  33. 33. 繪圖引擎怎麼做?• 繪圖引擎已經定義好 API ,讓 Chart 使用。
  34. 34. 繪圖引擎怎麼做?• 繪圖引擎已經定義好 API ,讓 Chart 使用。• 直接轉介別人已經寫好的繪圖 API (例如 GD 、 Image-Magick) 。
  35. 35. 繪圖引擎怎麼做?• 繪圖引擎已經定義好 API ,讓 Chart 使用。• 直接轉介別人已經寫好的繪圖 API (例如 GD 、 Image-Magick) 。 借用第三方套件,轉換成我們的 API …
  36. 36. Adapter Pattern
  37. 37. 如何建立圖表?
  38. 38. 如何建立圖表?• 用戶知道的越少越好。
  39. 39. 如何建立圖表?• 用戶知道的越少越好。• 讓抽象類別生出子類別。
  40. 40. 如何建立圖表?• 用戶知道的越少越好。• 讓抽象類別生出子類別。 封裝物件生成的過程…
  41. 41. Simple Factory Pattern
  42. 42. 圖表格式
  43. 43. 圖表格式• 呈現資料比例:圓餅圖、長條圖。
  44. 44. 圖表格式• 呈現資料比例:圓餅圖、長條圖。• 同樣的 API ,不同的呈現方式。
  45. 45. 圖表格式• 呈現資料比例:圓餅圖、長條圖。• 同樣的 API ,不同的呈現方式。 可以抽換圖表格式…
  46. 46. Strategy Pattern
  47. 47. 還要注意什麼?
  48. 48. 還要注意什麼?• 這個例子並沒有涵蓋所有模式。
  49. 49. 還要注意什麼?• 這個例子並沒有涵蓋所有模式。• 每種套件的設計不盡相同。
  50. 50. 還要注意什麼?• 這個例子並沒有涵蓋所有模式。• 每種套件的設計不盡相同。• 不要將模式強套上去。
  51. 51. 還要注意什麼?• 這個例子並沒有涵蓋所有模式。• 每種套件的設計不盡相同。• 不要將模式強套上去。 實作的事就交給你的同事吧~
  52. 52. 謝謝收看

×