關於一個application framework 該怎麼設計,根據這陣子工作的經驗,整理一些心得。
- 使用時鬆散,設計時嚴謹。
鬆散是方便使用者,算是抽象化帶來的好處,使其不需要瞭解運作細節就可以使用。設計嚴謹才容易在其上發展更多應用,如輔助工具等。可以讓你鬆散使用的技術,背後在設計的時候都有嚴謹的定義,當運作不如你預期的時候,可以依循一個嚴謹的規則檢視背後的運作流程來除錯。 - 從簡單的原則與概念開始,漸進地增加概念。
每次增加一個概念,都要與既有概念一起比較分析,看有無衝突之處。
Spring framework 最早只從一個 Dependency Injection概念開始,發展到今天成為一個 de facto Java EE standard。
我相信儘可能的維持簡單才是好的設計,因為人的心智是極為有限的。 - 整體應維持一致的設計哲學。
兩種相反的程式語言設計哲學:
Python: There should be one-- and preferably only one --obvious way to do it
Perl: There's more than one way to do it.
沒有對錯,只有維持一致才不會讓使用者混亂。
有一致的規則,使用者容易理解,可以舉一反三,不用事事皆需查文件,也無需針對各種情況寫文件。 - 從使用角度來定義需求,並用嚴謹的技術去滿足。
從使用者角度評估才能解決他們真正的痛點,但用嚴謹的技術才能維持長久發展。 - Framework 新創的抽象概念應有明確的定義。
定義不清楚將導致使用者學習的障礙。 - Application framework不是Application
Application framework的目的是協助它的使用者建造application,而application(應用程式)本身是要解決應用情境的問題。所以application framework的抽象層次要更高一點,不要對應用情境有過多的假設。
留言